summaryrefslogtreecommitdiffstats
path: root/subcmds
diff options
context:
space:
mode:
Diffstat (limited to 'subcmds')
-rw-r--r--subcmds/gitc_delete.py52
-rw-r--r--subcmds/gitc_init.py87
-rw-r--r--subcmds/help.py22
-rw-r--r--subcmds/init.py4
-rw-r--r--subcmds/start.py44
-rw-r--r--subcmds/sync.py46
6 files changed, 4 insertions, 251 deletions
diff --git a/subcmds/gitc_delete.py b/subcmds/gitc_delete.py
deleted file mode 100644
index ae9d4d1f..00000000
--- a/subcmds/gitc_delete.py
+++ /dev/null
@@ -1,52 +0,0 @@
1# Copyright (C) 2015 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import sys
16
17from command import Command, GitcClientCommand
18import platform_utils
19
20
21class GitcDelete(Command, GitcClientCommand):
22 COMMON = True
23 visible_everywhere = False
24 helpSummary = "Delete a GITC Client."
25 helpUsage = """
26%prog
27"""
28 helpDescription = """
29This subcommand deletes the current GITC client, deleting the GITC manifest
30and all locally downloaded sources.
31"""
32
33 def _Options(self, p):
34 p.add_option(
35 "-f",
36 "--force",
37 dest="force",
38 action="store_true",
39 help="force the deletion (no prompt)",
40 )
41
42 def Execute(self, opt, args):
43 if not opt.force:
44 prompt = (
45 "This will delete GITC client: %s\nAre you sure? (yes/no) "
46 % self.gitc_manifest.gitc_client_name
47 )
48 response = input(prompt).lower()
49 if not response == "yes":
50 print('Response was not "yes"\n Exiting...')
51 sys.exit(1)
52 platform_utils.rmtree(self.gitc_manifest.gitc_client_dir)
diff --git a/subcmds/gitc_init.py b/subcmds/gitc_init.py
deleted file mode 100644
index 54791d58..00000000
--- a/subcmds/gitc_init.py
+++ /dev/null
@@ -1,87 +0,0 @@
1# Copyright (C) 2015 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import os
16import sys
17
18import gitc_utils
19from command import GitcAvailableCommand
20from manifest_xml import GitcManifest
21from subcmds import init
22import wrapper
23
24
25class GitcInit(init.Init, GitcAvailableCommand):
26 COMMON = True
27 MULTI_MANIFEST_SUPPORT = False
28 helpSummary = "Initialize a GITC Client."
29 helpUsage = """
30%prog [options] [client name]
31"""
32 helpDescription = """
33The '%prog' command is ran to initialize a new GITC client for use
34with the GITC file system.
35
36This command will setup the client directory, initialize repo, just
37like repo init does, and then downloads the manifest collection
38and installs it in the .repo/directory of the GITC client.
39
40Once this is done, a GITC manifest is generated by pulling the HEAD
41SHA for each project and generates the properly formatted XML file
42and installs it as .manifest in the GITC client directory.
43
44The -c argument is required to specify the GITC client name.
45
46The optional -f argument can be used to specify the manifest file to
47use for this GITC client.
48"""
49
50 def _Options(self, p):
51 super()._Options(p, gitc_init=True)
52
53 def Execute(self, opt, args):
54 gitc_client = gitc_utils.parse_clientdir(os.getcwd())
55 if not gitc_client or (
56 opt.gitc_client and gitc_client != opt.gitc_client
57 ):
58 print(
59 "fatal: Please update your repo command. See go/gitc for "
60 "instructions.",
61 file=sys.stderr,
62 )
63 sys.exit(1)
64 self.client_dir = os.path.join(
65 gitc_utils.get_gitc_manifest_dir(), gitc_client
66 )
67 super().Execute(opt, args)
68
69 manifest_file = self.manifest.manifestFile
70 if opt.manifest_file:
71 if not os.path.exists(opt.manifest_file):
72 print(
73 "fatal: Specified manifest file %s does not exist."
74 % opt.manifest_file
75 )
76 sys.exit(1)
77 manifest_file = opt.manifest_file
78
79 manifest = GitcManifest(
80 self.repodir, os.path.join(self.client_dir, ".manifest")
81 )
82 manifest.Override(manifest_file)
83 gitc_utils.generate_gitc_manifest(None, manifest)
84 print(
85 "Please run `cd %s` to view your GITC client."
86 % os.path.join(wrapper.Wrapper().GITC_FS_ROOT_DIR, gitc_client)
87 )
diff --git a/subcmds/help.py b/subcmds/help.py
index 593bf676..0d7b664e 100644
--- a/subcmds/help.py
+++ b/subcmds/help.py
@@ -21,10 +21,7 @@ from color import Coloring
21from command import ( 21from command import (
22 PagedCommand, 22 PagedCommand,
23 MirrorSafeCommand, 23 MirrorSafeCommand,
24 GitcAvailableCommand,
25 GitcClientCommand,
26) 24)
27import gitc_utils
28from wrapper import Wrapper 25from wrapper import Wrapper
29from error import RepoExitError 26from error import RepoExitError
30 27
@@ -79,26 +76,9 @@ Displays detailed usage information about a command.
79 def PrintCommonCommandsBody(self): 76 def PrintCommonCommandsBody(self):
80 print("The most commonly used repo commands are:") 77 print("The most commonly used repo commands are:")
81 78
82 def gitc_supported(cmd):
83 if not isinstance(cmd, GitcAvailableCommand) and not isinstance(
84 cmd, GitcClientCommand
85 ):
86 return True
87 if self.client.isGitcClient:
88 return True
89 if isinstance(cmd, GitcClientCommand):
90 return False
91 if gitc_utils.get_gitc_manifest_dir():
92 return True
93 return False
94
95 commandNames = list( 79 commandNames = list(
96 sorted( 80 sorted(
97 [ 81 name for name, command in all_commands.items() if command.COMMON
98 name
99 for name, command in all_commands.items()
100 if command.COMMON and gitc_supported(command)
101 ]
102 ) 82 )
103 ) 83 )
104 self._PrintCommands(commandNames) 84 self._PrintCommands(commandNames)
diff --git a/subcmds/init.py b/subcmds/init.py
index 868d339e..c5a2c54c 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -84,8 +84,8 @@ to update the working directory files.
84 def _CommonOptions(self, p): 84 def _CommonOptions(self, p):
85 """Disable due to re-use of Wrapper().""" 85 """Disable due to re-use of Wrapper()."""
86 86
87 def _Options(self, p, gitc_init=False): 87 def _Options(self, p):
88 Wrapper().InitParser(p, gitc_init=gitc_init) 88 Wrapper().InitParser(p)
89 m = p.add_option_group("Multi-manifest") 89 m = p.add_option_group("Multi-manifest")
90 m.add_option( 90 m.add_option(
91 "--outer-manifest", 91 "--outer-manifest",
diff --git a/subcmds/start.py b/subcmds/start.py
index 67ac7df9..481d9ef2 100644
--- a/subcmds/start.py
+++ b/subcmds/start.py
@@ -13,15 +13,13 @@
13# limitations under the License. 13# limitations under the License.
14 14
15import functools 15import functools
16import os
17import sys 16import sys
18 17
19from command import Command, DEFAULT_LOCAL_JOBS 18from command import Command, DEFAULT_LOCAL_JOBS
20from git_config import IsImmutable 19from git_config import IsImmutable
21from git_command import git 20from git_command import git
22import gitc_utils
23from progress import Progress 21from progress import Progress
24from project import SyncBuffer, Project 22from project import Project
25from typing import NamedTuple 23from typing import NamedTuple
26from error import RepoExitError 24from error import RepoExitError
27 25
@@ -115,49 +113,9 @@ revision specified in the manifest.
115 113
116 all_projects = self.GetProjects( 114 all_projects = self.GetProjects(
117 projects, 115 projects,
118 missing_ok=bool(self.gitc_manifest),
119 all_manifests=not opt.this_manifest_only, 116 all_manifests=not opt.this_manifest_only,
120 ) 117 )
121 118
122 # This must happen after we find all_projects, since GetProjects may
123 # need the local directory, which will disappear once we save the GITC
124 # manifest.
125 if self.gitc_manifest:
126 gitc_projects = self.GetProjects(
127 projects, manifest=self.gitc_manifest, missing_ok=True
128 )
129 for project in gitc_projects:
130 if project.old_revision:
131 project.already_synced = True
132 else:
133 project.already_synced = False
134 project.old_revision = project.revisionExpr
135 project.revisionExpr = None
136 # Save the GITC manifest.
137 gitc_utils.save_manifest(self.gitc_manifest)
138
139 # Make sure we have a valid CWD.
140 if not os.path.exists(os.getcwd()):
141 os.chdir(self.manifest.topdir)
142
143 pm = Progress("Syncing %s" % nb, len(all_projects), quiet=opt.quiet)
144 for project in all_projects:
145 gitc_project = self.gitc_manifest.paths[project.relpath]
146 # Sync projects that have not been opened.
147 if not gitc_project.already_synced:
148 proj_localdir = os.path.join(
149 self.gitc_manifest.gitc_client_dir, project.relpath
150 )
151 project.worktree = proj_localdir
152 if not os.path.exists(proj_localdir):
153 os.makedirs(proj_localdir)
154 project.Sync_NetworkHalf()
155 sync_buf = SyncBuffer(self.manifest.manifestProject.config)
156 project.Sync_LocalHalf(sync_buf)
157 project.revisionId = gitc_project.old_revision
158 pm.update(msg="")
159 pm.end()
160
161 def _ProcessResults(_pool, pm, results): 119 def _ProcessResults(_pool, pm, results):
162 for result in results: 120 for result in results:
163 if result.error: 121 if result.error:
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 3fa6efa5..df536892 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -54,7 +54,6 @@ from git_command import git_require
54from git_config import GetUrlCookieFile 54from git_config import GetUrlCookieFile
55from git_refs import R_HEADS, HEAD 55from git_refs import R_HEADS, HEAD
56import git_superproject 56import git_superproject
57import gitc_utils
58from project import Project 57from project import Project
59from project import RemoteSpec 58from project import RemoteSpec
60from command import ( 59from command import (
@@ -77,7 +76,6 @@ from progress import Progress, elapsed_str, jobs_str
77from repo_trace import Trace 76from repo_trace import Trace
78import ssh 77import ssh
79from wrapper import Wrapper 78from wrapper import Wrapper
80from manifest_xml import GitcManifest
81 79
82_ONE_DAY_S = 24 * 60 * 60 80_ONE_DAY_S = 24 * 60 * 60
83 81
@@ -1678,50 +1676,6 @@ later is required to fix a server side protocol bug.
1678 opt, args, superproject_logging_data, manifest 1676 opt, args, superproject_logging_data, manifest
1679 ) 1677 )
1680 1678
1681 if self.gitc_manifest:
1682 gitc_manifest_projects = self.GetProjects(args, missing_ok=True)
1683 gitc_projects = []
1684 opened_projects = []
1685 for project in gitc_manifest_projects:
1686 if (
1687 project.relpath in self.gitc_manifest.paths
1688 and self.gitc_manifest.paths[project.relpath].old_revision
1689 ):
1690 opened_projects.append(project.relpath)
1691 else:
1692 gitc_projects.append(project.relpath)
1693
1694 if not args:
1695 gitc_projects = None
1696
1697 if gitc_projects != [] and not opt.local_only:
1698 print(
1699 "Updating GITC client: %s"
1700 % self.gitc_manifest.gitc_client_name
1701 )
1702 manifest = GitcManifest(
1703 self.repodir, self.gitc_manifest.gitc_client_name
1704 )
1705 if manifest_name:
1706 manifest.Override(manifest_name)
1707 else:
1708 manifest.Override(manifest.manifestFile)
1709 gitc_utils.generate_gitc_manifest(
1710 self.gitc_manifest, manifest, gitc_projects
1711 )
1712 print("GITC client successfully synced.")
1713
1714 # The opened projects need to be synced as normal, therefore we
1715 # generate a new args list to represent the opened projects.
1716 # TODO: make this more reliable -- if there's a project name/path
1717 # overlap, this may choose the wrong project.
1718 args = [
1719 os.path.relpath(manifest.paths[path].worktree, os.getcwd())
1720 for path in opened_projects
1721 ]
1722 if not args:
1723 return
1724
1725 all_projects = self.GetProjects( 1679 all_projects = self.GetProjects(
1726 args, 1680 args,
1727 missing_ok=True, 1681 missing_ok=True,