Browse Source

Allow passing in global force argument to parse_reftuple.

Jelmer Vernooij 4 years ago
parent
commit
f401f2f979
2 changed files with 11 additions and 5 deletions
  1. 6 5
      dulwich/objectspec.py
  2. 5 0
      dulwich/tests/test_objectspec.py

+ 6 - 5
dulwich/objectspec.py

@@ -83,7 +83,7 @@ def parse_ref(container, refspec):
     raise KeyError(refspec)
 
 
-def parse_reftuple(lh_container, rh_container, refspec):
+def parse_reftuple(lh_container, rh_container, refspec, force=False):
     """Parse a reftuple spec.
 
     Args:
@@ -98,8 +98,6 @@ def parse_reftuple(lh_container, rh_container, refspec):
     if refspec.startswith(b"+"):
         force = True
         refspec = refspec[1:]
-    else:
-        force = False
     if b":" in refspec:
         (lh, rh) = refspec.split(b":")
     else:
@@ -120,13 +118,15 @@ def parse_reftuple(lh_container, rh_container, refspec):
     return (lh, rh, force)
 
 
-def parse_reftuples(lh_container, rh_container, refspecs):
+def parse_reftuples(
+        lh_container, rh_container, refspecs, force=False):
     """Parse a list of reftuple specs to a list of reftuples.
 
     Args:
       lh_container: A RefsContainer object
       hh_container: A RefsContainer object
       refspecs: A list of refspecs or a string
+      force: Force overwriting for all reftuples
     Returns: A list of refs
     Raises:
       KeyError: If one of the refs can not be found
@@ -136,7 +136,8 @@ def parse_reftuples(lh_container, rh_container, refspecs):
     ret = []
     # TODO: Support * in refspecs
     for refspec in refspecs:
-        ret.append(parse_reftuple(lh_container, rh_container, refspec))
+        ret.append(parse_reftuple(
+        lh_container, rh_container, refspec, force=force))
     return ret
 
 

+ 5 - 0
dulwich/tests/test_objectspec.py

@@ -178,6 +178,8 @@ class ParseReftupleTests(TestCase):
                          parse_reftuple(r, r, b"+foo"))
         self.assertEqual((b"refs/heads/foo", b"refs/heads/foo", True),
                          parse_reftuple(r, {}, b"+foo"))
+        self.assertEqual((b"refs/heads/foo", b"refs/heads/foo", True),
+                         parse_reftuple(r, {}, b"foo", True))
 
     def test_full(self):
         r = {b"refs/heads/foo": "bla"}
@@ -216,6 +218,9 @@ class ParseReftuplesTests(TestCase):
         r = {b"refs/heads/foo": "bla"}
         self.assertEqual([(b"refs/heads/foo", b"refs/heads/foo", False)],
                          parse_reftuples(r, r, b"refs/heads/foo"))
+        r = {b"refs/heads/foo": "bla"}
+        self.assertEqual([(b"refs/heads/foo", b"refs/heads/foo", True)],
+                         parse_reftuples(r, r, b"refs/heads/foo", True))
 
 
 class ParseTreeTests(TestCase):