瀏覽代碼

add support for setting lightweight tags.

Jelmer Vernooij 16 年之前
父節點
當前提交
bb394b5003
共有 2 個文件被更改,包括 18 次插入3 次删除
  1. 15 3
      dulwich/repo.py
  2. 3 0
      dulwich/tests/test_repository.py

+ 15 - 3
dulwich/repo.py

@@ -41,11 +41,20 @@ SYMREF = 'ref: '
 
 class Tags(object):
 
-    def __init__(self, tags):
+    def __init__(self, tagdir, tags):
+        self.tagdir = tagdir
         self.tags = tags
 
     def __getitem__(self, name):
         return self.tags[name]
+    
+    def __setitem__(self, name, ref):
+        self.tags[name] = ref
+        f = open(os.path.join(self.tagdir(), name), 'wb')
+        try:
+            f.write("%s\n" % ref)
+        finally:
+            f.close()
 
     def __len__(self):
         return len(self.tags)
@@ -69,7 +78,7 @@ class Repo(object):
     else:
       raise NotGitRepository(root)
     self.path = root
-    self.tags = Tags(self.get_tags())
+    self.tags = Tags(self.tagdir(), self.get_tags())
     self._object_store = None
 
   def controldir(self):
@@ -193,9 +202,12 @@ class Repo(object):
       os.remove(file)
       return
 
+  def tagdir(self):
+    return os.path.join(self.controldir(), 'refs', 'tags')
+
   def get_tags(self):
     ret = {}
-    for root, dirs, files in os.walk(os.path.join(self.controldir(), 'refs', 'tags')):
+    for root, dirs, files in os.walk(self.tagdir()):
       for name in files:
         ret[name] = self._get_ref(os.path.join(root, name))
     return ret

+ 3 - 0
dulwich/tests/test_repository.py

@@ -127,3 +127,6 @@ class RepositoryTests(unittest.TestCase):
                             'fb5b0425c7ce46959bec94d54b9a157645e114f5',
                             'f9e39b120c68182a4ba35349f832d0e4e61f485c'])
 
+  def test_get_tags_empty(self):
+   r = self.open_repo('ooo_merge')
+   self.assertEquals({}, r.get_tags())