chiark / gitweb /
Use branch.*.stgit.parentbranch for authoritative parent information.
authorYann Dirson <ydirson@altern.org>
Mon, 5 Feb 2007 22:18:23 +0000 (22:18 +0000)
committerCatalin Marinas <catalin.marinas@gmail.com>
Mon, 5 Feb 2007 22:18:23 +0000 (22:18 +0000)
Also set the API to use remote=None as "parent branch is local", and
have set_parent() translate that to branch.*.remote=".".

Also enforces that we never set a parent-branch info without a
parent-remote (so they are now both set or both untouched), and try to
give useful info when we have to use the old "origin" defaults.

Signed-off-by: Yann Dirson <ydirson@altern.org>
stgit/commands/branch.py
stgit/git.py
stgit/stack.py

index d7ddedba73f097a53dcb0126753290845b8a848b..032218ab49f77f7d91c46b6803e22d5a4026be43 100644 (file)
@@ -151,8 +151,9 @@ def func(parser, options, args):
             if parentremote:
                 print 'Using "%s" remote to pull parent from.' % parentremote
             else:
-                print 'Not identified a remote to pull parent from.'
+                print 'Recording as a local branch.'
         else:
+            # no known parent branch, can't guess the remote
             parentremote = None
 
         stack.Series(args[0]).init(create_at = tree_id,
index 6769a9f574417827642b22b1768e9852ca3e8019..44d5b0e9ba22a6f94910eaf9f69b6b39fbb1afe5 100644 (file)
@@ -951,10 +951,7 @@ def identify_remote(branchname):
         if branchname in remotes_local_branches(remote):
             return remote
 
-    # FIXME: in the case of local branch we should maybe set remote to
-    # "." but are we even sure it is the only case left ?
-
-    # if we get here we've found nothing
+    # if we get here we've found nothing, the branch is a local one
     return None
 
 def fetch_head():
index 7f3b65d3194059acd5724ea057afb12bec6d132d..3632aa1b94a25e58c13cfd3dc496e0681bc2a460 100644 (file)
@@ -418,9 +418,10 @@ class Series(StgitObject):
         if value:
             return value
         elif 'origin' in git.remotes_list():
-            print 'Notice: no parent remote declared for stack "%s", defaulting to "origin".' \
-                  ' Consider setting "branch.%s.remote" with "git repo-config".' \
-                  % (self.__name, self.__name)
+            print 'Notice: no parent remote declared for stack "%s", ' \
+                  'defaulting to "origin". Consider setting "branch.%s.remote" ' \
+                  'and "branch.%s.merge" with "git repo-config".' \
+                  % (self.__name, self.__name, self.__name)
             return 'origin'
         else:
             raise StackException, 'Cannot find a parent remote for "%s"' % self.__name
@@ -429,27 +430,34 @@ class Series(StgitObject):
         value = config.set('branch.%s.remote' % self.__name, remote)
 
     def get_parent_branch(self):
-        value = config.get('branch.%s.merge' % self.__name)
+        value = config.get('branch.%s.stgit.parentbranch' % self.__name)
         if value:
             return value
         elif git.rev_parse('heads/origin'):
-            print 'Notice: no parent branch declared for stack "%s", defaulting to "heads/origin".' \
-                  ' Consider setting "branch.%s.merge" with "git repo-config".' \
+            print 'Notice: no parent branch declared for stack "%s", ' \
+                  'defaulting to "heads/origin". Consider setting ' \
+                  '"branch.%s.stgit.parentbranch" with "git repo-config".' \
                   % (self.__name, self.__name)
             return 'heads/origin'
         else:
             raise StackException, 'Cannot find a parent branch for "%s"' % self.__name
 
     def __set_parent_branch(self, name):
-        config.set('branch.%s.merge' % self.__name, name)
+        if config.get('branch.%s.remote' % self.__name):
+            # Never set merge if remote is not set to avoid
+            # possibly-erroneous lookups into 'origin'
+            config.set('branch.%s.merge' % self.__name, name)
+        config.set('branch.%s.stgit.parentbranch' % self.__name, name)
 
     def set_parent(self, remote, localbranch):
+        # policy: record local branches as remote='.'
+        recordremote = remote or '.'
         if localbranch:
+            self.__set_parent_remote(recordremote)
             self.__set_parent_branch(localbranch)
-            if remote:
-                self.__set_parent_remote(remote)
-        elif remote:
-            raise StackException, 'Remote "%s" without a branch cannot be used as parent' % remote
+        # We'll enforce this later
+#         else:
+#             raise StackException, 'Parent branch (%s) should be specified for %s' % localbranch, self.__name
 
     def __patch_is_current(self, patch):
         return patch.get_name() == self.get_current()