Commit 2c2f91c92d42beda4c872eb839b60ab9f02b6230
1 parent
d36c6f93d8
Added `antigen-restore` command.
This command is used to restore from a snapshot file provided as an argument. The snapshot file can be generated by the `antigen-snapshot` command.
Showing 2 changed files with 55 additions and 5 deletions Side-by-side Diff
antigen.zsh
... | ... | @@ -358,9 +358,9 @@ antigen-snapshot () { |
358 | 358 | # <version-hash> <repo-url> |
359 | 359 | local snapshot_content="$(-antigen-echo-record | sed 's/ .*$//' | sort -u | |
360 | 360 | while read url; do |
361 | - dir="$(-antigen-get-clone-dir "$url")" | |
362 | - version_hash="$(cd "$dir" && git rev-parse HEAD)" | |
363 | - echo "$version_hash $dir" | |
361 | + local dir="$(-antigen-get-clone-dir "$url")" | |
362 | + local version_hash="$(cd "$dir" && git rev-parse HEAD)" | |
363 | + echo "$version_hash $url" | |
364 | 364 | done)" |
365 | 365 | |
366 | 366 | { |
... | ... | @@ -386,6 +386,40 @@ antigen-snapshot () { |
386 | 386 | |
387 | 387 | } |
388 | 388 | |
389 | +antigen-restore () { | |
390 | + | |
391 | + if [[ $# == 0 ]]; then | |
392 | + echo 'Please provide a snapshot file to restore from.' >&2 | |
393 | + return 1 | |
394 | + fi | |
395 | + | |
396 | + local snapshot_file="$1" | |
397 | + | |
398 | + # TODO: Before doing anything with the snapshot file, verify its checksum. | |
399 | + # If it fails, notify this to the user and confirm if restore should | |
400 | + # proceed. | |
401 | + | |
402 | + echo -n "Restoring from $snapshot_file..." | |
403 | + | |
404 | + sed -n '1!p' "$snapshot_file" | | |
405 | + while read line; do | |
406 | + | |
407 | + local version_hash="${line%% *}" | |
408 | + local url="${line##* }" | |
409 | + local clone_dir="$(-antigen-get-clone-dir "$url")" | |
410 | + | |
411 | + if [[ ! -d $clone_dir ]]; then | |
412 | + git clone "$url" "$clone_dir" > /dev/null | |
413 | + fi | |
414 | + | |
415 | + (cd "$clone_dir" && git checkout $version_hash) 2> /dev/null | |
416 | + | |
417 | + done | |
418 | + | |
419 | + echo ' done.' | |
420 | + echo 'Please open a new shell to get the restored changes.' | |
421 | +} | |
422 | + | |
389 | 423 | antigen-help () { |
390 | 424 | cat <<EOF |
391 | 425 | Antigen is a plugin management system for zsh. It makes it easy to grab awesome |
tests/snapshots.t
... | ... | @@ -18,5 +18,21 @@ See the contents of the snapshot file. |
18 | 18 | |
19 | 19 | $ cat snapshot-file |
20 | 20 | version='1'; created_on='*'; checksum='*'; (glob) |
21 | - .{40} .*-test-plugin (re) | |
22 | - .{40} .*-test-plugin2 (re) | |
21 | + .{40} .*/test-plugin (re) | |
22 | + .{40} .*/test-plugin2 (re) | |
23 | + | |
24 | +Reset the antigen's bundle record and run cleanup. | |
25 | + | |
26 | + $ unset _ANTIGEN_BUNDLE_RECORD | |
27 | + $ antigen-cleanup --force | grep '^Deleting' | wc -l | |
28 | + 2 | |
29 | + | |
30 | +Restore from the snapshot. | |
31 | + | |
32 | + $ ls dot-antigen/repos | wc -l | |
33 | + 0 | |
34 | + $ antigen-restore snapshot-file | |
35 | + Restoring from snapshot-file... done. | |
36 | + Please open a new shell to get the restored changes. | |
37 | + $ ls dot-antigen/repos | wc -l | |
38 | + 2 |