summaryrefslogtreecommitdiffstats
path: root/repo
diff options
context:
space:
mode:
Diffstat (limited to 'repo')
-rwxr-xr-xrepo88
1 files changed, 11 insertions, 77 deletions
diff --git a/repo b/repo
index 6cda1366..85825e80 100755
--- a/repo
+++ b/repo
@@ -215,8 +215,6 @@ repodir = ".repo" # name of repo's private directory
215S_repo = "repo" # special repo repository 215S_repo = "repo" # special repo repository
216S_manifests = "manifests" # special manifest repository 216S_manifests = "manifests" # special manifest repository
217REPO_MAIN = S_repo + "/main.py" # main script 217REPO_MAIN = S_repo + "/main.py" # main script
218GITC_CONFIG_FILE = "/gitc/.config"
219GITC_FS_ROOT_DIR = "/gitc/manifest-rw/"
220 218
221 219
222import collections 220import collections
@@ -235,12 +233,9 @@ home_dot_repo = os.path.join(repo_config_dir, ".repoconfig")
235gpg_dir = os.path.join(home_dot_repo, "gnupg") 233gpg_dir = os.path.join(home_dot_repo, "gnupg")
236 234
237 235
238def GetParser(gitc_init=False): 236def GetParser():
239 """Setup the CLI parser.""" 237 """Setup the CLI parser."""
240 if gitc_init: 238 usage = "repo init [options] [-u] url"
241 sys.exit("repo: fatal: GITC not supported.")
242 else:
243 usage = "repo init [options] [-u] url"
244 239
245 parser = optparse.OptionParser(usage=usage) 240 parser = optparse.OptionParser(usage=usage)
246 InitParser(parser) 241 InitParser(parser)
@@ -557,49 +552,6 @@ def run_command(cmd, **kwargs):
557 return ret 552 return ret
558 553
559 554
560_gitc_manifest_dir = None
561
562
563def get_gitc_manifest_dir():
564 global _gitc_manifest_dir
565 if _gitc_manifest_dir is None:
566 _gitc_manifest_dir = ""
567 try:
568 with open(GITC_CONFIG_FILE) as gitc_config:
569 for line in gitc_config:
570 match = re.match("gitc_dir=(?P<gitc_manifest_dir>.*)", line)
571 if match:
572 _gitc_manifest_dir = match.group("gitc_manifest_dir")
573 except OSError:
574 pass
575 return _gitc_manifest_dir
576
577
578def gitc_parse_clientdir(gitc_fs_path):
579 """Parse a path in the GITC FS and return its client name.
580
581 Args:
582 gitc_fs_path: A subdirectory path within the GITC_FS_ROOT_DIR.
583
584 Returns:
585 The GITC client name.
586 """
587 if gitc_fs_path == GITC_FS_ROOT_DIR:
588 return None
589 if not gitc_fs_path.startswith(GITC_FS_ROOT_DIR):
590 manifest_dir = get_gitc_manifest_dir()
591 if manifest_dir == "":
592 return None
593 if manifest_dir[-1] != "/":
594 manifest_dir += "/"
595 if gitc_fs_path == manifest_dir:
596 return None
597 if not gitc_fs_path.startswith(manifest_dir):
598 return None
599 return gitc_fs_path.split(manifest_dir)[1].split("/")[0]
600 return gitc_fs_path.split(GITC_FS_ROOT_DIR)[1].split("/")[0]
601
602
603class CloneFailure(Exception): 555class CloneFailure(Exception):
604 556
605 """Indicate the remote clone of repo itself failed.""" 557 """Indicate the remote clone of repo itself failed."""
@@ -638,9 +590,9 @@ def check_repo_rev(dst, rev, repo_verify=True, quiet=False):
638 return (remote_ref, rev) 590 return (remote_ref, rev)
639 591
640 592
641def _Init(args, gitc_init=False): 593def _Init(args):
642 """Installs repo by cloning it over the network.""" 594 """Installs repo by cloning it over the network."""
643 parser = GetParser(gitc_init=gitc_init) 595 parser = GetParser()
644 opt, args = parser.parse_args(args) 596 opt, args = parser.parse_args(args)
645 if args: 597 if args:
646 if not opt.manifest_url: 598 if not opt.manifest_url:
@@ -1164,7 +1116,7 @@ class _Options:
1164def _ExpandAlias(name): 1116def _ExpandAlias(name):
1165 """Look up user registered aliases.""" 1117 """Look up user registered aliases."""
1166 # We don't resolve aliases for existing subcommands. This matches git. 1118 # We don't resolve aliases for existing subcommands. This matches git.
1167 if name in {"gitc-init", "help", "init"}: 1119 if name in {"help", "init"}:
1168 return name, [] 1120 return name, []
1169 1121
1170 alias = _GetRepoConfig(f"alias.{name}") 1122 alias = _GetRepoConfig(f"alias.{name}")
@@ -1292,10 +1244,6 @@ class Requirements:
1292 1244
1293 1245
1294def _Usage(): 1246def _Usage():
1295 gitc_usage = ""
1296 if get_gitc_manifest_dir():
1297 gitc_usage = " gitc-init Initialize a GITC Client.\n"
1298
1299 print( 1247 print(
1300 """usage: repo COMMAND [ARGS] 1248 """usage: repo COMMAND [ARGS]
1301 1249
@@ -1304,9 +1252,7 @@ repo is not yet installed. Use "repo init" to install it here.
1304The most commonly used repo commands are: 1252The most commonly used repo commands are:
1305 1253
1306 init Install repo in the current working directory 1254 init Install repo in the current working directory
1307""" 1255 help Display detailed help on a command
1308 + gitc_usage
1309 + """ help Display detailed help on a command
1310 1256
1311For access to the full online help, install repo ("repo init"). 1257For access to the full online help, install repo ("repo init").
1312""" 1258"""
@@ -1317,8 +1263,8 @@ For access to the full online help, install repo ("repo init").
1317 1263
1318def _Help(args): 1264def _Help(args):
1319 if args: 1265 if args:
1320 if args[0] in {"init", "gitc-init"}: 1266 if args[0] in {"init"}:
1321 parser = GetParser(gitc_init=args[0] == "gitc-init") 1267 parser = GetParser()
1322 parser.print_help() 1268 parser.print_help()
1323 sys.exit(0) 1269 sys.exit(0)
1324 else: 1270 else:
@@ -1407,23 +1353,11 @@ def main(orig_args):
1407 # We run this early as we run some git commands ourselves. 1353 # We run this early as we run some git commands ourselves.
1408 SetGitTrace2ParentSid() 1354 SetGitTrace2ParentSid()
1409 1355
1410 repo_main, rel_repo_dir = None, None 1356 repo_main, rel_repo_dir = _FindRepo()
1411 # Don't use the local repo copy, make sure to switch to the gitc client first.
1412 if cmd != "gitc-init":
1413 repo_main, rel_repo_dir = _FindRepo()
1414 1357
1415 wrapper_path = os.path.abspath(__file__) 1358 wrapper_path = os.path.abspath(__file__)
1416 my_main, my_git = _RunSelf(wrapper_path) 1359 my_main, my_git = _RunSelf(wrapper_path)
1417 1360
1418 cwd = os.getcwd()
1419 if get_gitc_manifest_dir() and cwd.startswith(get_gitc_manifest_dir()):
1420 print(
1421 "error: repo cannot be used in the GITC local manifest directory."
1422 "\nIf you want to work on this GITC client please rerun this "
1423 "command from the corresponding client under /gitc/",
1424 file=sys.stderr,
1425 )
1426 sys.exit(1)
1427 if not repo_main: 1361 if not repo_main:
1428 # Only expand aliases here since we'll be parsing the CLI ourselves. 1362 # Only expand aliases here since we'll be parsing the CLI ourselves.
1429 # If we had repo_main, alias expansion would happen in main.py. 1363 # If we had repo_main, alias expansion would happen in main.py.
@@ -1438,11 +1372,11 @@ def main(orig_args):
1438 _Version() 1372 _Version()
1439 if not cmd: 1373 if not cmd:
1440 _NotInstalled() 1374 _NotInstalled()
1441 if cmd == "init" or cmd == "gitc-init": 1375 if cmd == "init":
1442 if my_git: 1376 if my_git:
1443 _SetDefaultsTo(my_git) 1377 _SetDefaultsTo(my_git)
1444 try: 1378 try:
1445 _Init(args, gitc_init=(cmd == "gitc-init")) 1379 _Init(args)
1446 except CloneFailure: 1380 except CloneFailure:
1447 path = os.path.join(repodir, S_repo) 1381 path = os.path.join(repodir, S_repo)
1448 print( 1382 print(