From 335f5ef4ad25a85c69fe6d8c848c5d1d447e22c8 Mon Sep 17 00:00:00 2001 From: Julien Campergue Date: Wed, 16 Oct 2013 11:02:35 +0200 Subject: Add --archive option to init to sync using git archive This significantly reduces sync time and used brandwidth as only a tar of each project's revision is checked out, but git is not accessible from projects anymore. This is relevant when git is not needed in projects but sync speed/brandwidth may be important like on CI servers when building several versions from scratch regularly for example. Archive is not supported over http/https. Change-Id: I48c3c7de2cd5a1faec33e295fcdafbc7807d0e4d Signed-off-by: Julien Campergue --- subcmds/init.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'subcmds/init.py') diff --git a/subcmds/init.py b/subcmds/init.py index a44fb7a9..b1fcb69c 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -99,6 +99,10 @@ to update the working directory files. g.add_option('--depth', type='int', default=None, dest='depth', help='create a shallow clone with given depth; see git clone') + g.add_option('--archive', + dest='archive', action='store_true', + help='checkout an archive instead of a git repository for ' + 'each project. See git archive.') g.add_option('-g', '--groups', dest='groups', default='default', help='restrict manifest projects to ones with specified ' @@ -198,6 +202,16 @@ to update the working directory files. if opt.reference: m.config.SetString('repo.reference', opt.reference) + if opt.archive: + if is_new: + m.config.SetString('repo.archive', 'true') + else: + print('fatal: --archive is only supported when initializing a new ' + 'workspace.', file=sys.stderr) + print('Either delete the .repo folder in this workspace, or initialize ' + 'in another location.', file=sys.stderr) + sys.exit(1) + if opt.mirror: if is_new: m.config.SetString('repo.mirror', 'true') @@ -366,6 +380,13 @@ to update the working directory files. if opt.reference: opt.reference = os.path.expanduser(opt.reference) + # Check this here, else manifest will be tagged "not new" and init won't be + # possible anymore without removing the .repo/manifests directory. + if opt.archive and opt.mirror: + print('fatal: --mirror and --archive cannot be used together.', + file=sys.stderr) + sys.exit(1) + self._SyncManifest(opt) self._LinkManifest(opt.manifest_name) -- cgit v1.2.3-54-g00ecf