Merge branch 'fidian-optimize-vcs-type'

This commit is contained in:
tlimoncelli@stackexchange.com
2015-06-20 19:11:48 +00:00
6 changed files with 39 additions and 68 deletions

View File

@@ -23,45 +23,36 @@ source "${0%/*}"/_stack_lib.sh
: "${EDITOR:=vi}" ;
# Outputs a string that is the base directory of this VCS repo.
# By side-effect, sets the variable VCS_TYPE to either 'git', 'hg',
# 'svn' or 'unknown'.
function _determine_vcs_base_and_type() {
if git rev-parse --show-toplevel 2>/dev/null ; then
# Set REPOBASE to the top of the repository
# Set VCS_TYPE to 'git', 'hg', 'svn' or 'unknown'
if which >/dev/null 2>/dev/null git && git rev-parse --show-toplevel >/dev/null 2>&1 ; then
VCS_TYPE=git
REPOBASE=$(git rev-parse --show-toplevel)
elif [ -d ".svn" ] ; then
#find topmost dir with .svn sub-dir
# Find topmost dir with .svn sub-dir
parent=""
grandparent="."
mydir="$(pwd)"
while [ -d "$grandparent/.svn" ]; do
parent=$grandparent
grandparent="$parent/.."
done
if [ ! -z "$parent" ]; then
cd "$parent"
pwd
else
exit 1
fi
cd "$mydir"
REPOBASE=$(cd "$parent" ; pwd)
VCS_TYPE=svn
elif hg root 2>/dev/null ; then
elif which >/dev/null 2>/dev/null hg && hg root >/dev/null 2>&1 ; then
# NOTE: hg has to be tested last because it always "succeeds".
VCS_TYPE=hg
REPOBASE=$(hg root 2>/dev/null)
else
# We aren't in a repo at all. Assume the cwd is the root
# of the tree.
echo .
VCS_TYPE=unknown
REPOBASE="$(pwd)"
fi
export VCS_TYPE
# FIXME: Verify this function by checking for .hg or .git
# after determining what we believe to be the answer.
}
REPOBASE=$(_determine_vcs_base_and_type)
KEYRINGDIR="$REPOBASE/$BLACKBOXDATA"
BB_ADMINS_FILE="blackbox-admins.txt"
BB_ADMINS="${KEYRINGDIR}/${BB_ADMINS_FILE}"
@@ -97,7 +88,6 @@ function fail_if_not_exists() {
# Exit we we aren't in a VCS repo.
function fail_if_not_in_repo() {
_determine_vcs_base_and_type
if [[ $VCS_TYPE = "unknown" ]]; then
echo "ERROR: This must be run in a VCS repo: git, hg, or svn." >&2
echo Exiting... >&2
@@ -250,10 +240,10 @@ function shred_file() {
local OPT
name="$1"
if which shred >/dev/null ; then
if which shred >/dev/null 2>/dev/null ; then
CMD=shred
OPT=-u
elif which srm >/dev/null ; then
elif which srm >/dev/null 2>/dev/null ; then
#NOTE: srm by default uses 35-pass Gutmann algorithm
CMD=srm
OPT=-f
@@ -285,10 +275,6 @@ function enumerate_subdirs() {
# chdir to the base of the repo.
function change_to_vcs_root() {
if [[ $REPOBASE = '' ]]; then
echo 'ERROR: _determine_vcs_base_and_type failed to set REPOBASE.'
exit 1
fi
cd "$REPOBASE"
}
@@ -351,18 +337,9 @@ function md5sum_file() {
# Abstract the difference between git and hg:
#
# Are we in git, hg, or unknown repo?
function which_vcs() {
if [[ $VCS_TYPE = '' ]]; then
_determine_vcs_base_and_type >/dev/null
fi
echo "$VCS_TYPE"
}
# Is this file in the current repo?
function is_in_vcs() {
is_in_$(which_vcs) "$@"
is_in_$VCS_TYPE "$@"
}
# Mercurial
function is_in_hg() {
@@ -416,7 +393,7 @@ function is_in_unknown() {
# Add a file to the repo (but don't commit it).
function vcs_add() {
vcs_add_$(which_vcs) "$@"
vcs_add_$VCS_TYPE "$@"
}
# Mercurial
function vcs_add_hg() {
@@ -442,7 +419,7 @@ function vcs_add_unknown() {
# Commit a file to the repo
function vcs_commit() {
vcs_commit_$(which_vcs) "$@"
vcs_commit_$VCS_TYPE "$@"
}
# Mercurial
function vcs_commit_hg() {
@@ -469,7 +446,7 @@ function vcs_commit_unknown() {
# Remove file from repo, even if it was deleted locally already.
# If it doesn't exist yet in the repo, it should be a no-op.
function vcs_remove() {
vcs_remove_$(which_vcs) "$@"
vcs_remove_$VCS_TYPE "$@"
}
# Mercurial
function vcs_remove_hg() {
@@ -497,7 +474,7 @@ function vcs_remove_unknown() {
function vcs_ignore() {
local file
for file in "$@"; do
vcs_ignore_$(which_vcs) "$file"
vcs_ignore_$VCS_TYPE "$file"
done
}
# Mercurial
@@ -538,7 +515,7 @@ function vcs_ignore_generic_file() {
function vcs_notice() {
local file
for file in "$@"; do
vcs_notice_$(which_vcs) "$file"
vcs_notice_$VCS_TYPE "$file"
done
}
# Mercurial

View File

@@ -9,7 +9,6 @@
set -e
source "${0%/*}/_blackbox_common.sh"
_determine_vcs_base_and_type
unencrypted_file=$(get_unencrypted_filename "$1")
encrypted_file=$(get_encrypted_filename "$1")
@@ -32,4 +31,4 @@ vcs_add "$BB_FILES"
vcs_commit "Removing from blackbox: ${unencrypted_file}" "$BB_FILES" "$encrypted_file"
echo "========== UPDATING VCS: DONE"
echo "Local repo updated. Please push when ready."
echo " $(which_vcs) push"
echo " $VCS_TYPE push"

View File

@@ -19,8 +19,6 @@ fail_if_keychain_has_secrets
encrypt_file "$unencrypted_file" "$encrypted_file"
shred_file "$unencrypted_file"
_determine_vcs_base_and_type
echo ========== UPDATED '"'$encrypted_file'"'
echo "Likely next step:"
echo " $VCS_TYPE commit -m\"${encrypted_file} updated\" \"$encrypted_file\""

View File

@@ -11,8 +11,6 @@
set -e
source "${0%/*}/_blackbox_common.sh"
_determine_vcs_base_and_type # Sets VCS_TYPE
if [[ $1 != 'yes' ]]; then
read -r -p "Enable blackbox for this $VCS_TYPE repo? (yes/no) " ans
if [[ $ans = 'no' || $ans = 'n' || $ans = '' ]]; then

View File

@@ -53,4 +53,4 @@ done
echo "========== UPDATING VCS: DONE"
echo "Local repo updated. Please push when ready."
echo " $(which_vcs) push"
echo " $VCS_TYPE push"

View File

@@ -59,7 +59,6 @@ while IFS= read <&99 -r unencrypted_file; do
done 99<"$BB_FILES"
vcs_commit 'Re-encrypted keys'
VCSCMD=$(which_vcs)
echo '========== DONE.'
echo 'Likely next step:'
echo " ${VCSCMD} push"
echo " $VCS_TYPE push"