{"thread":{"id":"33438","subject":"[PATCH 0/2] remote-bzr: fixes","startedAt":"2013-04-08T18:36:37Z","lastAt":"2013-04-08T18:36:39Z","messageCount":3,"participants":["Felipe Contreras"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"213577","messageId":"1365446199-11382-1-git-send-email-felipe.contreras@gmail.com","threadId":"33438","inReplyTo":null,"subject":"[PATCH 0/2] remote-bzr: fixes","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-08T18:36:37Z","receivedAt":"2013-04-08T18:36:37Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Hi,\n\nResending because the previous commits were already merged. The second one is\nprobably important.\n\nChristophe Simonis (1):\n  remote-bzr: fix utf-8 support for fetching\n\nFelipe Contreras (1):\n  remote-bzr: improve tag handling\n\n contrib/remote-helpers/git-remote-bzr | 44 +++++++++++++++++++++--------------\n contrib/remote-helpers/test-bzr.sh    |  9 ++++++-\n 2 files changed, 35 insertions(+), 18 deletions(-)\n\n-- \n1.8.2\n"},{"id":"213578","messageId":"1365446199-11382-2-git-send-email-felipe.contreras@gmail.com","threadId":"33438","inReplyTo":"1365446199-11382-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 1/2] remote-bzr: fix utf-8 support for fetching","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-08T18:36:38Z","receivedAt":"2013-04-08T18:36:38Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"From: Christophe Simonis <christophe@kn.gl>\n\nThe previous patches didn't deal with all the scenarios.\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr | 19 +++++++++++--------\n contrib/remote-helpers/test-bzr.sh    |  9 ++++++++-\n 2 files changed, 19 insertions(+), 9 deletions(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex fad4a48..55ebf19 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -183,21 +183,24 @@ def get_filechanges(cur, prev):\n \n     changes = cur.changes_from(prev)\n \n+    def u(s):\n+        return s.encode('utf-8')\n+\n     for path, fid, kind in changes.added:\n-        modified[path] = fid\n+        modified[u(path)] = fid\n     for path, fid, kind in changes.removed:\n-        removed[path] = None\n+        removed[u(path)] = None\n     for path, fid, kind, mod, _ in changes.modified:\n-        modified[path] = fid\n+        modified[u(path)] = fid\n     for oldpath, newpath, fid, kind, mod, _ in changes.renamed:\n-        removed[oldpath] = None\n+        removed[u(oldpath)] = None\n         if kind == 'directory':\n             lst = cur.list_files(from_dir=newpath, recursive=True)\n             for path, file_class, kind, fid, entry in lst:\n                 if kind != 'directory':\n-                    modified[newpath + '/' + path] = fid\n+                    modified[u(newpath + '/' + path)] = fid\n         else:\n-            modified[newpath] = fid\n+            modified[u(newpath)] = fid\n \n     return modified, removed\n \n@@ -223,7 +226,7 @@ def export_files(tree, files):\n             # is the blog already exported?\n             if h in filenodes:\n                 mark = filenodes[h]\n-                final.append((mode, mark, path.encode('utf-8')))\n+                final.append((mode, mark, path))\n                 continue\n \n             d = tree.get_file_text(fid)\n@@ -240,7 +243,7 @@ def export_files(tree, files):\n         print \"data %d\" % len(d)\n         print d\n \n-        final.append((mode, mark, path.encode('utf-8')))\n+        final.append((mode, mark, path))\n \n     return final\n \ndiff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh\nindex f4c7768..e800c97 100755\n--- a/contrib/remote-helpers/test-bzr.sh\n+++ b/contrib/remote-helpers/test-bzr.sh\n@@ -177,6 +177,13 @@ test_expect_success 'fetch utf-8 filenames' '\n \n   echo test >> \"áéíóú\" &&\n   bzr add \"áéíóú\" &&\n+  echo test >> \"îø∫∆\" &&\n+  bzr add \"îø∫∆\" &&\n+  bzr commit -m utf-8 &&\n+  echo test >> \"áéíóú\" &&\n+  bzr commit -m utf-8 &&\n+  bzr rm \"îø∫∆\" &&\n+  bzr mv \"áéíóú\" \"åß∂\" &&\n   bzr commit -m utf-8\n   ) &&\n \n@@ -186,7 +193,7 @@ test_expect_success 'fetch utf-8 filenames' '\n   git ls-files > ../actual\n   ) &&\n \n-  echo \"\\\"\\\\303\\\\241\\\\303\\\\251\\\\303\\\\255\\\\303\\\\263\\\\303\\\\272\\\"\" > expected &&\n+  echo \"\\\"\\\\303\\\\245\\\\303\\\\237\\\\342\\\\210\\\\202\\\"\" > expected &&\n   test_cmp expected actual\n '\n \n-- \n1.8.2\n"},{"id":"213579","messageId":"1365446199-11382-3-git-send-email-felipe.contreras@gmail.com","threadId":"33438","inReplyTo":"1365446199-11382-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 2/2] remote-bzr: improve tag handling","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-08T18:36:39Z","receivedAt":"2013-04-08T18:36:39Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"revision_history() is deprecated and doesn't do what we want (revno\ninstead of dotted_revno?).\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr | 25 ++++++++++++++++---------\n 1 file changed, 16 insertions(+), 9 deletions(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex 55ebf19..bd25e08 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -25,6 +25,7 @@ bzrlib.plugin.load_plugins()\n \n import bzrlib.generate_ids\n import bzrlib.transport\n+import bzrlib.errors\n \n import sys\n import os\n@@ -335,12 +336,9 @@ def export_branch(branch, name):\n \n def export_tag(repo, name):\n     global tags\n-    try:\n-        print \"reset refs/tags/%s\" % name\n-        print \"from :%u\" % rev_to_mark(tags[name])\n-        print\n-    except KeyError:\n-        warn(\"TODO: fetch tag '%s'\" % name)\n+    print \"reset refs/tags/%s\" % name\n+    print \"from :%u\" % rev_to_mark(tags[name])\n+    print\n \n def do_import(parser):\n     global dirname\n@@ -660,16 +658,25 @@ def do_capabilities(parser):\n \n     print\n \n+def ref_is_valid(name):\n+    return not True in [c in name for c in '~^: \\\\']\n+\n def do_list(parser):\n     global tags\n     print \"? refs/heads/%s\" % 'master'\n \n-    history = parser.repo.revision_history()\n-    for tag, revid in parser.repo.tags.get_tag_dict().items():\n-        if revid not in history:\n+    branch = parser.repo\n+    branch.lock_read()\n+    for tag, revid in branch.tags.get_tag_dict().items():\n+        try:\n+            branch.revision_id_to_dotted_revno(revid)\n+        except bzrlib.errors.NoSuchRevision:\n+            continue\n+        if not ref_is_valid(tag):\n             continue\n         print \"? refs/tags/%s\" % tag\n         tags[tag] = revid\n+    branch.unlock()\n     print \"@refs/heads/%s HEAD\" % 'master'\n     print\n \n-- \n1.8.2\n"}]}