From 2630dd9787c1b75b70a980175ffa41b63f59e3b8 Mon Sep 17 00:00:00 2001 From: Doug Anderson Date: Thu, 7 Apr 2011 13:36:30 -0700 Subject: [PATCH] Fixed problems w/ 2nd repo init if first repo init had bad URL. This is the simplest fix: if we had problems syncing the manifest.git directory and we were the ones that created it, we should delete it. This doesn't try to do anything complex like try to recover from a .repo directory that got broken in some other way. This is filed as: TEST=manual Init once with a bad URL: $ repo init -u http://foobar.example.com Getting manifest ... from http://foobar.example.com Connection closed by 172.22.121.77 error: Couldn't resolve host 'foobar.example.com' while accessing http://foobar.example.com/info/refs fatal: HTTP request failed fatal: cannot obtain manifest http://foobar.example.com Init again: identical to the first. Good: $ repo init -u http://foobar.example.com Getting manifest ... from http://foobar.example.com Connection closed by 172.22.121.77 error: Couldn't resolve host 'foobar.example.com' while accessing http://foobar.example.com/info/refs fatal: HTTP request failed fatal: cannot obtain manifest http://foobar.example.com Init with correct URL: $ repo init -u http://git.chromium.org/git/manifest -m minilayout.xml Getting manifest ... from http://git.chromium.org/git/manifest [ ... cut ... ] repo initialized in /.../repoiniterr Try a bad URL after a good one; it doesn't get saved (good): $ repo init -u http://foobar.example.com Connection closed by 172.22.121.77 error: Couldn't resolve host 'foobar.example.com' while accessing http://foobar.example.com/info/refs fatal: HTTP request failed fatal: cannot obtain manifest http://foobar.example.com Just to confirm, I can still do a good one after a bad... $ repo init -u http://git.chromium.org/git/manifest -m minilayout.xml Your Name [George Washington]: Your Email [george@washington.example.com]: Your identity is: George Washington is this correct [y/n]? y repo initialized in /.../repoiniterr Change-Id: I1692821a330d97b1d218b2e191a93245b33f2362 --- subcmds/init.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/subcmds/init.py b/subcmds/init.py index 17edfa05..37910843 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -14,6 +14,7 @@ # limitations under the License. import os +import shutil import sys from color import Coloring @@ -137,6 +138,11 @@ to update the working directory files. if not m.Sync_NetworkHalf(): r = m.GetRemote(m.remote.name) print >>sys.stderr, 'fatal: cannot obtain manifest %s' % r.url + + # Better delete the manifest git dir if we created it; otherwise next + # time (when user fixes problems) we won't go through the "is_new" logic. + if is_new: + shutil.rmtree(m.gitdir) sys.exit(1) syncbuf = SyncBuffer(m.config)