]> git.scottworley.com Git - git-cache/commitdiff
Parse command line arguments more extensibly
authorScott Worley <scottworley@scottworley.com>
Mon, 21 Jun 2021 23:00:55 +0000 (16:00 -0700)
committerScott Worley <scottworley@scottworley.com>
Tue, 22 Jun 2021 01:40:06 +0000 (18:40 -0700)
git_cache.py

index 1363f119b484555b1c4c48ae9983e7175a068608..d43df2624fd8e9d9bc92536a4617c21eeb69d249 100644 (file)
@@ -4,6 +4,7 @@
 # implementation details for my comfort.  So we re-implement here half of
 # nix's builtins.fetchGit.  :(
 
+import argparse
 import functools
 import hashlib
 import logging
@@ -155,13 +156,29 @@ def ensure_rev_available(repo: Repo, ref: Ref, rev: Rev) -> Path:
 
 
 def _main() -> None:
-    if len(sys.argv) == 3:
-        print('{1} {0}'.format(*fetch(Repo(sys.argv[1]), Ref(sys.argv[2]))))
-    elif len(sys.argv) == 4:
-        print(ensure_rev_available(
-            Repo(sys.argv[1]), Ref(sys.argv[2]), Rev(sys.argv[3])))
+    parser = argparse.ArgumentParser(
+        description='Cache remote git repositories locally.',
+        epilog='example usage: git-cache https://github.com/NixOS/nixpkgs.git master')
+    parser.add_argument(
+        'repo',
+        metavar='Repo',
+        type=Repo,
+        help='Git repository URL')
+    parser.add_argument(
+        'ref',
+        metavar='Ref',
+        type=Ref,
+        help='Ref (branch or tag) in the git repo')
+    parser.add_argument(
+        'rev',
+        metavar='Rev',
+        type=Rev,
+        nargs='?',
+        help='Ensure that this revision is present.  ' +
+        'If this revision is already present locally, no network operations are performed.')
+    args = parser.parse_args()
+
+    if args.rev is None:
+        print('{1} {0}'.format(*fetch(args.repo, args.ref)))
     else:
-        usage = '''usage: git-cache repo ref [rev]
-example: git-cache https://github.com/NixOS/nixpkgs.git master'''
-        print(usage, file=sys.stderr)
-        sys.exit(1)
+        print(ensure_rev_available(args.repo, args.ref, args.rev))