Re: [BUG] git submodule update is not fail safe
- From
Manlio Perillo <manlio.perillo@gmail.com>
- Date
- Jan 5, 2013, 14:49 UTC
- Message-ID
- <50E83D93.80600@gmail.com>
- In-Reply-To
- <50E83224.2070701@web.de>
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Il 05/01/2013 15:01, Jens Lehmann ha scritto:
Show 21 quoted lines
> [...] >>> $ git submodule update --init >>> fatal: Needed a single revision >>> Unable to find current revision in submodule path 'pixman' >>> >>> The problem is easy to solve: manually remove the pixman directory; >>> however IMHO git submodule update should not fail this way since it may >>> confuse the user. >> >> Sounds like a reasonable observation. Jens, Heiko, comments? > > The reason seems to be that clone leaves a partial initialized .git > directory in case of connection problems. The next time submodule > update runs it tries to revive the submodule from .git/modules/<name> > but fails as there are no objects in it. > > [...] > > If this isn't seen as a bug in clone, we could also remove the > .git/modules/<name> directory in module_clone() of git-submodule.s > h when the clone fails. Manilo,
Its Manlio, not Manilo ;-).
> does the following patch remove the > problems you are seeing (after removing .git/modules/pixman manually)? >
I don't think I can test it right now, since the problem can only be reproduced when git clone fails due to network problems.
Without the patch, if I remove the .git/modules/pixman directory, `git submodule update --init pixamp` fails:
Unable to find current revision in submodule path 'pixman' fatal: Not a git repository: pixman/../.git/modules/pixman
To reproduce the problem, however, it seems all you need to do is to send SIGINT signal during `git submodule update` :
$ git submodule update --init pixman Cloning into 'pixman'... remote: Counting objects: 10137, done. ^C
$ git submodule update pixman remote: Counting objects: 10137, done. ^C
$ git submodule update pixman fatal: Needed a single revision Unable to find current revision in submodule path 'pixman'
Note that I had to send SIGINT two times, in order to corrupt the module.
I suspect your patch does not fix this (since I don't get the "Clone failed" error message).
I also noted that If I send SIGINT before git starts counting remote objects, I get a different count number:
$ git submodule update pixman Cloning into 'pixman'... ^C
$ git submodule update pixman remote: Counting objects: 9757, done. ^C
$ git submodule update pixman fatal: Needed a single revision Unable to find current revision in submodule path 'pixman'
Note that git is reporting 9757 remote objects, instead of 10137.
P.S.: sorry for the mail I sent today. It reported the exact same problem I reported yesterday: this morning I was rather sure that I got a different error message from submodule update...
Regards Manlio -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlDoPZMACgkQscQJ24LbaUTfNQCdFvhSQwGlJZlvOr+TIHHyDFJY d8AAn0zuHKjBGIcqr8RH/rftHjomvPtM =48RN -----END PGP SIGNATURE-----