diff options
Diffstat (limited to 'repo')
| -rwxr-xr-x | repo | 38 |
1 files changed, 34 insertions, 4 deletions
| @@ -109,6 +109,7 @@ S_manifests = 'manifests' # special manifest repository | |||
| 109 | REPO_MAIN = S_repo + '/main.py' # main script | 109 | REPO_MAIN = S_repo + '/main.py' # main script |
| 110 | MIN_PYTHON_VERSION = (2, 6) # minimum supported python version | 110 | MIN_PYTHON_VERSION = (2, 6) # minimum supported python version |
| 111 | GITC_CONFIG_FILE = '/gitc/.config' | 111 | GITC_CONFIG_FILE = '/gitc/.config' |
| 112 | GITC_FS_ROOT_DIR = '/gitc/manifest-rw/' | ||
| 112 | 113 | ||
| 113 | 114 | ||
| 114 | import errno | 115 | import errno |
| @@ -221,7 +222,7 @@ def _GitcInitOptions(init_optparse): | |||
| 221 | help='Optional manifest file to use for this GITC client.') | 222 | help='Optional manifest file to use for this GITC client.') |
| 222 | g.add_option('-c', '--gitc-client', | 223 | g.add_option('-c', '--gitc-client', |
| 223 | dest='gitc_client', | 224 | dest='gitc_client', |
| 224 | help='The name for the new gitc_client instance.') | 225 | help='The name of the gitc_client instance to create or modify.') |
| 225 | 226 | ||
| 226 | _gitc_manifest_dir = None | 227 | _gitc_manifest_dir = None |
| 227 | def get_gitc_manifest_dir(): | 228 | def get_gitc_manifest_dir(): |
| @@ -238,6 +239,28 @@ def get_gitc_manifest_dir(): | |||
| 238 | pass | 239 | pass |
| 239 | return _gitc_manifest_dir | 240 | return _gitc_manifest_dir |
| 240 | 241 | ||
| 242 | def gitc_parse_clientdir(gitc_fs_path): | ||
| 243 | """Parse a path in the GITC FS and return its client name. | ||
| 244 | |||
| 245 | @param gitc_fs_path: A subdirectory path within the GITC_FS_ROOT_DIR. | ||
| 246 | |||
| 247 | @returns: The GITC client name | ||
| 248 | """ | ||
| 249 | if gitc_fs_path == GITC_FS_ROOT_DIR: | ||
| 250 | return None | ||
| 251 | if not gitc_fs_path.startswith(GITC_FS_ROOT_DIR): | ||
| 252 | manifest_dir = get_gitc_manifest_dir() | ||
| 253 | if manifest_dir == '': | ||
| 254 | return None | ||
| 255 | if manifest_dir[-1] != '/': | ||
| 256 | manifest_dir += '/' | ||
| 257 | if gitc_fs_path == manifest_dir: | ||
| 258 | return None | ||
| 259 | if not gitc_fs_path.startswith(manifest_dir): | ||
| 260 | return None | ||
| 261 | return gitc_fs_path.split(manifest_dir)[1].split('/')[0] | ||
| 262 | return gitc_fs_path.split(GITC_FS_ROOT_DIR)[1].split('/')[0] | ||
| 263 | |||
| 241 | class CloneFailure(Exception): | 264 | class CloneFailure(Exception): |
| 242 | """Indicate the remote clone of repo itself failed. | 265 | """Indicate the remote clone of repo itself failed. |
| 243 | """ | 266 | """ |
| @@ -276,10 +299,13 @@ def _Init(args, gitc_init=False): | |||
| 276 | _print('fatal: GITC filesystem is not available. Exiting...', | 299 | _print('fatal: GITC filesystem is not available. Exiting...', |
| 277 | file=sys.stderr) | 300 | file=sys.stderr) |
| 278 | sys.exit(1) | 301 | sys.exit(1) |
| 279 | if not opt.gitc_client: | 302 | gitc_client = opt.gitc_client |
| 303 | if not gitc_client: | ||
| 304 | gitc_client = gitc_parse_clientdir(os.getcwd()) | ||
| 305 | if not gitc_client: | ||
| 280 | _print('fatal: GITC client (-c) is required.', file=sys.stderr) | 306 | _print('fatal: GITC client (-c) is required.', file=sys.stderr) |
| 281 | sys.exit(1) | 307 | sys.exit(1) |
| 282 | client_dir = os.path.join(gitc_manifest_dir, opt.gitc_client) | 308 | client_dir = os.path.join(gitc_manifest_dir, gitc_client) |
| 283 | if not os.path.exists(client_dir): | 309 | if not os.path.exists(client_dir): |
| 284 | os.makedirs(client_dir) | 310 | os.makedirs(client_dir) |
| 285 | os.chdir(client_dir) | 311 | os.chdir(client_dir) |
| @@ -772,9 +798,13 @@ def _SetDefaultsTo(gitdir): | |||
| 772 | 798 | ||
| 773 | 799 | ||
| 774 | def main(orig_args): | 800 | def main(orig_args): |
| 775 | repo_main, rel_repo_dir = _FindRepo() | ||
| 776 | cmd, opt, args = _ParseArguments(orig_args) | 801 | cmd, opt, args = _ParseArguments(orig_args) |
| 777 | 802 | ||
| 803 | repo_main, rel_repo_dir = None, None | ||
| 804 | # Don't use the local repo copy, make sure to switch to the gitc client first. | ||
| 805 | if cmd != 'gitc-init': | ||
| 806 | repo_main, rel_repo_dir = _FindRepo() | ||
| 807 | |||
| 778 | wrapper_path = os.path.abspath(__file__) | 808 | wrapper_path = os.path.abspath(__file__) |
| 779 | my_main, my_git = _RunSelf(wrapper_path) | 809 | my_main, my_git = _RunSelf(wrapper_path) |
| 780 | 810 | ||
