blob: cbbca10671fb52e4858f20997de354b5c941c7fd [file] [log] [blame]
Wink Saville02d79452009-04-10 13:01:24 -07001#
2# Copyright (C) 2009 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
Sarah Owenscecd1d82012-11-01 22:59:27 -070016from __future__ import print_function
Wink Saville02d79452009-04-10 13:01:24 -070017import sys
18from command import Command
Shawn O. Pearce89e717d2009-04-18 15:04:41 -070019from progress import Progress
Wink Saville02d79452009-04-10 13:01:24 -070020
21class Checkout(Command):
22 common = True
23 helpSummary = "Checkout a branch for development"
24 helpUsage = """
25%prog <branchname> [<project>...]
Shawn O. Pearced33f43a2009-04-13 12:11:31 -070026"""
27 helpDescription = """
28The '%prog' command checks out an existing branch that was previously
29created by 'repo start'.
Wink Saville02d79452009-04-10 13:01:24 -070030
Shawn O. Pearced33f43a2009-04-13 12:11:31 -070031The command is equivalent to:
Wink Saville02d79452009-04-10 13:01:24 -070032
Shawn O. Pearced33f43a2009-04-13 12:11:31 -070033 repo forall [<project>...] -c git checkout <branchname>
Wink Saville02d79452009-04-10 13:01:24 -070034"""
35
36 def Execute(self, opt, args):
37 if not args:
38 self.Usage()
39
Shawn O. Pearce89e717d2009-04-18 15:04:41 -070040 nb = args[0]
41 err = []
Doug Anderson3ba5f952011-04-07 12:51:04 -070042 success = []
David Pursehouse5c6eeac2012-10-11 16:44:48 +090043 all_projects = self.GetProjects(args[1:])
Wink Saville02d79452009-04-10 13:01:24 -070044
David Pursehouse5c6eeac2012-10-11 16:44:48 +090045 pm = Progress('Checkout %s' % nb, len(all_projects))
46 for project in all_projects:
Shawn O. Pearce89e717d2009-04-18 15:04:41 -070047 pm.update()
Doug Anderson3ba5f952011-04-07 12:51:04 -070048
49 status = project.CheckoutBranch(nb)
50 if status is not None:
51 if status:
52 success.append(project)
53 else:
54 err.append(project)
Shawn O. Pearce89e717d2009-04-18 15:04:41 -070055 pm.end()
Wink Saville02d79452009-04-10 13:01:24 -070056
Shawn O. Pearce89e717d2009-04-18 15:04:41 -070057 if err:
Doug Anderson3ba5f952011-04-07 12:51:04 -070058 for p in err:
Sarah Owenscecd1d82012-11-01 22:59:27 -070059 print("error: %s/: cannot checkout %s" % (p.relpath, nb),
60 file=sys.stderr)
Doug Anderson3ba5f952011-04-07 12:51:04 -070061 sys.exit(1)
62 elif not success:
Sarah Owenscecd1d82012-11-01 22:59:27 -070063 print('error: no project has branch %s' % nb, file=sys.stderr)
Shawn O. Pearce89e717d2009-04-18 15:04:41 -070064 sys.exit(1)