Commit d43f31a79306c2a5a333981f96882c7e24e871f3

Authored by Shrikant Sharat
1 parent f76ba3b6c2

Initial implementation of antigen-revert command.

Use this command to revert an `antigen-update`.

Showing 2 changed files with 83 additions and 0 deletions Side-by-side Diff

... ... @@ -97,16 +97,38 @@ antigen-bundles () {
97 97  
98 98 antigen-update () {
99 99 # Update your bundles, i.e., `git pull` in all the plugin repos.
  100 +
  101 + date > $ADOTDIR/revert-info
  102 +
100 103 -antigen-echo-record |
101 104 awk '{print $1}' |
102 105 sort -u |
103 106 while read url; do
104 107 echo "**** Pulling $url"
  108 + (dir="$(-antigen-get-clone-dir "$url")"
  109 + echo -n "$dir:"
  110 + cd "$dir"
  111 + git rev-parse HEAD) >> $ADOTDIR/revert-info
105 112 -antigen-ensure-repo "$url" --update --verbose
106 113 echo
107 114 done
108 115 }
109 116  
  117 +antigen-revert () {
  118 + if ! [[ -f $ADOTDIR/revert-info ]]; then
  119 + echo 'No revert information available. Cannot revert.' >&2
  120 + fi
  121 +
  122 + cat $ADOTDIR/revert-info | sed '1!p' | while read line; do
  123 + dir="$(echo "$line" | cut -d: -f1)"
  124 + git --git-dir="$dir/.git" --work-tree="$dir" \
  125 + checkout "$(echo "$line" | cut -d: -f2)" 2> /dev/null
  126 + done
  127 +
  128 + echo "Reverted to state before running -update on $(
  129 + cat $ADOTDIR/revert-info | sed -n 1p)."
  130 +}
  131 +
110 132 -antigen-get-clone-dir () {
111 133 # Takes a repo url and gives out the path that this url needs to be cloned
112 134 # to. Doesn't actually clone anything.
tests/revert-update.t
... ... @@ -0,0 +1,61 @@
  1 +Load and test plugin.
  2 +
  3 + $ antigen-bundle $PLUGIN_DIR
  4 + Cloning into '.+?'\.\.\. (re)
  5 + done.
  6 + $ hehe
  7 + hehe
  8 +
  9 +Save the current HEAD of the plugin.
  10 +
  11 + $ old_version="$(pg rev-parse HEAD)"
  12 +
  13 +Modify the plugin.
  14 +
  15 + $ cat > $PLUGIN_DIR/aliases.zsh <<EOF
  16 + > alias hehe='echo hehe, updated'
  17 + > EOF
  18 + $ pg commit -am 'Updated message'
  19 + \[master [a-f0-9]{7}\] Updated message (re)
  20 + 1 file changed, 1 insertion(+), 1 deletion(-)
  21 +
  22 +Save the new HEAD of the plugin.
  23 +
  24 + $ new_version="$(pg rev-parse HEAD)"
  25 +
  26 +Define a convenience function to get the current version.
  27 +
  28 + $ current-version () {(cd dot-antigen/repos/* && git rev-parse HEAD)}
  29 +
  30 +Confirm we currently have the old version.
  31 +
  32 + $ [[ $(current-version) == $old_version ]]
  33 +
  34 +Run antigen's update.
  35 +
  36 + $ antigen-update
  37 + **** Pulling */test-plugin (glob)
  38 + From */test-plugin (glob)
  39 + ???????..??????? master -> origin/master (glob)
  40 + Updating ???????..??????? (glob)
  41 + Fast-forward
  42 + aliases.zsh | 2 +-
  43 + 1 file changed, 1 insertion(+), 1 deletion(-)
  44 + Updated from ??????? to ???????. (glob)
  45 + ??????? Updated message (glob)
  46 + aliases.zsh | 2 +-
  47 + 1 file changed, 1 insertion(+), 1 deletion(-)
  48 +
  49 +
  50 +Confirm we have the new version.
  51 +
  52 + $ [[ $(current-version) == $new_version ]]
  53 +
  54 +Run update again, with no changes in the origin repo.
  55 +
  56 + $ antigen-revert
  57 + Reverted to state before running -update on *. (glob)
  58 +
  59 +Confirm we have the old version again.
  60 +
  61 + $ [[ $(current-version) == $old_version ]]