From 2ca53771151d942a630205e5f59f8f14365f6ae0 Mon Sep 17 00:00:00 2001 From: Chris Koeritz Date: Fri, 10 Nov 2017 16:28:39 -0500 Subject: [PATCH] new script for careful git update rfluffer will do the careful git update on repositories. also experimenting with the branch state method during our pulls to see what it actually reports. --- scripts/rev_control/rfluffer.sh | 29 ++++++++++++ scripts/rev_control/version_control.sh | 63 ++++++++++++++------------ 2 files changed, 64 insertions(+), 28 deletions(-) create mode 100644 scripts/rev_control/rfluffer.sh diff --git a/scripts/rev_control/rfluffer.sh b/scripts/rev_control/rfluffer.sh new file mode 100644 index 00000000..b5de908e --- /dev/null +++ b/scripts/rev_control/rfluffer.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# this "fluffs out" the repositories that it finds. what this means is that +# any git repositories found will have all of their remote state updated (by +# pulling all remote repos). this ensures that any upstream changes get +# merged into the local branch. +# it's better to fluff out your code regularly rather than waiting for a huge +# merge snarl later. note that if you check in the code frequently with the +# feisty meow scripts, that will also take care of fluffing out the code. + +source "$FEISTY_MEOW_SCRIPTS/core/launch_feisty_meow.sh" +source "$FEISTY_MEOW_SCRIPTS/rev_control/version_control.sh" + +############## + +dir="$1"; shift +if [ -z "$dir" ]; then + dir=. +fi + +pushd "$dir" &>/dev/null +test_or_die "changing to directory: $dir" +tempfile=$(generate_rev_ctrl_filelist) +test_or_die "generating revision control file list" +popd &>/dev/null + +perform_revctrl_action_on_file "$tempfile" do_careful_git_update +test_or_die "fluffing out repository at: $tempfile" + diff --git a/scripts/rev_control/version_control.sh b/scripts/rev_control/version_control.sh index 7145416f..9e314d2e 100644 --- a/scripts/rev_control/version_control.sh +++ b/scripts/rev_control/version_control.sh @@ -240,9 +240,11 @@ function my_branch_name() ##echo "$(git branch -vv | grep \* | cut -d ' ' -f2)" ##} -# this exits with 0 for success (normal bash behavior) when up to date. if the branch is not up to date, -# then these values are returned: -#DOCUMENT THE VALUES +# reports the status of the branch by echoing one of these values: +# okay: up to date and everything is good. +# needs_pull: this branch needs to be pulled from origins. +# needs_push: there are unsaved changes on this branch to push to remote store. +# diverged: the branches diverged and are going to need a merge. # reference: https://stackoverflow.com/questions/3258243/check-if-pull-needed-in-git function check_branch_state() { @@ -250,29 +252,20 @@ function check_branch_state() local to_return=120 # unknown issue. -sep - - LOCAL=$(git rev-parse @) - REMOTE=$(git rev-parse "$branch") - BASE=$(git merge-base @ "$branch") -var branch LOCAL REMOTE BASE - - if [ "$LOCAL" == "$REMOTE" ]; then - echo "Up-to-date" - to_return=0 - elif [ "$LOCAL" == "$BASE" ]; then - echo "Need to pull" - to_return=1 - elif [ "$REMOTE" == "$BASE" ]; then - echo "Need to push" - to_return=2 + local local_branch=$(git rev-parse @) + local remote_branch=$(git rev-parse "$branch") + local merge_base=$(git merge-base @ "$branch") + + if [ "$local_branch" == "$remote_branch" ]; then + echo "okay" + elif [ "$local_branch" == "$merge_base" ]; then + echo "needs_pull" + elif [ "$remote_branch" == "$merge_base" ]; then + echo "needs_push" else - echo "Diverged" - to_return=3 + echo "diverged" fi -sep - return $to_return } @@ -281,17 +274,25 @@ sep # other methods. function do_careful_git_update() { - local this_branch="$(my_branch_name)" + local directory="$1"; shift + pushd "$directory" &>/dev/null + test_or_die "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 + fi # first update all our remote branches to their current state from the repos. git remote update test_or_die "git remote update" + local this_branch="$(my_branch_name)" #appears to be useless; reports no changes when we need to know about remote changes that do exist: -# check_branch_state "$this_branch" -# state=$? -# test_or_continue "branch state check" -# echo the branch state is $state +#hmmm: trying it out again now that things are better elsewhere. let's see what it says. + state=$(check_branch_state "$this_branch") + echo "=> branch '$this_branch' state is: $state" # this code is now doing what i have to do when i repair the repo. and it seems to be good so far. local branch_list=$(all_branch_names) @@ -300,6 +301,10 @@ function do_careful_git_update() # echo "synchronizing remote branch: $bran" git checkout "$bran" test_or_die "git switching checkout to remote branch: $bran" + + state=$(check_branch_state "$bran") + echo "=> branch '$bran' state is: $state" + 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. @@ -315,6 +320,8 @@ function do_careful_git_update() # with any changes from others. git pull --no-ff --all test_or_die "git pulling all upstream" + + popd &>/dev/null } # gets the latest versions of the assets from the upstream repository. -- 2.34.1