* git-1.8.2 support pulling from and pushing to a bzr branch
@ 2013-04-13 20:02 Jonas Bernoulli
2013-04-13 22:22 ` John Wiegley
0 siblings, 1 reply; 12+ messages in thread
From: Jonas Bernoulli @ 2013-04-13 20:02 UTC (permalink / raw)
To: Emacs Developement List
Hello List
git-1.8.2, released in March, supports pulling from and pushing to bzr
branches. This should make it possible to contribute to Emacs using git
without ever having to touch bzr directly. Also read-only users won't
be affected by the git mirrors lagging behind anymore - they can just
pull themselves.
I was able to clone the Emacs trunk in about an hour. Cloning the Cedet
trunk also succeeded. The fast-{import,export} scripts used previously
were no longer able to do so.
There are two small problems:
(1) Only bzr branches can be cloned, not complete repositories. So
multiple remotes have to be added to track a complete repository.
(2) When pushing to a bzr branch 'git push' always claims that a new
branch is being created.
And then there is a big problem:
The commit hashes are not identical to those from fast-{export,import}.
The problem is that bzr saves commit messages without a trailing newline
while git saves them with a trailing newline; and neither bzr-fast-export
nor git-fast-import take care of adding that missing newline.
While it is _possible_ in git to create a commit message without a
trailing newline using the plumbing command git-commit-tree, commits
created with git-commit do end with a newline.
A commit created in bzr using "the normal way" should result in a git
commit that also looks like it was created in git "the normal way".
Therefor when translating a commit from bzr to git the correct thing
to do is to append a newline.
I hope that despite this issue we can recreate the "official" git mirror
using the new transparent importer. This will inconvenient users in the
short term but I think it is better to get this over with now.
Best regards,
Jonas
Ps: A little demo:
$ bzr init /tmp/demo/bzr
Created a standalone tree (format: 2a)
$ cd /tmp/demo/bzr
$ bzr commit --unchanged -m "from bzr"
Committing to: /tmp/demo/bzr/
Committed revision 1.
$ git clone bzr::file:///tmp/demo/bzr /tmp/demo/git
Cloning into '/tmp/demo/git'...
$ cd /tmp/demo/git
$ git commit --allow-empty -m "from git"
[master af354dd] from git
$ git push origin master
All changes applied successfully.
To bzr::file:///tmp/demo/bzr
* [new branch] master -> master
$ cd -
/tmp/demo/bzr
$ bzr commit --unchanged -m "from bzr again"
Committing to: /tmp/demo/bzr/
Committed revision 3.
$ bzr log --line
3: Jonas Bernoulli 2013-04-13 from bzr again
2: Jonas Bernoulli 2013-04-13 from git
1: Jonas Bernoulli 2013-04-13 from bzr
$ cd -
/tmp/demo/git
$ git pull
From bzr::file:///tmp/demo/bzr
af354dd..c8a556c master -> origin/master
Updating af354dd..c8a556c
Fast-forward
$ git log --oneline
c8a556c from bzr again
af354dd from git
36d4ef4 from bzr
Pps: And now the difference between the new and old importer:
$ git init /tmp/demo/git_fast-import
Initialized empty Git repository in /tmp/demo/git_fast-import/.git/
$ cd /tmp/demo/git_fast-import
$ bzr fast-export ../bzr | git fast-import
21:56:37 Calculating the revisions to include ...
21:56:37 Starting export of 3 revisions ...
21:56:37 Exported 3 revisions in 0:00:00
git-fast-import statistics:
<snip>
$ git remote add git-remote-bzr ../git
$ git fetch git-remote-bzr
warning: no common commits
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 2), reused 2 (delta 0)
Unpacking objects: 100% (4/4), done.
From ../git
* [new branch] master -> git-remote-bzr/master
$ git cat-file -p HEAD~2
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
committer Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
from bzr%
$ git cat-file -p HEAD~1
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent 70f6af8a56ea7744de514d1e80b9a97ef75fc94b
author Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
committer Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
from git
$ git cat-file -p git-remote-bzr/master~2
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
committer Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
from bzr
$ git cat-file -p git-remote-bzr/master~1
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent 36d4ef499813359d492162ed6a53d28cdfb9aa35
author Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
committer Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
from git
$ git cat-file -p HEAD~2 > a
$ git cat-file -p git-remote-bzr/master~2 > b
$ diff -u a b
--- a 2013-04-13 21:56:37.866995633 +0200
+++ b 2013-04-13 21:57:32.690996992 +0200
@@ -2,4 +2,4 @@
author Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
committer Jonas Bernoulli <jonas@bernoul.li> 1365882997 +0200
-from bzr
\ No newline at end of file
+from bzr
1 $ git show HEAD~2 > a
$ git show git-remote-bzr/master~2 > b
$ diff -u a b
--- a 2013-04-13 21:57:32.698996994 +0200
+++ b 2013-04-13 21:57:32.706996994 +0200
@@ -1,4 +1,4 @@
-commit 70f6af8a56ea7744de514d1e80b9a97ef75fc94b
+commit 36d4ef499813359d492162ed6a53d28cdfb9aa35
Author: Jonas Bernoulli <jonas@bernoul.li>
Date: Sat Apr 13 21:56:37 2013 +0200
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-13 20:02 git-1.8.2 support pulling from and pushing to a bzr branch Jonas Bernoulli
@ 2013-04-13 22:22 ` John Wiegley
2013-04-15 15:42 ` Γιώργος Κεραμίδας
2013-04-16 17:18 ` Julien Danjou
0 siblings, 2 replies; 12+ messages in thread
From: John Wiegley @ 2013-04-13 22:22 UTC (permalink / raw)
To: emacs-devel
>>>>> Jonas Bernoulli <jonas@bernoul.li> writes:
> git-1.8.2, released in March, supports pulling from and pushing to bzr
> branches. This should make it possible to contribute to Emacs using git
> without ever having to touch bzr directly. Also read-only users won't
> be affected by the git mirrors lagging behind anymore - they can just
> pull themselves.
I found out about this support last week, so as you can imagine I immediately
jumped on it and cloned the Emacs BZR repository (which took a good long
while, but did succeed).
The resulting repository could not be updated (using git-fetch). At first it
kept timing out trying to communicate with the remote bazaar server. Then, it
started giving me an exception about "object 000000000 not existing", or
something like that. I was never able to get the repository to function again
after that and deleted it.
So, I think this is a great idea, but I'm not sure it's any more ready for
prime-time than the old git-bzr machinery was.
John
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-13 22:22 ` John Wiegley
@ 2013-04-15 15:42 ` Γιώργος Κεραμίδας
2013-04-15 19:06 ` David Engster
2013-04-16 17:18 ` Julien Danjou
1 sibling, 1 reply; 12+ messages in thread
From: Γιώργος Κεραμίδας @ 2013-04-15 15:42 UTC (permalink / raw)
To: emacs-devel
On Sat, 13 Apr 2013 17:22:32 -0500, "John Wiegley" <johnw@newartisans.com> wrote:
>>>>>> Jonas Bernoulli <jonas@bernoul.li> writes:
>> git-1.8.2, released in March, supports pulling from and pushing to bzr
>> branches. This should make it possible to contribute to Emacs using git
>> without ever having to touch bzr directly. Also read-only users won't
>> be affected by the git mirrors lagging behind anymore - they can just
>> pull themselves.
>
> I found out about this support last week, so as you can imagine I immediately
> jumped on it and cloned the Emacs BZR repository (which took a good long
> while, but did succeed).
>
> The resulting repository could not be updated (using git-fetch). At first it
> kept timing out trying to communicate with the remote bazaar server. Then, it
> started giving me an exception about "object 000000000 not existing", or
> something like that. I was never able to get the repository to function again
> after that and deleted it.
>
> So, I think this is a great idea, but I'm not sure it's any more ready for
> prime-time than the old git-bzr machinery was.
Ditto.
I did the same experiment when I found out about the new support too.
Unfortunately, I also hit the "object 000000000 not existing" problem,
and failed to re-fetch anything from the git clone. The existing git
mirror works fine for now I think.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-13 22:22 ` John Wiegley
2013-04-15 15:42 ` Γιώργος Κεραμίδας
@ 2013-04-16 17:18 ` Julien Danjou
2013-04-18 18:53 ` joakim
1 sibling, 1 reply; 12+ messages in thread
From: Julien Danjou @ 2013-04-16 17:18 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 746 bytes --]
On Sat, Apr 13 2013, John Wiegley wrote:
>
> The resulting repository could not be updated (using git-fetch). At first it
> kept timing out trying to communicate with the remote bazaar server. Then, it
> started giving me an exception about "object 000000000 not existing", or
> something like that. I was never able to get the repository to function again
> after that and deleted it.
I've already reported the issue to the upstream author, and he has been
very responsive and helpful (hint hint).
So actually this problem is already fixed in git's git version of
git-remote-bzr, so go ahead and try it, it works like a charm!
--
Julien Danjou
# Free Software hacker # freelance consultant
# http://julien.danjou.info
[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-16 17:18 ` Julien Danjou
@ 2013-04-18 18:53 ` joakim
2013-04-18 18:57 ` David Engster
0 siblings, 1 reply; 12+ messages in thread
From: joakim @ 2013-04-18 18:53 UTC (permalink / raw)
To: emacs-devel
Julien Danjou <julien@danjou.info> writes:
> On Sat, Apr 13 2013, John Wiegley wrote:
>
>>
>> The resulting repository could not be updated (using git-fetch). At first it
>> kept timing out trying to communicate with the remote bazaar server. Then, it
>> started giving me an exception about "object 000000000 not existing", or
>> something like that. I was never able to get the repository to function again
>> after that and deleted it.
>
> I've already reported the issue to the upstream author, and he has been
> very responsive and helpful (hint hint).
>
> So actually this problem is already fixed in git's git version of
> git-remote-bzr, so go ahead and try it, it works like a charm!
I also tried cloning trunk. It takes a long time. The resulting
directory is 12Gb. Subsequent pulls are fast. Adding a remote(the
xwidget branch) adds 1Gb.
I havent tested further.
--
Joakim Verona
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-18 18:53 ` joakim
@ 2013-04-18 18:57 ` David Engster
2013-04-19 5:55 ` joakim
0 siblings, 1 reply; 12+ messages in thread
From: David Engster @ 2013-04-18 18:57 UTC (permalink / raw)
To: joakim; +Cc: emacs-devel
'joakim' writes:
> I also tried cloning trunk. It takes a long time. The resulting
> directory is 12Gb.
You have to pack it afterwards using 'git gc --agressive'.
-David
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-18 18:57 ` David Engster
@ 2013-04-19 5:55 ` joakim
2013-04-20 19:01 ` joakim
0 siblings, 1 reply; 12+ messages in thread
From: joakim @ 2013-04-19 5:55 UTC (permalink / raw)
To: emacs-devel
David Engster <deng@randomsample.de> writes:
> 'joakim' writes:
>> I also tried cloning trunk. It takes a long time. The resulting
>> directory is 12Gb.
>
> You have to pack it afterwards using 'git gc --agressive'.
I tried this. I took some time. (long enough that I started doing
something else) Afterwards the repo was 1gb in total.
I'm just reporting so people can have some clue what to expect. I'm
impressed it works at all, especially as compared to the various
fastimport based approaches.
>
> -David
>
--
Joakim Verona
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-19 5:55 ` joakim
@ 2013-04-20 19:01 ` joakim
2013-04-30 10:24 ` joakim
0 siblings, 1 reply; 12+ messages in thread
From: joakim @ 2013-04-20 19:01 UTC (permalink / raw)
To: emacs-devel
joakim@verona.se writes:
> David Engster <deng@randomsample.de> writes:
>
>> 'joakim' writes:
>>> I also tried cloning trunk. It takes a long time. The resulting
>>> directory is 12Gb.
>>
>> You have to pack it afterwards using 'git gc --agressive'.
>
> I tried this. I took some time. (long enough that I started doing
> something else) Afterwards the repo was 1gb in total.
>
> I'm just reporting so people can have some clue what to expect. I'm
> impressed it works at all, especially as compared to the various
> fastimport based approaches.
I tried pushing a small patch to my xwidget branch using
git-remote-bzr. Pushing times out. I've contacted the author about the
issue.
>
>>
>> -David
>>
--
Joakim Verona
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-20 19:01 ` joakim
@ 2013-04-30 10:24 ` joakim
2013-05-01 6:16 ` Felipe Contreras
0 siblings, 1 reply; 12+ messages in thread
From: joakim @ 2013-04-30 10:24 UTC (permalink / raw)
To: emacs-devel; +Cc: felipe.contreras
joakim@verona.se writes:
> joakim@verona.se writes:
>
>> David Engster <deng@randomsample.de> writes:
>>
>>> 'joakim' writes:
>>>> I also tried cloning trunk. It takes a long time. The resulting
>>>> directory is 12Gb.
>>>
>>> You have to pack it afterwards using 'git gc --agressive'.
>>
>> I tried this. I took some time. (long enough that I started doing
>> something else) Afterwards the repo was 1gb in total.
>>
>> I'm just reporting so people can have some clue what to expect. I'm
>> impressed it works at all, especially as compared to the various
>> fastimport based approaches.
>
> I tried pushing a small patch to my xwidget branch using
> git-remote-bzr. Pushing times out. I've contacted the author about the
> issue.
I have now pushed a test commit to my xwidget branch using the latest
version of Felipes git-remote-bzr.
https://raw.github.com/felipec/git/fc/master/contrib/remote-helpers/git-remote-bzr
Felipe was very helpful during this test. I think more of us should try
it out now.
>
>>
>>>
>>> -David
>>>
--
Joakim Verona
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: git-1.8.2 support pulling from and pushing to a bzr branch
2013-04-30 10:24 ` joakim
@ 2013-05-01 6:16 ` Felipe Contreras
0 siblings, 0 replies; 12+ messages in thread
From: Felipe Contreras @ 2013-05-01 6:16 UTC (permalink / raw)
To: joakim; +Cc: Felipe Contreras Garza, emacs-devel
Hi,
On Tue, Apr 30, 2013 at 5:24 AM, <joakim@verona.se> wrote:
> I have now pushed a test commit to my xwidget branch using the latest
> version of Felipes git-remote-bzr.
>
> https://raw.github.com/felipec/git/fc/master/contrib/remote-helpers/git-remote-bzr
>
> Felipe was very helpful during this test. I think more of us should try
> it out now.
I just pushed a small fix so you can clone the whole repository.
These are my recommended instructions:
If you already have a bazaar branch, for example:
% bzr branch bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunk
Then you do:
% git init emacs-git
% cd emacs-git
% git remote add origin bzr::bzr://bzr.savannah.gnu.org/emacs
% bzr init-repo --no-trees .git/bzr
% bzr branch ../emacs-trunk .git/bzr/foobar # setup repo objects
% rm -rf .git/bzr/foobar # remove cruft
% git fetch origin
If something fails in the fetch phase, not everything is lost, you can
report the problem, and the information in the emacs-git repository
might be useful for debugging the issue. Then you can recover without
starting from scratch.
If you are feeling adventurous, you can of course try the whole thing in one go:
% git clone bzr::bzr://bzr.savannah.gnu.org/emacs emacs-git
You will be able to keep track of all the branches, as if they were
native to git:
% git branch --remote
% git checkout -b xwidget origin/xwidget
# hacking
% git push
The only limitation is that you cannot use the idiom 'git push origin
cur-name:new-name', so the local branch should have the same name as
the remote branch.
Once you are happy with the setup, you should probably compress the git repo:
% git gc --aggressive
Unfortunately, the emacs repo is too big, and too disperse (since it
came from a remote helper) for my poor machine to handle without
running out of memory, so, I have to do this:
% git config gc.aggressiveWindow 50
Moreover, if you are only interested in a couple of branches, you can
specify them with:
% git config remote-bzr.branches 'trunk, xwindow'
I also read a complaint about git always showing 'new branch', but
that's not a problem of this remote helper, it's in the git
infrastructure itself[1].
Good luck :)
[1] http://article.gmane.org/gmane.comp.version-control.git/220798
--
Felipe Contreras
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2013-05-01 6:16 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-13 20:02 git-1.8.2 support pulling from and pushing to a bzr branch Jonas Bernoulli
2013-04-13 22:22 ` John Wiegley
2013-04-15 15:42 ` Γιώργος Κεραμίδας
2013-04-15 19:06 ` David Engster
2013-04-16 16:30 ` Giorgos Keramidas
2013-04-16 17:18 ` Julien Danjou
2013-04-18 18:53 ` joakim
2013-04-18 18:57 ` David Engster
2013-04-19 5:55 ` joakim
2013-04-20 19:01 ` joakim
2013-04-30 10:24 ` joakim
2013-05-01 6:16 ` Felipe Contreras
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).