Rev 1433: Support setting tags. in file:///data/jelmer/bzr-svn/tags/
Jelmer Vernooij
jelmer at samba.org
Thu Jul 3 22:12:29 BST 2008
At file:///data/jelmer/bzr-svn/tags/
------------------------------------------------------------
revno: 1433
revision-id: jelmer at samba.org-20080703211228-3bvk5itd516n75px
parent: jelmer at samba.org-20080703203944-ro3eh9caweh59aav
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: tags
timestamp: Thu 2008-07-03 23:12:28 +0200
message:
Support setting tags.
modified:
branch.py svnbranch.py-20051017135706-11c749eb0dab04a7
tests/test_branch.py test_branch.py-20060508162215-74ffeb5d608f8e20
=== modified file 'branch.py'
--- a/branch.py 2008-07-03 20:39:44 +0000
+++ b/branch.py 2008-07-03 21:12:28 +0000
@@ -22,6 +22,7 @@
NoSuchTag, NotBranchError, UnstackableBranchFormat)
from bzrlib.inventory import (Inventory)
from bzrlib.revision import is_null, ensure_null, NULL_REVISION
+from bzrlib.tag import BasicTags
from bzrlib.workingtree import WorkingTree
from bzrlib.plugins.svn import core
@@ -51,15 +52,33 @@
pass
-class SubversionTags:
- def __init__(self, repository, layout=None, project=""):
- self.repository = repository
- self.layout = layout or repository.get_layout()
+class SubversionTags(BasicTags):
+ def __init__(self, branch, layout=None, project=""):
+ self.branch = branch
+ self.repository = branch.repository
+ self.layout = layout or self.repository.get_layout()
self.project = project
def set_tag(self, tag_name, tag_target):
- # TODO: copy tag_target to tags/tag_name
- raise NotImplementedError
+ path = self.layout.get_tag_path(tag_name, self.project)
+ parent = urlutils.dirname(path)
+ (from_bp, from_revnum, mapping) = self.repository.lookup_revision_id(tag_target)
+ conn = self.repository.transport.connections.get(urlutils.join(self.repository.base, parent))
+ deletefirst = (conn.check_path(urlutils.basename(path), self.repository.get_latest_revnum()) != core.NODE_NONE)
+ try:
+ ci = conn.get_commit_editor({"svn:log": "Add tag %s" % tag_name})
+ try:
+ root = ci.open_root()
+ if deletefirst:
+ root.delete_entry(urlutils.basename(path))
+ root.add_directory(urlutils.basename(path), urlutils.join(self.repository.base, from_bp), from_revnum)
+ root.close()
+ except:
+ ci.abort()
+ raise
+ ci.close()
+ finally:
+ self.repository.transport.add_connection(conn)
def lookup_tag(self, tag_name):
try:
@@ -87,7 +106,7 @@
path = self.layout.get_tag_path(tag_name, self.project)
parent = urlutils.dirname(path)
conn = self.repository.transport.connections.get(urlutils.join(self.repository.base, parent))
- if self.repository.transport.check_path(path, self.repository.get_latest_revnum()) != core.NODE_DIR:
+ if conn.check_path(urlutils.basename(path), self.repository.get_latest_revnum()) != core.NODE_DIR:
raise NoSuchTag(tag_name)
try:
ci = conn.get_commit_editor({"svn:log": "Remove tag %s" % tag_name})
@@ -102,9 +121,6 @@
finally:
self.repository.transport.add_connection(conn)
- def merge_to(self, to_tags, overwrite=False):
- raise NotImplementedError
-
class SvnBranch(Branch):
"""Maps to a Branch in a Subversion repository """
@@ -142,7 +158,7 @@
raise NotSvnBranchPath(branch_path, mapping=self.mapping)
def _make_tags(self):
- return SubversionTags(self.repository)
+ return SubversionTags(self)
def set_branch_path(self, branch_path):
"""Change the branch path for this branch.
=== modified file 'tests/test_branch.py'
--- a/tests/test_branch.py 2008-07-03 20:39:44 +0000
+++ b/tests/test_branch.py 2008-07-03 21:12:28 +0000
@@ -27,6 +27,7 @@
import os
from unittest import TestCase
+from bzrlib.plugins.svn import core
from bzrlib.plugins.svn.branch import FakeControlFiles, SvnBranchFormat
from bzrlib.plugins.svn.convert import load_dumpfile
from bzrlib.plugins.svn.mapping import SVN_PROP_BZR_REVISION_ID
@@ -58,6 +59,25 @@
b = Branch.open(repos_url + "/trunk")
self.assertEquals(["foo"], b.tags.get_tag_dict().keys())
+ def test_tag_set(self):
+ repos_url = self.make_repository('a')
+
+ dc = self.get_commit_editor(repos_url)
+ dc.add_dir("trunk")
+ dc.add_dir("tags")
+ dc.close()
+
+ dc = self.get_commit_editor(repos_url)
+ trunk = dc.open_dir("trunk")
+ trunk.add_file("trunk/bla").modify()
+ dc.close()
+
+ b = Branch.open(repos_url + "/trunk")
+ b.tags.set_tag("mytag", b.repository.generate_revision_id(1, "trunk", b.repository.get_mapping()))
+
+ self.assertEquals(core.NODE_DIR,
+ b.repository.transport.check_path("tags/mytag", 3))
+
def test_tags_delete(self):
repos_url = self.make_repository("a")
More information about the bazaar-commits
mailing list