[PATCH] variablize flags for various commands
Aaron Bieber
aaron at bolddaemon.com
Fri Mar 3 15:46:03 CET 2017
Hola,
This patch allows p-s to function on OpenBSD using native cp, rm, mv,
grep and mkdir. It does this by exposing command flags that can be
overwritten in the platform/$(uname).sh scripts.
Tests all pass on OpenBSD and Debian 8.7.
Cheers,
Aaron
diff --git a/src/password-store.sh b/src/password-store.sh
index 1ab6fb5..737ea5b 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -20,6 +20,13 @@ GENERATED_LENGTH="${PASSWORD_STORE_GENERATED_LENGTH:-25}"
CHARACTER_SET="${PASSWORD_STORE_CHARACTER_SET:-[:graph:]}"
CHARACTER_SET_NO_SYMBOLS="${PASSWORD_STORE_CHARACTER_SET_NO_SYMBOLS:-[:alnum:]}"
+CP_OPTS="-v"
+RM_OPTS="-v"
+MV_OPTS="-v"
+GREP_OPTS="--color=always"
+MKDIR_OPTS="-v -p"
+TREE="tree"
+
export GIT_CEILING_DIRECTORIES="$PREFIX/.."
#
@@ -316,14 +323,14 @@ cmd_init() {
if [[ $# -eq 1 && -z $1 ]]; then
[[ ! -f "$gpg_id" ]] && die "Error: $gpg_id does not exist and so cannot be removed."
- rm -v -f "$gpg_id" || exit 1
+ rm $RM_OPTS -f "$gpg_id" || exit 1
if [[ -n $INNER_GIT_DIR ]]; then
git -C "$INNER_GIT_DIR" rm -qr "$gpg_id"
git_commit "Deinitialize ${gpg_id}${id_path:+ ($id_path)}."
fi
rmdir -p "${gpg_id%/*}" 2>/dev/null
else
- mkdir -v -p "$PREFIX/$id_path"
+ mkdir $MKDIR_OPTS "$PREFIX/$id_path"
printf "%s\n" "$@" > "$gpg_id"
local id_print="$(printf "%s, " "$@")"
echo "Password store initialized for ${id_print%, }${id_path:+ ($id_path)}"
@@ -379,7 +386,7 @@ cmd_show() {
else
echo "${path%\/}"
fi
- tree -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g' # remove .gpg at end of line, but keep colors
+ "$TREE" -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g' # remove .gpg at end of line, but keep colors
elif [[ -z $path ]]; then
die "Error: password store is empty. Try \"pass init\"."
else
@@ -391,14 +398,14 @@ cmd_find() {
[[ $# -eq 0 ]] && die "Usage: $PROGRAM $COMMAND pass-names..."
IFS="," eval 'echo "Search Terms: $*"'
local terms="*$(printf '%s*|*' "$@")"
- tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
+ "$TREE" -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
}
cmd_grep() {
[[ $# -ne 1 ]] && die "Usage: $PROGRAM $COMMAND search-string"
local search="$1" passfile grepresults
while read -r -d "" passfile; do
- grepresults="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | grep --color=always "$search")"
+ grepresults="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | grep $GREP_OPTS "$search")"
[[ $? -ne 0 ]] && continue
passfile="${passfile%.gpg}"
passfile="${passfile#$PREFIX/}"
@@ -430,7 +437,7 @@ cmd_insert() {
[[ $force -eq 0 && -e $passfile ]] && yesno "An entry already exists for $path. Overwrite it?"
- mkdir -p -v "$PREFIX/$(dirname "$path")"
+ mkdir $MKDIR_OPTS "$PREFIX/$(dirname "$path")"
set_gpg_recipients "$(dirname "$path")"
if [[ $multiline -eq 1 ]]; then
@@ -464,7 +471,7 @@ cmd_edit() {
local path="${1%/}"
check_sneaky_paths "$path"
- mkdir -p -v "$PREFIX/$(dirname "$path")"
+ mkdir $MKDIR_OPTS "$PREFIX/$(dirname "$path")"
set_gpg_recipients "$(dirname "$path")"
local passfile="$PREFIX/$path.gpg"
set_git "$passfile"
@@ -506,7 +513,7 @@ cmd_generate() {
local length="${2:-$GENERATED_LENGTH}"
check_sneaky_paths "$path"
[[ ! $length =~ ^[0-9]+$ ]] && die "Error: pass-length \"$length\" must be a number."
- mkdir -p -v "$PREFIX/$(dirname "$path")"
+ mkdir $MKDIR_OPTS "$PREFIX/$(dirname "$path")"
set_gpg_recipients "$(dirname "$path")"
local passfile="$PREFIX/$path.gpg"
set_git "$passfile"
@@ -561,7 +568,7 @@ cmd_delete() {
[[ $force -eq 1 ]] || yesno "Are you sure you would like to delete $path?"
- rm $recursive -f -v "$passfile"
+ rm $recursive -f $RM_OPTS "$passfile"
set_git "$passfile"
if [[ -n $INNER_GIT_DIR && ! -e $passfile ]]; then
git -C "$INNER_GIT_DIR" rm -qr "$passfile"
@@ -595,7 +602,7 @@ cmd_copy_move() {
echo "$old_path"
[[ -e $old_path ]] || die "Error: $1 is not in the password store."
- mkdir -p -v "${new_path%/*}"
+ mkdir $MKDIR_OPTS "${new_path%/*}"
[[ -d $old_path || -d $new_path || $new_path == */ ]] || new_path="${new_path}.gpg"
local interactive="-i"
@@ -603,7 +610,8 @@ cmd_copy_move() {
set_git "$new_path"
if [[ $move -eq 1 ]]; then
- mv $interactive -v "$old_path" "$new_path" || exit 1
+ echo mv $interactive $MV_OPTS "$old_path" "$new_path"
+ mv $interactive $MV_OPTS "$old_path" "$new_path" || exit 1
[[ -e "$new_path" ]] && reencrypt_path "$new_path"
set_git "$new_path"
@@ -620,7 +628,7 @@ cmd_copy_move() {
fi
rmdir -p "$old_dir" 2>/dev/null
else
- cp $interactive -r -v "$old_path" "$new_path" || exit 1
+ cp $interactive -r $CP_OPTS "$old_path" "$new_path" || exit 1
[[ -e "$new_path" ]] && reencrypt_path "$new_path"
git_add_file "$new_path" "Copy ${1} to ${2}."
fi
diff --git a/src/platform/openbsd.sh b/src/platform/openbsd.sh
index b66b32f..aa7d479 100644
--- a/src/platform/openbsd.sh
+++ b/src/platform/openbsd.sh
@@ -38,3 +38,10 @@ tmpdir() {
GETOPT="gnugetopt"
SHRED="rm -P -f"
+CP_OPTS=""
+RM_OPTS=""
+MV_OPTS=""
+GREP_OPTS=""
+MKDIR_OPTS="-p"
+TREE="colortree"
+
--
PGP: 0x1F81112D62A9ADCE / 3586 3350 BFEA C101 DB1A 4AF0 1F81 112D 62A9 ADCE
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.zx2c4.com/pipermail/password-store/attachments/20170303/d159afa8/attachment.asc>
More information about the Password-Store
mailing list