diff options
-rw-r--r-- | git_config.py | 8 | ||||
-rwxr-xr-x | main.py | 25 | ||||
-rw-r--r-- | project.py | 11 | ||||
-rw-r--r-- | subcmds/sync.py | 10 |
4 files changed, 32 insertions, 22 deletions
diff --git a/git_config.py b/git_config.py index 1d8d1363..d7fef8ca 100644 --- a/git_config.py +++ b/git_config.py | |||
@@ -520,6 +520,14 @@ class Remote(object): | |||
520 | return self.url.replace(longest, longestUrl, 1) | 520 | return self.url.replace(longest, longestUrl, 1) |
521 | 521 | ||
522 | def PreConnectFetch(self): | 522 | def PreConnectFetch(self): |
523 | """Run any setup for this remote before we connect to it. | ||
524 | |||
525 | In practice, if the remote is using SSH, we'll attempt to create a new | ||
526 | SSH master session to it for reuse across projects. | ||
527 | |||
528 | Returns: | ||
529 | Whether the preconnect phase for this remote was successful. | ||
530 | """ | ||
523 | connectionUrl = self._InsteadOf() | 531 | connectionUrl = self._InsteadOf() |
524 | return ssh.preconnect(connectionUrl) | 532 | return ssh.preconnect(connectionUrl) |
525 | 533 | ||
@@ -56,7 +56,6 @@ from error import RepoChangedException | |||
56 | import gitc_utils | 56 | import gitc_utils |
57 | from manifest_xml import GitcClient, RepoClient | 57 | from manifest_xml import GitcClient, RepoClient |
58 | from pager import RunPager, TerminatePager | 58 | from pager import RunPager, TerminatePager |
59 | import ssh | ||
60 | from wrapper import WrapperPath, Wrapper | 59 | from wrapper import WrapperPath, Wrapper |
61 | 60 | ||
62 | from subcmds import all_commands | 61 | from subcmds import all_commands |
@@ -592,20 +591,16 @@ def _Main(argv): | |||
592 | 591 | ||
593 | repo = _Repo(opt.repodir) | 592 | repo = _Repo(opt.repodir) |
594 | try: | 593 | try: |
595 | try: | 594 | init_http() |
596 | ssh.init() | 595 | name, gopts, argv = repo._ParseArgs(argv) |
597 | init_http() | 596 | run = lambda: repo._Run(name, gopts, argv) or 0 |
598 | name, gopts, argv = repo._ParseArgs(argv) | 597 | if gopts.trace_python: |
599 | run = lambda: repo._Run(name, gopts, argv) or 0 | 598 | import trace |
600 | if gopts.trace_python: | 599 | tracer = trace.Trace(count=False, trace=True, timing=True, |
601 | import trace | 600 | ignoredirs=set(sys.path[1:])) |
602 | tracer = trace.Trace(count=False, trace=True, timing=True, | 601 | result = tracer.runfunc(run) |
603 | ignoredirs=set(sys.path[1:])) | 602 | else: |
604 | result = tracer.runfunc(run) | 603 | result = run() |
605 | else: | ||
606 | result = run() | ||
607 | finally: | ||
608 | ssh.close() | ||
609 | except KeyboardInterrupt: | 604 | except KeyboardInterrupt: |
610 | print('aborted by user', file=sys.stderr) | 605 | print('aborted by user', file=sys.stderr) |
611 | result = 1 | 606 | result = 1 |
@@ -1050,6 +1050,7 @@ class Project(object): | |||
1050 | retry_fetches=0, | 1050 | retry_fetches=0, |
1051 | prune=False, | 1051 | prune=False, |
1052 | submodules=False, | 1052 | submodules=False, |
1053 | ssh_proxy=None, | ||
1053 | clone_filter=None, | 1054 | clone_filter=None, |
1054 | partial_clone_exclude=set()): | 1055 | partial_clone_exclude=set()): |
1055 | """Perform only the network IO portion of the sync process. | 1056 | """Perform only the network IO portion of the sync process. |
@@ -1143,6 +1144,7 @@ class Project(object): | |||
1143 | alt_dir=alt_dir, current_branch_only=current_branch_only, | 1144 | alt_dir=alt_dir, current_branch_only=current_branch_only, |
1144 | tags=tags, prune=prune, depth=depth, | 1145 | tags=tags, prune=prune, depth=depth, |
1145 | submodules=submodules, force_sync=force_sync, | 1146 | submodules=submodules, force_sync=force_sync, |
1147 | ssh_proxy=ssh_proxy, | ||
1146 | clone_filter=clone_filter, retry_fetches=retry_fetches): | 1148 | clone_filter=clone_filter, retry_fetches=retry_fetches): |
1147 | return False | 1149 | return False |
1148 | 1150 | ||
@@ -1994,6 +1996,7 @@ class Project(object): | |||
1994 | prune=False, | 1996 | prune=False, |
1995 | depth=None, | 1997 | depth=None, |
1996 | submodules=False, | 1998 | submodules=False, |
1999 | ssh_proxy=None, | ||
1997 | force_sync=False, | 2000 | force_sync=False, |
1998 | clone_filter=None, | 2001 | clone_filter=None, |
1999 | retry_fetches=2, | 2002 | retry_fetches=2, |
@@ -2041,16 +2044,14 @@ class Project(object): | |||
2041 | if not name: | 2044 | if not name: |
2042 | name = self.remote.name | 2045 | name = self.remote.name |
2043 | 2046 | ||
2044 | ssh_proxy = False | ||
2045 | remote = self.GetRemote(name) | 2047 | remote = self.GetRemote(name) |
2046 | if remote.PreConnectFetch(): | 2048 | if not remote.PreConnectFetch(): |
2047 | ssh_proxy = True | 2049 | ssh_proxy = False |
2048 | 2050 | ||
2049 | if initial: | 2051 | if initial: |
2050 | if alt_dir and 'objects' == os.path.basename(alt_dir): | 2052 | if alt_dir and 'objects' == os.path.basename(alt_dir): |
2051 | ref_dir = os.path.dirname(alt_dir) | 2053 | ref_dir = os.path.dirname(alt_dir) |
2052 | packed_refs = os.path.join(self.gitdir, 'packed-refs') | 2054 | packed_refs = os.path.join(self.gitdir, 'packed-refs') |
2053 | remote = self.GetRemote(name) | ||
2054 | 2055 | ||
2055 | all_refs = self.bare_ref.all | 2056 | all_refs = self.bare_ref.all |
2056 | ids = set(all_refs.values()) | 2057 | ids = set(all_refs.values()) |
@@ -2238,7 +2239,7 @@ class Project(object): | |||
2238 | name=name, quiet=quiet, verbose=verbose, output_redir=output_redir, | 2239 | name=name, quiet=quiet, verbose=verbose, output_redir=output_redir, |
2239 | current_branch_only=current_branch_only and depth, | 2240 | current_branch_only=current_branch_only and depth, |
2240 | initial=False, alt_dir=alt_dir, | 2241 | initial=False, alt_dir=alt_dir, |
2241 | depth=None, clone_filter=clone_filter) | 2242 | depth=None, ssh_proxy=ssh_proxy, clone_filter=clone_filter) |
2242 | 2243 | ||
2243 | return ok | 2244 | return ok |
2244 | 2245 | ||
diff --git a/subcmds/sync.py b/subcmds/sync.py index 6f5b5644..28568062 100644 --- a/subcmds/sync.py +++ b/subcmds/sync.py | |||
@@ -57,6 +57,7 @@ from error import RepoChangedException, GitError, ManifestParseError | |||
57 | import platform_utils | 57 | import platform_utils |
58 | from project import SyncBuffer | 58 | from project import SyncBuffer |
59 | from progress import Progress | 59 | from progress import Progress |
60 | import ssh | ||
60 | from wrapper import Wrapper | 61 | from wrapper import Wrapper |
61 | from manifest_xml import GitcManifest | 62 | from manifest_xml import GitcManifest |
62 | 63 | ||
@@ -357,6 +358,7 @@ later is required to fix a server side protocol bug. | |||
357 | optimized_fetch=opt.optimized_fetch, | 358 | optimized_fetch=opt.optimized_fetch, |
358 | retry_fetches=opt.retry_fetches, | 359 | retry_fetches=opt.retry_fetches, |
359 | prune=opt.prune, | 360 | prune=opt.prune, |
361 | ssh_proxy=True, | ||
360 | clone_filter=self.manifest.CloneFilter, | 362 | clone_filter=self.manifest.CloneFilter, |
361 | partial_clone_exclude=self.manifest.PartialCloneExclude) | 363 | partial_clone_exclude=self.manifest.PartialCloneExclude) |
362 | 364 | ||
@@ -983,8 +985,12 @@ later is required to fix a server side protocol bug. | |||
983 | 985 | ||
984 | self._fetch_times = _FetchTimes(self.manifest) | 986 | self._fetch_times = _FetchTimes(self.manifest) |
985 | if not opt.local_only: | 987 | if not opt.local_only: |
986 | self._FetchMain(opt, args, all_projects, err_event, manifest_name, | 988 | try: |
987 | load_local_manifests) | 989 | ssh.init() |
990 | self._FetchMain(opt, args, all_projects, err_event, manifest_name, | ||
991 | load_local_manifests) | ||
992 | finally: | ||
993 | ssh.close() | ||
988 | 994 | ||
989 | # If we saw an error, exit with code 1 so that other scripts can check. | 995 | # If we saw an error, exit with code 1 so that other scripts can check. |
990 | if err_event.is_set(): | 996 | if err_event.is_set(): |