[PATCH] Fix stgit assumptions about branch.*.merge.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Use branch.*.stgit.parentbranch for authoritative parent information.

Enforce 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.

For this, set the API to use remote=None as "parent branch is local",
and have set_parent() translate that to branch.*.remote=".".

Signed-off-by: Yann Dirson <ydirson@xxxxxxxxxx>
---

This does as described in
<20070203214619.GM5362@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>

 stgit/commands/branch.py |    3 ++-
 stgit/git.py             |    5 +----
 stgit/stack.py           |   22 ++++++++++++++--------
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/stgit/commands/branch.py b/stgit/commands/branch.py
index f074d47..3026d9c 100644
--- a/stgit/commands/branch.py
+++ b/stgit/commands/branch.py
@@ -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,
diff --git a/stgit/git.py b/stgit/git.py
index 6769a9f..44d5b0e 100644
--- a/stgit/git.py
+++ b/stgit/git.py
@@ -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():
diff --git a/stgit/stack.py b/stgit/stack.py
index 9609ed3..82f412a 100644
--- a/stgit/stack.py
+++ b/stgit/stack.py
@@ -418,7 +418,7 @@ 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
@@ -427,25 +427,31 @@ 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'." % (self.__name, self.__name)
+            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()
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]