X-Git-Url: http://git.scottworley.com/pinch/blobdiff_plain/530104d72eadd4a2700a5f8ba6d80dd7fed66d4e..8e3f804c6b0dc1bf0e7b1d8634a95ee178b7c309:/pinch.py diff --git a/pinch.py b/pinch.py index b5e3b81..a7f3449 100644 --- a/pinch.py +++ b/pinch.py @@ -127,6 +127,15 @@ def copy_to_nix_store(v: Verification, filename: str) -> str: return process.stdout.decode().strip() # type: ignore # (for old mypy) +def symlink_archive(v: Verification, path: str) -> str: + with tempfile.TemporaryDirectory() as td: + archive_filename = os.path.join(td, 'link.tar.gz') + os.symlink(path, os.path.join(td, 'link')) + with tarfile.open(archive_filename, mode='x:gz') as t: + t.add(os.path.join(td, 'link'), arcname='link') + return copy_to_nix_store(v, archive_filename) + + class AliasSearchPath(NamedTuple): alias_of: str @@ -143,12 +152,7 @@ class SymlinkSearchPath(NamedTuple): return SymlinkPin() def fetch(self, v: Verification, _: Pin) -> str: - with tempfile.TemporaryDirectory() as td: - archive_filename = os.path.join(td, 'link.tar.gz') - os.symlink(self.path, os.path.join(td, 'link')) - with tarfile.open(archive_filename, mode='x:gz') as t: - t.add(os.path.join(td, 'link'), arcname='link') - return copy_to_nix_store(v, archive_filename) + return symlink_archive(v, self.path) class GitSearchPath(NamedTuple): @@ -723,8 +727,7 @@ def updateCommand(args: argparse.Namespace) -> None: command = [ 'nix-env', '--profile', - '/nix/var/nix/profiles/per-user/%s/channels' % - getpass.getuser(), + args.profile, '--show-trace', '--file', '', @@ -747,6 +750,8 @@ def main() -> None: parser_pin.set_defaults(func=pinCommand) parser_update = subparsers.add_parser('update') parser_update.add_argument('--dry-run', action='store_true') + parser_update.add_argument('--profile', default=( + '/nix/var/nix/profiles/per-user/%s/channels' % getpass.getuser())) parser_update.add_argument('channels_file', type=str, nargs='+') parser_update.set_defaults(func=updateCommand) args = parser.parse_args()