Rev 1635: Create tags base directory if it doesn't exist. in http://people.samba.org/bzr/jelmer/bzr-svn/trunk

Jelmer Vernooij jelmer at samba.org
Sun Aug 24 16:22:43 BST 2008


At http://people.samba.org/bzr/jelmer/bzr-svn/trunk

------------------------------------------------------------
revno: 1635
revision-id: jelmer at samba.org-20080824152240-o63u79rsvoroslhy
parent: jelmer at samba.org-20080824150124-8cwrjnjwwax3b5qn
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Sun 2008-08-24 17:22:40 +0200
message:
  Create tags base directory if it doesn't exist.
modified:
  NEWS                           news-20061231030336-h9fhq245ie0de8bs-1
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  mapping3/scheme.py             scheme.py-20060516195850-95181aae6b272f9e
  tags.py                        tags.py-20080822211316-scblu3akdvu0b64c-1
=== modified file 'NEWS'
--- a/NEWS	2008-08-24 14:52:00 +0000
+++ b/NEWS	2008-08-24 15:22:40 +0000
@@ -19,9 +19,11 @@
      (#246243). The --keep option can be specified to keep 
 	 branches removed in Subversion around.
 
-   * add --incremental option to bzr-svn for incremental imports.
-
-   * set revision properties from v3 mappings when possible.
+   * Add --incremental option to bzr-svn for incremental imports.
+
+   * Set revision properties from v3 mappings when possible.
+
+   * Create tags base directory if it doesn't exist.
 
 bzr-svn 0.4.11~rc1	2008-08-08
 

=== modified file 'commit.py'
--- a/commit.py	2008-08-24 14:52:00 +0000
+++ b/commit.py	2008-08-24 15:22:40 +0000
@@ -502,7 +502,7 @@
             if replace_existing and self.branch._get_append_revisions_only():
                 raise AppendRevisionsOnlyViolation(self.branch.base)
 
-            # TODO: Accept create_prefix argument (#118787)
+            # TODO: Accept create_prefix argument
             branch_editors = self.open_branch_editors(root, bp_parts,
                 existing_bp_parts, self.base_path, self.base_revnum, 
                 replace_existing)

=== modified file 'mapping3/scheme.py'
--- a/mapping3/scheme.py	2008-08-23 15:14:26 +0000
+++ b/mapping3/scheme.py	2008-08-24 15:22:40 +0000
@@ -263,9 +263,10 @@
         self.tag_list = ["*/" * level + "tags/*"]
 
     def get_tag_path(self, name, project=""):
+        assert isinstance(name, unicode)
         if project == "":
-            return urlutils.join("tags", name)
-        return urlutils.join(project, "tags", name)
+            return urlutils.join("tags", name.encode("utf-8"))
+        return urlutils.join(project, "tags", name.encode("utf-8"))
 
     def get_branch_path(self, name, project=""):
         # Only implemented for level 0

=== modified file 'tags.py'
--- a/tags.py	2008-08-23 17:55:26 +0000
+++ b/tags.py	2008-08-24 15:22:40 +0000
@@ -16,16 +16,54 @@
 from bzrlib import urlutils
 from bzrlib.errors import NoSuchRevision, NoSuchTag
 from bzrlib.tag import BasicTags
+from bzrlib.trace import mutter
 
-from bzrlib.plugins.svn import core
+from bzrlib.plugins.svn import commit, core, properties
 
 class SubversionTags(BasicTags):
     def __init__(self, branch):
         self.branch = branch
         self.repository = branch.repository
 
+    def _ensure_tag_parent_exists(self, parent):
+        assert isinstance(parent, str)
+        bp_parts = parent.split("/")
+        existing_bp_parts = commit._check_dirs_exist(
+                self.repository.transport, 
+                bp_parts, self.repository.get_latest_revnum())
+        if existing_bp_parts == bp_parts:
+            return
+        conn = self.repository.transport.get_connection()
+        try:
+            ci = conn.get_commit_editor({properties.PROP_REVISION_LOG: "Add tags base directory."})
+            try:
+                root = ci.open_root()
+                name = None
+                batons = [root]
+                for p in existing_bp_parts:
+                    if name is None:
+                        name = p
+                    else:
+                        name += "/" + p
+                    batons.append(batons[-1].open_directory(name))
+                for p in bp_parts[len(existing_bp_parts):]:
+                    if name is None:
+                        name = p
+                    else:
+                        name += "/" + p
+                    batons.append(batons[-1].add_directory(name))
+                for baton in reversed(batons):
+                    baton.close()
+            except:
+                ci.abort()
+                raise
+            ci.close()
+        finally:
+            self.repository.transport.add_connection(conn)
+
     def set_tag(self, tag_name, tag_target):
         path = self.branch.layout.get_tag_path(tag_name, self.branch.project)
+        assert isinstance(path, str)
         parent = urlutils.dirname(path)
         try:
             (from_bp, from_revnum, mapping) = self.repository.lookup_revision_id(tag_target)
@@ -34,10 +72,11 @@
             return
         if from_bp == path:
             return
+        self._ensure_tag_parent_exists(parent)
         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})
+            ci = conn.get_commit_editor({properties.PROP_REVISION_LOG: "Add tag %s" % tag_name})
             try:
                 root = ci.open_root()
                 if deletefirst:
@@ -81,7 +120,7 @@
         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})
+            ci = conn.get_commit_editor({properties.PROP_REVISION_LOG: "Remove tag %s" % tag_name})
             try:
                 root = ci.open_root()
                 root.delete_entry(urlutils.basename(path))




More information about the bazaar-commits mailing list