From 89e717d9481c0c69292a39f85599f5df8277b004 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Sat, 18 Apr 2009 15:04:41 -0700 Subject: Improve checkout performance for the common unmodified case Most projects will have their branch heads matching in all branches, so switching between them should be just a matter of updating the work tree's HEAD symref. This can be done in pure Python, saving quite a bit of time over forking 'git checkout'. Signed-off-by: Shawn O. Pearce --- subcmds/checkout.py | 31 +++++++++++++++++++++---------- subcmds/start.py | 5 +++-- 2 files changed, 24 insertions(+), 12 deletions(-) (limited to 'subcmds') diff --git a/subcmds/checkout.py b/subcmds/checkout.py index 07644c95..4198acd1 100644 --- a/subcmds/checkout.py +++ b/subcmds/checkout.py @@ -15,6 +15,7 @@ import sys from command import Command +from progress import Progress class Checkout(Command): common = True @@ -35,13 +36,23 @@ The command is equivalent to: if not args: self.Usage() - retValue = 0; - - branch = args[0] - for project in self.GetProjects(args[1:]): - if not project.CheckoutBranch(branch): - retValue = 1; - print >>sys.stderr, "error: checking out branch '%s' in %s failed" % (branch, project.name) - - if (retValue != 0): - sys.exit(retValue); + nb = args[0] + err = [] + all = self.GetProjects(args[1:]) + + pm = Progress('Checkout %s' % nb, len(all)) + for project in all: + pm.update() + if not project.CheckoutBranch(nb): + err.append(project) + pm.end() + + if err: + if len(err) == len(all): + print >>sys.stderr, 'error: no project has branch %s' % nb + else: + for p in err: + print >>sys.stderr,\ + "error: %s/: cannot checkout %s" \ + % (p.relpath, nb) + sys.exit(1) diff --git a/subcmds/start.py b/subcmds/start.py index 49bb0e1a..8c74625f 100644 --- a/subcmds/start.py +++ b/subcmds/start.py @@ -49,7 +49,8 @@ revision specified in the manifest. pm.end() if err: - err.sort() for p in err: - print >>sys.stderr, "error: cannot start in %s" % p.relpath + print >>sys.stderr,\ + "error: %s/: cannot start %s" \ + % (p.relpath, nb) sys.exit(1) -- cgit v1.2.3-54-g00ecf