+ def get_parent_remote(self):
+ value = config.get('branch.%s.remote' % self.__name)
+ 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" ' \
+ '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
+
+ def __set_parent_remote(self, remote):
+ value = config.set('branch.%s.remote' % self.__name, remote)
+
+ def get_parent_branch(self):
+ 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.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):
+ 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)
+ # We'll enforce this later
+# else:
+# raise StackException, 'Parent branch (%s) should be specified for %s' % localbranch, self.__name
+