From 94cacc84d322429e70485dea49bb858f48aa26c8 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 14 Mar 2016 21:26:47 -0400 Subject: stuff --- modules/blobs/commit.f.sh | 48 +++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'modules/blobs/commit.f.sh') 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 . -. "${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 "$@" -- cgit v1.2.3-2-g168b