diff options
-rw-r--r-- | README.md | 2 | ||||
-rwxr-xr-x | git-package | 33 | ||||
-rw-r--r-- | git-package.1 | 53 |
3 files changed, 88 insertions, 0 deletions
@@ -8,6 +8,8 @@ personal use. - git-init-shared: Initialize a bare repo that multiple users have write access to. This uses `setfacl(1)` and thereby relies on ACL support. +- git-package: Create an archive of a named tree suitable for distribution. See + [`git-package(1)`](git-package.1). - git-sign-for-cgit: Generate a snapshot and store its signify signature for [`cgit`](https://git.zx2c4.com/cgit/about/) using [`git-notes(1)`](https://git-scm.com/docs/git-notes). diff --git a/git-package b/git-package new file mode 100755 index 0000000..4becad9 --- /dev/null +++ b/git-package @@ -0,0 +1,33 @@ +#!/bin/sh + +set -e + +git rev-parse || exit 1 + +errx() { + printf '%s\n' "$*" >&2 + exit 1 +} + +usage() { + errx 'usage: git package [-f format] tree-ish [path...]' +} + +format="$(git config --get package.format)" +: "${format:=tar.gz}" + +while getopts f: opt; do + case $opt in + f) format=$OPTARG;; + ?) usage;; + esac +done +shift $((OPTIND - 1)) +test $# -ge 1 || usage + +git archive -l | grep -Fqx "$format" || err "fatal: unknown format" + +name="$(basename "$(git rev-parse --show-toplevel)")" +treeish="$1" + +exec git archive --prefix="$name-$treeish/" -o "$name-$treeish.$format" -- "$@" diff --git a/git-package.1 b/git-package.1 new file mode 100644 index 0000000..ac3e5cf --- /dev/null +++ b/git-package.1 @@ -0,0 +1,53 @@ +.Dd May 22, 2021 +.Dt GIT-PACKAGE 1 +.Os +.Sh NAME +.Nm git-package +.Nd create an archive of a named tree suitable for distribution +.Sh SYNOPSIS +.Nm git package +.Op Fl f Ar format +.Ar tree-ish +.Op Ar path... +.Sh DESCRIPTION +.Nm +creates an archive of a named tree (or specific paths within that tree, if +specified) that is suitable for distribution on the world wide web. +It saves the archive to +.Pa <name>-<tree-ish>.<format> , +where +.Em name +is the title of the repository. +For supported archive formats, see +.Xr git-archive 1 . +A default archive format can be set via +.Xr git-config 1 , +using the +.Em package.format +option. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl f Ar format +The format to archive +.Ar tree-ish +as. +Defaults to +.Em package.format , +or tar.gz if unset. +.El +.Sh SEE ALSO +.Xr git 1 , +.Xr git-archive 1 , +.Xr git-config 1 +.Sh HISTORY +.Nm +was written due to the lack of a convenient tool to create release +archives for distribution. +.Xr git-archive 1 +was considered, but was found to be too burdensome to be deployed regularly. +.Sh AUTHORS +.An -nosplit +.Nm +was written by +.An Wolfgang Müller Aq Mt wolf@oriole.systems . |