Allow .git/branches and .git/remotes to be missing
[stgit] / stgit / git.py
index e30b959..3d84e97 100644 (file)
@@ -23,6 +23,7 @@ import sys, os, popen2, re, gitmergeonefile
 from stgit import basedir
 from stgit.utils import *
 from stgit.config import config
+from sets import Set
 
 # git exception class
 class GitException(Exception):
@@ -807,9 +808,9 @@ def reset(files = None, tree_id = None, check_out = True):
     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()
@@ -822,10 +823,6 @@ def pull(repository = 'origin', refspec = None):
     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
     """
@@ -907,15 +904,19 @@ def __remotes_from_config():
     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
     """
 
-    return set(__remotes_from_config()) | \
-           set(__remotes_from_dir('remotes')) | \
-           set(__remotes_from_dir('branches'))
+    return Set(__remotes_from_config()) | \
+           Set(__remotes_from_dir('remotes')) | \
+           Set(__remotes_from_dir('branches'))
 
 def remotes_local_branches(remote):
     """Returns the list of local branches fetched from given remote