浏览代码

Support unicode for tags.

Jelmer Vernooij 7 年之前
父节点
当前提交
ab9fb315df
共有 2 个文件被更改,包括 20 次插入2 次删除
  1. 8 2
      dulwich/porcelain.py
  2. 12 0
      dulwich/tests/test_porcelain.py

+ 8 - 2
dulwich/porcelain.py

@@ -699,7 +699,7 @@ def tag_create(
         else:
             tag_id = object.id
 
-        r.refs[b'refs/tags/' + tag] = tag_id
+        r.refs[_make_tag_ref(tag)] = tag_id
 
 
 def list_tags(*args, **kwargs):
@@ -734,7 +734,7 @@ def tag_delete(repo, name):
         else:
             raise TypeError("Unexpected tag name type %r" % name)
         for name in names:
-            del r.refs[b"refs/tags/" + name]
+            del r.refs[_make_tag_ref(name)]
 
 
 def reset(repo, mode, treeish="HEAD"):
@@ -1013,6 +1013,12 @@ def _make_branch_ref(name):
     return b"refs/heads/" + name
 
 
+def _make_tag_ref(name):
+    if getattr(name, 'encode', None):
+        name = name.encode(DEFAULT_ENCODING)
+    return b"refs/tags/" + name
+
+
 def branch_delete(repo, name):
     """Delete a branch.
 

+ 12 - 0
dulwich/tests/test_porcelain.py

@@ -583,6 +583,18 @@ class TagCreateTests(PorcelainTestCase):
         self.repo[b'refs/tags/tryme']
         self.assertEqual(list(tags.values()), [self.repo.head()])
 
+    def test_unannotated_unicode(self):
+        c1, c2, c3 = build_commit_graph(
+                self.repo.object_store, [[1], [2, 1], [3, 1, 2]])
+        self.repo.refs[b"HEAD"] = c3.id
+
+        porcelain.tag_create(self.repo.path, "tryme", annotated=False)
+
+        tags = self.repo.refs.as_dict(b"refs/tags")
+        self.assertEqual(list(tags.keys()), [b"tryme"])
+        self.repo[b'refs/tags/tryme']
+        self.assertEqual(list(tags.values()), [self.repo.head()])
+
 
 class TagListTests(PorcelainTestCase):