raise GitException, 'Could not update HEAD to "%s".' % val
__head = val
+ # only allow SHA1 hashes
+ assert(len(__head) == 40)
+
def __clear_head_cache():
"""Sets the __head to None so that a re-read is forced
"""
return commit_id
-def apply_diff(rev1, rev2):
+def apply_diff(rev1, rev2, check_index = True):
"""Apply the diff between rev1 and rev2 onto the current
index. This function doesn't need to raise an exception since it
is only used for fast-pushing a patch. If this operation fails,
the pushing would fall back to the three-way merge.
"""
- return os.system('git-diff-tree -p %s %s | git-apply --index 2> /dev/null'
- % (rev1, rev2)) == 0
+ if check_index:
+ index_opt = '--index'
+ else:
+ index_opt = ''
+ cmd = 'git-diff-tree -p %s %s | git-apply %s 2> /dev/null' \
+ % (rev1, rev2, index_opt)
+
+ return os.system(cmd) == 0
def merge(base, head1, head2):
"""Perform a 3-way merge between base, head1 and head2 into the
__set_head(tree_id)
-def reset(files = None, tree_id = 'HEAD'):
+def reset(files = None, tree_id = None):
"""Revert the tree changes relative to the given tree_id. It removes
any local changes
"""
+ if not tree_id:
+ tree_id = get_head()
+
checkout(files, tree_id, True)
# if the reset refers to the whole tree, switch the HEAD as well
- if tree_id and not files:
+ if not files:
__set_head(tree_id)
def pull(repository = 'origin', refspec = None):