From 6d386c6cfe3d04a3188b9d05b7656ffec2a8f51f Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 14 Mar 2016 22:26:05 -0400 Subject: fixity fix --- modules/blobs/put.f.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 modules/blobs/put.f.sh (limited to 'modules/blobs/put.f.sh') diff --git a/modules/blobs/put.f.sh b/modules/blobs/put.f.sh new file mode 100644 index 0000000..01b421a --- /dev/null +++ b/modules/blobs/put.f.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +name=blobs/put.f +desc='Put a plain file into 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 +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +usage='FILENAME [TYPE]' +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="$(<"$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-54-g00ecf