summaryrefslogtreecommitdiff
path: root/modules/blobs
diff options
context:
space:
mode:
Diffstat (limited to 'modules/blobs')
l---------modules/blobs/.#get.f.sh1
l---------modules/blobs/Makefile1
-rw-r--r--modules/blobs/Makefile.inc.mk8
-rw-r--r--modules/blobs/Module.mk0
-rw-r--r--modules/blobs/_stdio.sh74
-rw-r--r--modules/blobs/commit.d.sh34
-rw-r--r--modules/blobs/commit.f.sh37
-rw-r--r--modules/blobs/commit.sh39
-rw-r--r--modules/blobs/get.d.sh37
-rw-r--r--modules/blobs/get.f.sh31
-rw-r--r--modules/blobs/get.sh28
-rw-r--r--modules/blobs/ls.sh50
-rw-r--r--modules/blobs/print.sh41
-rw-r--r--modules/blobs/tree.sh40
14 files changed, 421 insertions, 0 deletions
diff --git a/modules/blobs/.#get.f.sh b/modules/blobs/.#get.f.sh
new file mode 120000
index 0000000..c2c97da
--- /dev/null
+++ b/modules/blobs/.#get.f.sh
@@ -0,0 +1 @@
+luke@build64-par.lan.670:1436421582 \ No newline at end of file
diff --git a/modules/blobs/Makefile b/modules/blobs/Makefile
new file mode 120000
index 0000000..fa7273c
--- /dev/null
+++ b/modules/blobs/Makefile
@@ -0,0 +1 @@
+../module.mk \ No newline at end of file
diff --git a/modules/blobs/Makefile.inc.mk b/modules/blobs/Makefile.inc.mk
new file mode 100644
index 0000000..9f3f112
--- /dev/null
+++ b/modules/blobs/Makefile.inc.mk
@@ -0,0 +1,8 @@
+am_src_files += commit.d.sh commit.f.sh commit.sh get.d.sh get.f.sh get.sh ls.sh print.sh tree.sh
+am_out_files += commit.d commit.f commit get.d get.f get ls print tree
+
+am_src_files += _stdio.sh
+am_sys_files += $(pkglibexecdir)/modules/$(name)/_stdio.sh
+
+$(DESTDIR)$(pkglibexecdir)/modules/$(name)/_stdio.sh: $(srcdir)/_stdio.sh | $(DESTDIR)$(pkglibexecdir)/modules/$(name)
+ $(INSTALL_DATA) $< $@
diff --git a/modules/blobs/Module.mk b/modules/blobs/Module.mk
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/modules/blobs/Module.mk
diff --git a/modules/blobs/_stdio.sh b/modules/blobs/_stdio.sh
new file mode 100644
index 0000000..0da03f0
--- /dev/null
+++ b/modules/blobs/_stdio.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+#name='stdio'
+#ver=0.9
+# Copyright (C) 2009-2010 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+verbose() {
+ if [ "$volume" == '-v' ]; then
+ echo $@ >> /dev/stderr
+ fi
+}
+
+out() {
+ if [ "$volume" != '-q' ]; then
+ echo $@ >> /dev/stderr
+ fi
+}
+
+warn () {
+ echo "$name: $1" >> /dev/stderr
+}
+
+fatal () {
+ warn "$1"
+ exit 1
+}
+
+error() {
+ warn "$1"
+ cat << __error__ >> /dev/stderr
+Usage: $RVS $name $usage
+
+Try \`$RVS help $name' for more options.
+__error__
+ exit 1
+}
+
+getvar() {
+ if [ -z "$1" ]; then
+ error
+ else
+ echo $1
+ fi
+}
+
+version() {
+ echo "$name $ver"
+ if [ "$volume" != '-q' ]; then
+ cat << __disclaimer__
+$name is copyright (C) 2009-2010 Luke Shumaker
+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 General Public License for more details.
+
+Originally written by Luke Shumaker <LukeShu@sbcglobal.net>.
+__disclaimer__
+ fi
+ exit 0
+}
+
diff --git a/modules/blobs/commit.d.sh b/modules/blobs/commit.d.sh
new file mode 100644
index 0000000..620a88f
--- /dev/null
+++ b/modules/blobs/commit.d.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+# rvs blobs/commit.d - add a directory to the repository
+# Copyright (C) 2009-2010, 2015 Luke Shumaker
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+. "${0%/*}/_stdio.sh"
+
+usage='DIRECTORY'
+[[ $# -eq 1 ]] || errusage
+dir="$1"
+
+shopt -s dotglob
+cd "$dir"
+tmpfile="$(mktemp -t "${0##*/}.XXXXXXXXXX")"
+for file in *; do
+ id="$("$RVS" commit "$file")"
+ stat -c $'%a\t%u (%U)\t%g (%G)\t' -- "$file"
+ printf $'%s\t%s\n' "$id" "$file"
+done > "$tmpfile"
+"$RVS" commit.f "$tmpfile" d
diff --git a/modules/blobs/commit.f.sh b/modules/blobs/commit.f.sh
new file mode 100644
index 0000000..8a97c2a
--- /dev/null
+++ b/modules/blobs/commit.f.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+# rvs blobs/commit.f - add a plain file to the repository
+# Copyright (C) 2009-2010, 2015 Luke Shumaker
+#
+# 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 <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
+
+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"
+
diff --git a/modules/blobs/commit.sh b/modules/blobs/commit.sh
new file mode 100644
index 0000000..e23af27
--- /dev/null
+++ b/modules/blobs/commit.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+# rvs blobs/commit - add a file to the repository
+# Copyright (C) 2009-2010, 2015 Luke Shumaker
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+. "${0%/*}/_stdio.sh"
+
+usage='[FILES...]'
+if [[ $# -lt 1 ]]; then
+ set -- .
+fi
+
+for file in "$@"; do
+ local type
+ if test -L "$file"; then
+ type=l
+ elif test -f "$file"; then
+ type=f
+ elif test -d "$file"; then
+ type=d
+ else
+ error 'Unsupported file type: %s' "$file"
+ fi
+ "$RVS" "commit.$type" "$file"
+done
diff --git a/modules/blobs/get.d.sh b/modules/blobs/get.d.sh
new file mode 100644
index 0000000..989dbe8
--- /dev/null
+++ b/modules/blobs/get.d.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+# rvs blobs/get.d - get a directory from the repository
+# Copyright (C) 2009-2010, 2015 Luke Shumaker
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+. "${0%/*}/_stdio.sh"
+
+usage="DIRNAME ID"
+[[ $# -eq 2 ]] || errusage
+name=$1
+id=$2
+
+tmpfile="$(mktemp -t "${0##*/}.XXXXXXXXXX")"
+"$RVS" get.f "$tmpfile" "$id"
+
+mkdir -p -- "$name"
+cd "$name"
+
+IFS=$'\t'
+while read -r perm user group id name; do
+ "$RVS" get "$name" "$id"
+ chmod "$perm" "$name"
+done < "$tmpfile"
diff --git a/modules/blobs/get.f.sh b/modules/blobs/get.f.sh
new file mode 100644
index 0000000..02185a6
--- /dev/null
+++ b/modules/blobs/get.f.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+# rvs blobs/get.f - get a plain file from the repository
+# Copyright (C) 2009-2010, 2015 Luke Shumaker
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+. "${0%/*}/_stdio.sh"
+
+. "$LIBDIR/@ID@/stdio"
+
+usage="FILENAME ID"
+[[ $# -eq 2 ]] || errusage
+name=$1
+id=$2
+
+mkdir -p -- "${name%/*}"
+< "$REPO/blobs/${id#*:}" gunzip > "$name"
+
diff --git a/modules/blobs/get.sh b/modules/blobs/get.sh
new file mode 100644
index 0000000..4be2732
--- /dev/null
+++ b/modules/blobs/get.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+# rvs blobs/get - get a file from the repository
+# Copyright (C) 2009-2010, 2015 Luke Shumaker
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+. "${0%/*}/_stdio.sh"
+
+usage="FILENAME ID"
+[[ $# -eq 2 ]] || errusage
+name=$1
+id=$2
+
+"$RVS" "get.${id%%:*}" "$name" "$id"
+
diff --git a/modules/blobs/ls.sh b/modules/blobs/ls.sh
new file mode 100644
index 0000000..1c4d620
--- /dev/null
+++ b/modules/blobs/ls.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+name='ls'
+ver=0.1
+# Copyright (C) 2010 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+. "$LIBDIR/@ID@/stdio"
+
+usage="DIR_ID [FORMAT]"
+id="`getvar "$1"`"
+form="${2-%p\t%o\t%g\t%n\t%i}"
+
+# %p - permissions
+# %o - owner
+# %g - group
+# %i - blob id
+# %n - name
+# \t - a tab char
+
+tmp="`mktemp`"
+"$RVS" get.f "$tmp" "$id"
+
+while read line; do
+ p="`echo "$line" | cut -f1`"
+ o="`echo "$line" | cut -f2`"
+ g="`echo "$line" | cut -f3`"
+ i="`echo "$line" | cut -f4`"
+ n="`echo "$line" | cut -f5-`"
+ echo "$form" | sed \
+ -e 's:\\t:\t:g' \
+ -e "s:%p:${p/:/\\:}:g" \
+ -e "s:%o:${o/:/\\:}:g" \
+ -e "s:%g:${g/:/\\:}:g" \
+ -e "s:%i:${i/:/\\:}:g" \
+ -e "s:%n:${n/:/\\:}:g"
+done < "$tmp"
+
diff --git a/modules/blobs/print.sh b/modules/blobs/print.sh
new file mode 100644
index 0000000..0e23adc
--- /dev/null
+++ b/modules/blobs/print.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+# rvs files/print - ???
+# Copyright (C) 2010, 2015 Luke Shumaker
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+. "${0%/*}/_stdio.sh"
+
+usage='ID'
+[[ $# -eq 1 ]] || errusage
+id=$1
+
+hash="${id#*:}"
+file="$REPO/blobs/$hash"
+
+if [ -e "$file" ]; then
+ t="${id%%:*}"
+ type=''
+ case "$t" in
+ f) type='regular file';;
+ d) type='directory';;
+ l) type='link';;
+ esac
+ printf 'File Type: %s (%s)\n' "$t" "$type"
+else
+ fatal 'no object with ID `%s'\' "$id"
+fi
+
diff --git a/modules/blobs/tree.sh b/modules/blobs/tree.sh
new file mode 100644
index 0000000..80202ea
--- /dev/null
+++ b/modules/blobs/tree.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+name='tree'
+ver=0.1
+# Copyright (C) 2010 Luke Shumaker
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; see the file COPYING.
+# If not, see <http://www.gnu.org/licenses>.
+
+. "${0%/*}/_stdio.sh"
+
+usage="DIR_ID [NAME] [PREFIX] [LAST]"
+id="`getvar "$1"`"
+name="${2-.}"
+pref="$3"
+last="$4"
+
+echo "$pref $name $id"
+pref=' | '
+"$RVS" ls "$id" '%i\t%n' | while read line; do
+ i="`echo "$line" | cut -f1`"
+ n="`echo "$line" | cut -f2-`"
+ t="`"$RVS" blob-gettype "$i"`"
+ if [ "$t" = 'd' ]
+ "$RVS" tree "$i" "$n" "$pref"
+ else
+ echo "$pref $n $i"
+ fi
+done
+