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