diff options
Diffstat (limited to 'modules/blobs/commit.f.sh')
-rw-r--r-- | modules/blobs/commit.f.sh | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/modules/blobs/commit.f.sh b/modules/blobs/commit.f.sh index 098be9d..233f7bb 100644 --- a/modules/blobs/commit.f.sh +++ b/modules/blobs/commit.f.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash -# rvs blobs/commit.f - add a plain file to the repository -# Copyright (C) 2009-2010, 2015-2016 Luke Shumaker -# +name=blobs/commit.f +desc='Add a plain file to the repository' +copyright=('2009-2010, 2015-2016 Luke Shumaker') +license='AGPLv3+' # This file is part of rvs. # # This program is free software: you can redistribute it and/or modify @@ -17,21 +18,32 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -. "${0%/*}/_stdio.sh" - usage='FILENAME [TYPE]' -case $# in - 0) errusage;; - 1) infile=$1; type=f;; - 2) infile=$1; type=$2;; - *) errusage;; -esac +doc="Note that FILENAME must be a regular file; character devices such as +/dev/stdin or /dev/fd/n won't work." + +. "${0%/*}/_shlib.sh" + +main() { + case $# in + 0) errusage;; + 1) infile=$1; type=f;; + 2) infile=$1; type=$2;; + *) errusage;; + esac + + if ! [[ -f "$infile" ]]; then + error 'Not a regular file: %s' "$infile" + fi -hash="$(<"$file" sha1sum | cut -d ' ' -f1)" -outfile="$RVS_REPO/blobs/$hash" -if [ ! -f "$outfile" ]; then - mkdir -p -- "${outfile%/*}" - < "$infile" gzip -9 > "$outfile" -fi -printf '%s:%s\n' "$type" "$hash" + hash="$(<"$infile" sha1sum | cut -d ' ' -f1)" + outfile="$RVS_REPO/blobs/$hash" + if [ ! -f "$outfile" ]; then + mkdir -p -- "${outfile%/*}" + < "$infile" gzip -9 > "$outfile.tmp" + mv -T -- "$outfile.tmp" "$outfile" + fi + printf '%s:%s\n' "$type" "$hash" +} +main "$@" |