{"thread":{"id":"33399","subject":"[PATCH 1/7] remote-bzr: fix directory renaming","startedAt":"2013-04-06T03:49:16Z","lastAt":"2013-04-08T16:30:34Z","messageCount":9,"participants":["Felipe Contreras"],"isPatch":true,"patchVersion":1,"patchTotal":7},"messages":[{"id":"213341","messageId":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":null,"subject":"[PATCH 0/7] remote-bzr: generic updates","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:16Z","receivedAt":"2013-04-06T03:49:16Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Hi,\n\nHere are a couple fixes for remote-bzr, some of these can be really annoying to\ncertain users. I believe all of them should be safe.\n\nChristophe Simonis (2):\n  remote-bzr: fix directory renaming\n  remote-bzr: remove files before modifications\n\nDavid Engster (1):\n  remote-bzr: set author if available\n\nFelipe Contreras (3):\n  remote-bzr: only update workingtree on local repos\n  remote-bzr: avoid unreferred tags\n  remote-bzr: add utf-8 support for pushing\n\nTimotheus Pokorra (1):\n  remote-bzr: add utf-8 support for fetching\n\n contrib/remote-helpers/git-remote-bzr | 36 ++++++++++---\n contrib/remote-helpers/test-bzr.sh    | 95 +++++++++++++++++++++++++++++++++++\n 2 files changed, 123 insertions(+), 8 deletions(-)\n\n-- \n1.8.2\n"},{"id":"213301","messageId":"1365220163-13581-2-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 1/7] remote-bzr: fix directory renaming","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:17Z","receivedAt":"2013-04-06T03:49:17Z","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\nGit does not handle directories, renaming a directory is renaming every\nfiles in this directory.\n\n[fc: added tests]\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr |  8 +++++++-\n contrib/remote-helpers/test-bzr.sh    | 24 ++++++++++++++++++++++++\n 2 files changed, 31 insertions(+), 1 deletion(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex c5822e4..a7d041b 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -191,7 +191,13 @@ def get_filechanges(cur, prev):\n         modified[path] = fid\n     for oldpath, newpath, fid, kind, mod, _ in changes.renamed:\n         removed[oldpath] = None\n-        modified[newpath] = fid\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+        else:\n+            modified[newpath] = fid\n \n     return modified, removed\n \ndiff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh\nindex 8450432..d26e5c7 100755\n--- a/contrib/remote-helpers/test-bzr.sh\n+++ b/contrib/remote-helpers/test-bzr.sh\n@@ -126,4 +126,28 @@ test_expect_success 'special modes' '\n   test_cmp expected actual\n '\n \n+cat > expected <<EOF\n+100644 blob 54f9d6da5c91d556e6b54340b1327573073030af\tcontent\n+100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb\texecutable\n+120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea\tlink\n+040000 tree 35c0caa46693cef62247ac89a680f0c5ce32b37b\tmovedir-new\n+EOF\n+\n+test_expect_success 'moving directory' '\n+  (cd bzrrepo &&\n+  mkdir movedir &&\n+  echo one > movedir/one &&\n+  echo two > movedir/two &&\n+  bzr add movedir &&\n+  bzr commit -m movedir &&\n+  bzr mv movedir movedir-new &&\n+  bzr commit -m movedir-new) &&\n+\n+  (cd gitrepo &&\n+  git pull &&\n+  git ls-tree HEAD > ../actual) &&\n+\n+  test_cmp expected actual\n+'\n+\n test_done\n-- \n1.8.2\n"},{"id":"213351","messageId":"1365220163-13581-3-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 2/7] remote-bzr: remove files before modifications","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:18Z","receivedAt":"2013-04-06T03:49:18Z","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\nAllow re-add of a deleted file in the same commit.\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr | 4 ++--\n 1 file changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex a7d041b..f818e93 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -303,10 +303,10 @@ def export_branch(branch, name):\n             else:\n                 print \"merge :%s\" % m\n \n+        for f in removed:\n+            print \"D %s\" % (f,)\n         for f in modified_final:\n             print \"M %s :%u %s\" % f\n-        for f in removed:\n-            print \"D %s\" % (f)\n         print\n \n         count += 1\n-- \n1.8.2\n"},{"id":"213319","messageId":"1365220163-13581-4-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 3/7] remote-bzr: set author if available","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:19Z","receivedAt":"2013-04-06T03:49:19Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"From: David Engster <deng@randomsample.de>\n\n[fc: added tests]\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr |  7 ++++++-\n contrib/remote-helpers/test-bzr.sh    | 15 +++++++++++++++\n 2 files changed, 21 insertions(+), 1 deletion(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex f818e93..a99a924 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -266,7 +266,12 @@ def export_branch(branch, name):\n         tz = rev.timezone\n         committer = rev.committer.encode('utf-8')\n         committer = \"%s %u %s\" % (fixup_user(committer), time, gittz(tz))\n-        author = committer\n+        authors = rev.get_apparent_authors()\n+        if authors:\n+            author = authors[0].encode('utf-8')\n+            author = \"%s %u %s\" % (fixup_user(author), time, gittz(tz))\n+        else:\n+            author = committer\n         msg = rev.message.encode('utf-8')\n \n         msg += '\\n'\ndiff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh\nindex d26e5c7..68105fc 100755\n--- a/contrib/remote-helpers/test-bzr.sh\n+++ b/contrib/remote-helpers/test-bzr.sh\n@@ -150,4 +150,19 @@ test_expect_success 'moving directory' '\n   test_cmp expected actual\n '\n \n+test_expect_success 'different authors' '\n+  (cd bzrrepo &&\n+  echo john >> content &&\n+  bzr commit -m john \\\n+    --author \"Jane Rey <jrey@example.com>\" \\\n+    --author \"John Doe <jdoe@example.com>\") &&\n+\n+  (cd gitrepo &&\n+  git pull &&\n+  git show --format=\"%an <%ae>, %cn <%ce>\" --quiet > ../actual) &&\n+\n+  echo \"Jane Rey <jrey@example.com>, A U Thor <author@example.com>\" > expected &&\n+  test_cmp expected actual\n+'\n+\n test_done\n-- \n1.8.2\n"},{"id":"213352","messageId":"1365220163-13581-5-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 4/7] remote-bzr: only update workingtree on local repos","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:20Z","receivedAt":"2013-04-06T03:49:20Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Apparently, that's the only way it's possible.\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr | 3 +--\n 1 file changed, 1 insertion(+), 2 deletions(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex a99a924..9466cb9 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -630,10 +630,9 @@ def do_export(parser):\n                     peer.import_last_revision_info_and_tags(repo, revno, revid)\n                 else:\n                     peer.import_last_revision_info(repo.repository, revno, revid)\n-                wt = peer.bzrdir.open_workingtree()\n             else:\n                 wt = repo.bzrdir.open_workingtree()\n-            wt.update()\n+                wt.update()\n         print \"ok %s\" % ref\n     print\n \n-- \n1.8.2\n"},{"id":"213323","messageId":"1365220163-13581-6-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 5/7] remote-bzr: avoid unreferred tags","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:21Z","receivedAt":"2013-04-06T03:49:21Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"They have no content, there's nothing we can do with them.\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr | 4 ++++\n 1 file changed, 4 insertions(+)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex 9466cb9..0bcf8c5 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -654,7 +654,11 @@ def do_capabilities(parser):\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+            continue\n         print \"? refs/tags/%s\" % tag\n         tags[tag] = revid\n     print \"@refs/heads/%s HEAD\" % 'master'\n-- \n1.8.2\n"},{"id":"213349","messageId":"1365220163-13581-7-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 6/7] remote-bzr: add utf-8 support for fetching","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:22Z","receivedAt":"2013-04-06T03:49:22Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"From: Timotheus Pokorra <timotheus.pokorra@gmail.com>\n\n[fc: added tests]\n\nSigned-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr |  4 ++--\n contrib/remote-helpers/test-bzr.sh    | 25 +++++++++++++++++++++++++\n 2 files changed, 27 insertions(+), 2 deletions(-)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex 0bcf8c5..0bd0759 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -223,7 +223,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))\n+                final.append((mode, mark, path.encode('utf-8')))\n                 continue\n \n             d = tree.get_file_text(fid)\n@@ -240,7 +240,7 @@ def export_files(tree, files):\n         print \"data %d\" % len(d)\n         print d\n \n-        final.append((mode, mark, path))\n+        final.append((mode, mark, path.encode('utf-8')))\n \n     return final\n \ndiff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh\nindex 68105fc..e468079 100755\n--- a/contrib/remote-helpers/test-bzr.sh\n+++ b/contrib/remote-helpers/test-bzr.sh\n@@ -165,4 +165,29 @@ test_expect_success 'different authors' '\n   test_cmp expected actual\n '\n \n+test_expect_success 'fetch utf-8 filenames' '\n+  mkdir -p tmp && cd tmp &&\n+  test_when_finished \"cd .. && rm -rf tmp && LC_ALL=C\" &&\n+\n+  export LC_ALL=en_US.UTF-8\n+\n+  (\n+  bzr init bzrrepo &&\n+  cd bzrrepo &&\n+\n+  echo test >> \"áéíóú\" &&\n+  bzr add \"áéíóú\" &&\n+  bzr commit -m utf-8\n+  ) &&\n+\n+  (\n+  git clone \"bzr::$PWD/bzrrepo\" gitrepo &&\n+  cd gitrepo &&\n+  git ls-files > ../actual\n+  ) &&\n+\n+  echo \"\\\"\\\\303\\\\241\\\\303\\\\251\\\\303\\\\255\\\\303\\\\263\\\\303\\\\272\\\"\" > expected &&\n+  test_cmp expected actual\n+'\n+\n test_done\n-- \n1.8.2\n"},{"id":"213353","messageId":"1365220163-13581-8-git-send-email-felipe.contreras@gmail.com","threadId":"33399","inReplyTo":"1365220163-13581-1-git-send-email-felipe.contreras@gmail.com","subject":"[PATCH 7/7] remote-bzr: add utf-8 support for pushing","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-06T03:49:23Z","receivedAt":"2013-04-06T03:49:23Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>\n---\n contrib/remote-helpers/git-remote-bzr |  6 ++++++\n contrib/remote-helpers/test-bzr.sh    | 31 +++++++++++++++++++++++++++++++\n 2 files changed, 37 insertions(+)\n\ndiff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr\nindex 0bd0759..fad4a48 100755\n--- a/contrib/remote-helpers/git-remote-bzr\n+++ b/contrib/remote-helpers/git-remote-bzr\n@@ -512,6 +512,11 @@ class CustomTree():\n     def get_symlink_target(self, file_id):\n         return self.updates[file_id]['data']\n \n+def c_style_unescape(string):\n+    if string[0] == string[-1] == '\"':\n+        return string.decode('string-escape')[1:-1]\n+    return string\n+\n def parse_commit(parser):\n     global marks, blob_marks, bmarks, parsed_refs\n     global mode\n@@ -551,6 +556,7 @@ def parse_commit(parser):\n             f = { 'deleted' : True }\n         else:\n             die('Unknown file command: %s' % line)\n+        path = c_style_unescape(path).decode('utf-8')\n         files[path] = f\n \n     repo = parser.repo\ndiff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh\nindex e468079..f4c7768 100755\n--- a/contrib/remote-helpers/test-bzr.sh\n+++ b/contrib/remote-helpers/test-bzr.sh\n@@ -190,4 +190,35 @@ test_expect_success 'fetch utf-8 filenames' '\n   test_cmp expected actual\n '\n \n+test_expect_success 'push utf-8 filenames' '\n+  mkdir -p tmp && cd tmp &&\n+  test_when_finished \"cd .. && rm -rf tmp && LC_ALL=C\" &&\n+\n+  export LC_ALL=en_US.UTF-8\n+\n+  (\n+  bzr init bzrrepo &&\n+  cd bzrrepo &&\n+\n+  echo one >> content &&\n+  bzr add content &&\n+  bzr commit -m one\n+  ) &&\n+\n+  (\n+  git clone \"bzr::$PWD/bzrrepo\" gitrepo &&\n+  cd gitrepo &&\n+\n+  echo test >> \"áéíóú\" &&\n+  git add \"áéíóú\" &&\n+  git commit -m utf-8 &&\n+\n+  git push\n+  ) &&\n+\n+  (cd bzrrepo && bzr ls > ../actual) &&\n+  echo -e \"content\\náéíóú\" > expected &&\n+  test_cmp expected actual\n+'\n+\n test_done\n-- \n1.8.2\n"},{"id":"213529","messageId":"CAMP44s33_SrAN=RyT_8N=RTAGFGwO3FcxQPU=0aRSLCy9suVRg@mail.gmail.com","threadId":"33399","inReplyTo":"CABLWAfRfpCwxc_V1gD5QsZGgaQ7gtEfyad8dKSCNM-pA7TX6TQ@mail.gmail.com","subject":"Re: [PATCH 5/7] remote-bzr: avoid unreferred tags","fromName":"Felipe Contreras","fromEmail":"felipe.contreras@gmail.com","sentAt":"2013-04-08T16:30:34Z","receivedAt":"2013-04-08T16:30:34Z","isPatch":true,"sender":{"key":"felipe.contreras@gmail.com","avatar":"https://avatars.githubusercontent.com/u/8358?v=4"},"body":"Hi,\n\nOn Mon, Apr 8, 2013 at 5:33 AM, Sandor Bodo-Merle <sbodomerle@gmail.com> wrote:\n> this have a regression when i try to clone the current bugzilla repository\n> (previous version was ok):\n>\n> git clone bzr::http://bzr.mozilla.org/bugzilla/trunk bugzilla\n> Cloning into 'bugzilla'...\n> Traceback (most recent call last):sions:Finishing stream:Done\n> 88662/886628662\n>   File \"/home/bms/bin/git-remote-bzr\", line 745, in <module>\n>     sys.exit(main(sys.argv))\n>   File \"/home/bms/bin/git-remote-bzr\", line 734, in main\n>     do_list(parser)\n>   File \"/home/bms/bin/git-remote-bzr\", line 664, in do_list\n>     history = parser.repo.revision_history()\n> AttributeError: 'BzrBranch7' object has no attribute 'revision_history'\n\nI just pushed this fix:\nhttps://github.com/felipec/git/commit/8161a8479dfb59dfac016e3cfa292e003e7585ce\n\nI think it would do the trick.\n\n--\nFelipe Contreras\n"}]}