if not files:
__set_head(tree_id)
-def pull(repository = 'origin', refspec = None):
- """Pull changes from the remote repository. Uses 'git-fetch'
- and moves the stack base.
+def fetch(repository = 'origin', refspec = None):
+ """Fetches changes from the remote repository, using 'git-fetch'
+ by default.
"""
# we update the HEAD
__clear_head_cache()
if __run(command, args) != 0:
raise GitException, 'Failed "%s %s"' % (command, repository)
- if (config.get('stgit.pull-does-rebase')):
- # FIXME!
- reset(tree_id = rev_parse(repository))
-
def repack():
"""Repack all objects into a single pack
"""
return config.sections_matching(r'remote\.(.*)\.url')
def __remotes_from_dir(dir):
- return os.listdir(os.path.join(basedir.get(), dir))
+ d = os.path.join(basedir.get(), dir)
+ if os.path.exists(d):
+ return os.listdir(d)
+ else:
+ return None
def remotes_list():
"""Return the list of remotes in the repository
for line in stream:
# Only consider Pull lines
m = re.match('^Pull: (.*)\n$', line)
- branches.append(refspec_localpart(m.group(1)))
+ if m:
+ branches.append(refspec_localpart(m.group(1)))
stream.close()
elif remote in __remotes_from_dir('branches'):
# old-style branches only declare one branch
# if we get here we've found nothing
return None
+
+def fetch_head():
+ """Return the git id for the tip of the parent branch as left by
+ 'git fetch'.
+ """
+
+ fetch_head=None
+ stream = open(os.path.join(basedir.get(), 'FETCH_HEAD'), "r")
+ for line in stream:
+ # Only consider lines not tagged not-for-merge
+ m = re.match('^([^\t]*)\t\t', line)
+ if m:
+ if fetch_head:
+ raise GitException, "StGit does not support multiple FETCH_HEAD"
+ else:
+ fetch_head=m.group(1)
+ stream.close()
+
+ # here we are sure to have a single fetch_head
+ return fetch_head