##############
+# check git version to see if we can use autostash.
+# this appears to be an ubuntu issue, where xenial did not provide it even though the
+# feature appeared in git 2.6 and xenial claims it has git version 2.7.4. eventually,
+# this version test can go away.
+gitvertest="$(git version | sed -e 's/git version [0-9]\.//' | sed -e 's/\.[0-9][0-9]*$//' )"
+if (( $gitvertest >= 11 )); then
+ # auto-stash is not available until 2.6 for git, but ubuntu is misreporting or using a
+ # differing version number somehow. we are sure autostash was missing on ubuntu xenial
+ # with git 2.7.4 and it's definitely present in zesty with git at 2.11.
+# PULL_ADDITION='--rebase --autostash'
+#although initially attractive, above set of flags seems to lose history we don't want to
+#lose.
+PULL_ADDITION=
+fi
+
+##############
+
# the maximum depth that the recursive functions will try to go below the starting directory.
export MAX_DEPTH=5
local blatt="echo -n checking in '$nicedir'... "
do_update "$directory"
- test_or_die "repository update--this should be fixed before check-in."
+ exit_on_error "repository update--this should be fixed before check-in."
pushd "$directory" &>/dev/null
if [ -f ".no-checkin" ]; then
if test_writeable "CVS"; then
$blatt
cvs ci .
- test_or_die "cvs checkin"
+ exit_on_error "cvs checkin"
fi
elif [ -d ".svn" ]; then
if test_writeable ".svn"; then
$blatt
svn ci .
- test_or_die "svn checkin"
+ exit_on_error "svn checkin"
fi
elif [ -d ".git" ]; then
if test_writeable ".git"; then
# put all changed and new files in the commit. not to everyone's liking.
git add --all . | $TO_SPLITTER
promote_pipe_return 0
- test_or_die "git add all new files"
+ exit_on_error "git add all new files"
# see if there are any changes in the local repository.
if ! git diff-index --quiet HEAD --; then
#hmmm: begins to look like, you guessed it, a reusable bit that all commit actions could enjoy.
git commit .
retval=$?
- test_or_continue "git commit"
+ continue_on_error "git commit"
if [ $retval -ne 0 ]; then
echo -e -n "Commit failed or was aborted:\nShould we continue with other check-ins? [y/N] "
local line
# upload any changes to the upstream repo so others can see them.
git push --tags origin "$(my_branch_name)" 2>&1 | grep -v "X11 forwarding request failed" | $TO_SPLITTER
promote_pipe_return 0
- test_or_die "git push"
+ exit_on_error "git push"
fi
else
# only update if we see a repository living there.
if [ -d ".svn" ]; then
svn diff .
- test_or_die "subversion diff"
+ exit_on_error "subversion diff"
elif [ -d ".git" ]; then
git diff
- test_or_die "git diff"
+ exit_on_error "git diff"
elif [ -d "CVS" ]; then
cvs diff .
- test_or_die "cvs diff"
+ exit_on_error "cvs diff"
fi
popd &>/dev/null
elif [ -d ".svn" ]; then
# this action so far only makes sense and is needed for svn.
bash $FEISTY_MEOW_SCRIPTS/rev_control/svnapply.sh \? echo
- test_or_die "svn diff"
+ exit_on_error "svn diff"
elif [ -d ".git" ]; then
git status -u
- test_or_die "git status -u"
+ exit_on_error "git status -u"
fi
popd &>/dev/null
# yep, this path is absolute. just handle it directly.
if [ ! -d "$outer" ]; then continue; fi
do_checkin "$outer"
- test_or_die "running check-in (absolute) on path: $outer"
+ exit_on_error "running check-in (absolute) on path: $outer"
sep 28
else
for inner in $list; do
local path="$inner/$outer"
if [ ! -d "$path" ]; then continue; fi
do_checkin "$path"
- test_or_die "running check-in (relative) on path: $path"
+ exit_on_error "running check-in (relative) on path: $path"
sep 28
done
fi
restore_terminal_title
}
-# does a careful git update on all the folders in the specified list.
+# does a careful update on all the folders in the specified list;
+# it looks in the REPOSITORY_LIST for those names and updates them.
+# this is just like checkout_list, but it's for the puffing up action
+# we need to do on git.
function puff_out_list()
{
# make the list of directories unique.
# yep, this path is absolute. just handle it directly.
if [ ! -d "$outer" ]; then continue; fi
do_careful_git_update "$outer"
- test_or_die "running puff-out (absolute) on path: $outer"
+ exit_on_error "running puff-out (absolute) on path: $outer"
sep 28
else
for inner in $list; do
local path="$inner/$outer"
if [ ! -d "$path" ]; then continue; fi
do_careful_git_update "$path"
- test_or_die "running puff-out (relative) on path: $path"
+ exit_on_error "running puff-out (relative) on path: $path"
sep 28
done
fi
{
local directory="$1"; shift
pushd "$directory" &>/dev/null
- test_or_die "changing to directory: $directory"
+ exit_on_error "changing to directory: $directory"
if [ ! -d ".git" ]; then
- # we ignore if they're jumping into a non-useful folder, but also tell them.
- echo "Directory is not a git repository: $directory"
- return 0
+
+# # we ignore if they're jumping into a non-useful folder, but also tell them.
+# echo "Directory is not a git repository: $directory"
+# return 0
+
+ # new and better approach; just boil down to a getem action.
+ popd &>/dev/null
+ do_update $directory
+ return $?
fi
local this_branch="$(my_branch_name)"
# first update all our remote branches to their current state from the repos.
git remote update | $TO_SPLITTER
promote_pipe_return 0
- test_or_die "git remote update"
+ exit_on_error "git remote update"
show_branch_conditionally "$this_branch"
# echo "synchronizing remote branch: $bran"
git checkout "$bran" | $TO_SPLITTER
promote_pipe_return 0
- test_or_die "git switching checkout to remote branch: $bran"
+ exit_on_error "git switching checkout to remote branch: $bran"
show_branch_conditionally "$this_branch"
remote_branch_info=$(git ls-remote --heads origin $bran 2>/dev/null)
if [ ! -z "$remote_branch_info" ]; then
# we are pretty sure the remote branch does exist.
- git pull origin "$bran" | $TO_SPLITTER
+ git pull --tags $PULL_ADDITION origin "$bran" | $TO_SPLITTER
# we may want to choose to do fast forward, to avoid crazy multiple merge histories
# without any changes in them. --no-ff
promote_pipe_return 0
fi
- test_or_die "git pull of remote branch: $bran"
+ exit_on_error "git pull of remote branch: $bran"
done
# now switch back to our branch.
git checkout "$this_branch" | $TO_SPLITTER
promote_pipe_return 0
- test_or_die "git checking out our current branch: $this_branch"
+ exit_on_error "git checking out our current branch: $this_branch"
# now pull down any changes in our own origin in the repo, to stay in synch
# with any changes from others.
- git pull --all | $TO_SPLITTER
+ git pull --tags $PULL_ADDITION --all | $TO_SPLITTER
#is the above really important when we did this branch already in the loop?
#it does an --all, but is that effective or different? should we be doing that in above loop?
# --no-ff
promote_pipe_return 0
- test_or_die "git pulling all upstream"
+ exit_on_error "git pulling all upstream"
popd &>/dev/null
}
$blatt
cvs update . | $TO_SPLITTER
promote_pipe_return 0
- test_or_die "cvs update"
+ exit_on_error "cvs update"
fi
elif [ -d ".svn" ]; then
if test_writeable ".svn"; then
$blatt
svn update . | $TO_SPLITTER
promote_pipe_return 0
- test_or_die "svn update"
+ exit_on_error "svn update"
fi
elif [ -d ".git" ]; then
if test_writeable ".git"; then
$blatt
- git pull 2>&1 | grep -v "X11 forwarding request failed" | $TO_SPLITTER
+ git pull --tags $PULL_ADDITION 2>&1 | grep -v "X11 forwarding request failed" | $TO_SPLITTER
#ordinary pulls should be allowed to do fast forward: --no-ff
promote_pipe_return 0
- test_or_die "git pull of origin"
+ exit_on_error "git pull of origin"
fi
else
# this is not an error necessarily; we'll just pretend they planned this.
# yep, this path is absolute. just handle it directly.
if [ ! -d "$outer" ]; then continue; fi
do_update $outer
- test_or_die "running update on: $path"
+ exit_on_error "running update on: $path"
sep 28
else
for inner in $list; do
local path="$inner/$outer"
if [ ! -d "$path" ]; then continue; fi
do_update $path
- test_or_die "running update on: $path"
+ exit_on_error "running update on: $path"
sep 28
done
fi
echo "[$(pwd)]"
# pass the current directory plus the remaining parameters from function invocation.
$action .
- test_or_die "performing action $action on: $(pwd)"
+ exit_on_error "performing action $action on: $(pwd)"
sep 28
popd &>/dev/null
done 3<"$tempfile"