Skip to content

Commit

Permalink
add support for setting/getting remote branch configuration (for pull…
Browse files Browse the repository at this point in the history
…/fetch)
  • Loading branch information
vmalloc committed Feb 3, 2010
1 parent 7d455a9 commit 068e55b
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 1 deletion.
21 changes: 20 additions & 1 deletion git/branch.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import re
from ref import Ref

class Branch(Ref):
Expand All @@ -32,7 +33,25 @@ def __repr__(self):
class LocalBranch(Branch):
def delete(self, force=True):
self.repo._executeGitCommandAssertSuccess("git branch -%s %s" % ("D" if force else "d", self.name,))

def setRemoteBranch(self, branch):
if branch is None:
self.repo.config.unsetParameter('branch.%s.remote' % self.name)
self.repo.config.unsetParameter('branch.%s.merge' % self.name)
return
elif not isinstance(branch, RegisteredRemoteBranch):
raise ValueError("Remote branch must be a remote branch object (got %r)" % (branch,))
self.repo.config.setParameter('branch.%s.remote' % self.name, branch.remote.name)
self.repo.config.setParameter('branch.%s.merge' % self.name, 'refs/heads/%s' % branch.name)
def getRemoteBranch(self):
remote = self.repo.config.getParameter('branch.%s.remote' % self.name)
if remote is None:
return None
remote = self.repo.getRemoteByName(remote)
merge = self.repo.config.getParameter('branch.%s.merge' % self.name)
merge = re.sub('^refs/heads/', '', merge)
remote_branch = remote.getBranchByName(merge)
return remote_branch

class LocalBranchAlias(LocalBranch):
def __init__(self, repository, name, dest):
super(LocalBranchAlias, self).__init__(repository, name)
Expand Down
6 changes: 6 additions & 0 deletions git/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ class GitConfiguration(object):
def __init__(self, repo):
super(GitConfiguration, self).__init__()
self.repo = repo
def setParameter(self, path, value, local=True):
self.repo._executeGitCommandAssertSuccess("git config %s \"%s\" \"%s\"" % ("" if local else "--global", path, value))
def unsetParameter(self, path, local=True):
self.repo._executeGitCommandAssertSuccess("git config --unset %s \"%s\"" % ("" if local else "--global", path))
def getParameter(self, path):
return self.getDict().get(path, None)
def getDict(self):
return dict(line.strip().split("=",1)
for line in self.repo._getOutputAssertSuccess("git config -l").splitlines())
4 changes: 4 additions & 0 deletions tests/test_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ def testRepositoryInit(self):
self.assertTrue(self.repo.isValid())
self.failUnless(os.path.isdir(self.dirname))
self.failUnless(os.path.isdir(os.path.join(self.dirname, ".git")))
def testConfiguration(self):
self.repo.init()
self.repo.config.setParameter('a.b.c', 2)
self.assertEquals(self.repo.config.getParameter('a.b.c'), '2')
def testRepositoryInitWhenExists(self):
os.mkdir(self.dirname)
self.repo.init()
Expand Down
9 changes: 9 additions & 0 deletions tests/test_collaboration.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ def tearDown(self):
utils.delete_repository(self.repo1)
utils.delete_repository(self.repo2)

def testRemotePushBranches(self):
b = self.repo2.createBranch("branch")
self.repo1.createBranch('remote_branch')
self.repo2.fetch()
remote_branch = self.repo2.getRemoteByName('origin').getBranchByName('remote_branch')
b.setRemoteBranch(remote_branch)
self.assertEquals(b.getRemoteBranch(), remote_branch)
b.setRemoteBranch(None)
self.assertEquals(b.getRemoteBranch(), None)
def testCollaboration(self):
new_file_base_name = "new_file.txt"
new_filename = os.path.join(self.repo1.path, new_file_base_name)
Expand Down

0 comments on commit 068e55b

Please sign in to comment.