{"id":21478980,"url":"https://github.com/mjpost/cachepipe","last_synced_at":"2026-02-27T11:11:17.021Z","repository":{"id":1519526,"uuid":"1778359","full_name":"mjpost/CachePipe","owner":"mjpost","description":"A package for caching shell commands.","archived":false,"fork":false,"pushed_at":"2012-10-22T02:02:55.000Z","size":119,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-09T03:11:28.625Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mjpost.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-05-20T20:50:49.000Z","updated_at":"2014-09-08T22:29:41.000Z","dependencies_parsed_at":"2022-08-16T13:35:12.827Z","dependency_job_id":null,"html_url":"https://github.com/mjpost/CachePipe","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mjpost/CachePipe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjpost%2FCachePipe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjpost%2FCachePipe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjpost%2FCachePipe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjpost%2FCachePipe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mjpost","download_url":"https://codeload.github.com/mjpost/CachePipe/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjpost%2FCachePipe/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265431546,"owners_count":23764031,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-23T11:20:23.506Z","updated_at":"2026-02-27T11:11:16.977Z","avatar_url":"https://github.com/mjpost.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"CachePipe is a simple-to-use caching pipeline.  By this we mean:\n\n- *simple-to-use*: It is a simple wrapper around existing commands, and\n  doesn't require you to learn an extensive system\n\n- *caching*: commands are cached based on the contents of an\n   explicitly-provided dependency list, and future invocations will\n   not re-run the command if any of them hav changed\n\n- *pipeline*: CachePipe is originally designed to be used as part of a\n   long pipeline of many different steps\n\nCachePipe uses git-style SHA-1 hashes of the dependencies and the\ncommand invocation itself to determine when changes have been made.\nThis improves upon existing caching systems, which make use of\nunreliable indicators of command completion such as timestamps or even\nfile existence.  It is implemented as a Perl module, and provides both\na Perl API and a command-line interface.\n\nCachePipe supports a number of options.  See below for more detail.\n\n-- EXAMPLE -----------------------------------------------------------\n\n# Put this in your init file\n\n    export CACHEPIPE=/path/to/cachepipe\n    export PERL5LIB+=$CACHEPIPE\n    . $CACHEPIPE/bashrc\n\nYou can now do the following:\n\n- From the command line:\n\n    $ cachecmd copy-file \"cp a b\" a b\n    [copy-file] rebuilding...\n      dep=a [CHANGED]\n      dep=b [NOT FOUND]\n      cmd=cp a b\n      took 0 seconds (0s)\n    $ cachecmd copy-file \"cp a b\" a b\n    [copy-file] cached, skipping...\n\n- From a Perl script:\n\n    use CachePipe;\n\n    my $pipe = new CachePipe();\n    $pipe-\u003ecmd(\"copy-file\",\"cp a b\",[\"a\",\"b\"]);\n\n-- OPTIONS -----------------------------------------------------------\n\nYou can tell the command to build the cache files without actually\nrunning the command using the --cache-only flag between the command\nname and the command, i.e.\n\n    $ cachecmd copy-file --cache-only \"cp a b\" a b\n\nThis will compute the hash over all the dependencies and the command\nas if the current state were the desired state.  Note that all the\ndependencies must exist.\n\nIf you have already run a command, you can easily run it again:\n\n    $ cachecmd copy-file --rerun\n\nSometimes you wan to just recompute the hashes of a run, as if it had\njust been successfully completed, but without actually re-running the\ncommand.  If the command has already been run once, you can type:\n\n    $ cachecmd copy-file --cache-only\n\nThis flag also works with a new command, e.g.,\n\n    $ cachecmd copy-file --cache-only \"cp a b\" a b\n\n-- AUTHORS -----------------------------------------------------------\n\nThis was all Adam Lopez' idea.\n\nMatt Post \u003cpost@jhu.edu\u003e\nAdam Lopez \u003calopez@cs.jhu.edu\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmjpost%2Fcachepipe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmjpost%2Fcachepipe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmjpost%2Fcachepipe/lists"}