mirror of
https://github.com/oh-my-fish/oh-my-fish
synced 2024-11-03 15:40:32 +00:00
Merge pull request #206 from rominf/bak
This commit is contained in:
commit
7ef70b74f1
@ -1,22 +1,62 @@
|
||||
function __bak_name
|
||||
# trim / for directories
|
||||
set arg (echo $argv[1] | sed 's/\/$//')
|
||||
echo "$arg.(date +"%Y%m%d_%H%M%S").bak"
|
||||
end
|
||||
|
||||
function __bak_help
|
||||
echo -e \
|
||||
"Usage:
|
||||
$argv[1]bak SOURCE..."
|
||||
$argv[1] SOURCE..."
|
||||
end
|
||||
|
||||
function __bak
|
||||
set program $argv[1]
|
||||
if [ (count $argv) -gt 1 ]
|
||||
for arg in $argv[2..-1]
|
||||
eval $program $arg (__bak_name $arg)
|
||||
end
|
||||
else
|
||||
function __bak_parse_help
|
||||
function has_help_arg
|
||||
# non implemented
|
||||
end
|
||||
|
||||
if [ (count $argv) -lt 3 ]; or has_help_arg $argv
|
||||
__bak_help $argv[1]
|
||||
end
|
||||
end
|
||||
|
||||
function __bak_name
|
||||
# trim / for directories
|
||||
set file (echo $argv[1] | sed 's/\/*$//')
|
||||
echo "$file."(date +'%Y%m%d_%H%M%S')".bak"
|
||||
end
|
||||
|
||||
function __bak
|
||||
__bak_parse_help $argv
|
||||
or begin
|
||||
set program $argv[2]
|
||||
for file in $argv[3..-1]
|
||||
eval $program $file (__bak_name $file)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
set -g __bak_re '(.*)\.[0-9]{8,8}_[0-9]{6,6}\.bak\/*$'
|
||||
|
||||
function __is_bak
|
||||
set file $argv[1]
|
||||
echo "$file" | grep -Eq $__bak_re
|
||||
end
|
||||
|
||||
function __bak_normalized
|
||||
set file $argv[1]
|
||||
echo "$file" | sed -E "s/$__bak_re/\1/g"
|
||||
end
|
||||
|
||||
function __unbak
|
||||
__bak_parse_help $argv
|
||||
or begin
|
||||
set program $argv[2]
|
||||
for file in $argv[3..-1]
|
||||
set normalized (__bak_normalized $file)
|
||||
if test ! -e $file
|
||||
echo "File \"$file\" not exists! Cannot unbak \"$file\"."
|
||||
else if not __is_bak $file
|
||||
echo "File \"$file\" don't meet bak files convention! Cannot unbak \"$file\"."
|
||||
else if test -e $normalized
|
||||
echo "File \"$normalized\" exists! Cannot unbak \"$file\"."
|
||||
else
|
||||
eval $program $file $normalized
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Function to copy files and directories (a.txt copy to a.txt.20140608_195859.bak)
|
||||
# (c) Roman Inflianskas (rominf) <infroma@gmail.com>, 2014
|
||||
|
||||
function cpbak
|
||||
__bak 'cp -a' $argv
|
||||
function cpbak --description 'Copy files to make a backup copies'
|
||||
__bak cpbak 'cp -a' $argv
|
||||
end
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Function to rename files and directories (a.txt rename to a.txt.20140608_195859.bak)
|
||||
# (c) Roman Inflianskas (rominf) <infroma@gmail.com>, 2014
|
||||
|
||||
function mvbak
|
||||
__bak mv $argv
|
||||
function mvbak --description 'Rename files to make a backup copies'
|
||||
__bak mvbak mv $argv
|
||||
end
|
||||
|
8
plugins/bak/tests/helper.fish
Normal file
8
plugins/bak/tests/helper.fish
Normal file
@ -0,0 +1,8 @@
|
||||
set -l fish_tank /usr/local/share/fish-tank/tank.fish
|
||||
if not test -e $fish_tank
|
||||
echo 'error: fish-tank is required to run these tests (https://github.com/terlar/fish-tank)'
|
||||
exit 1
|
||||
end
|
||||
|
||||
source $fish_tank
|
||||
source (dirname (status -f))/../*.fish
|
108
plugins/bak/tests/test_bak.fish
Executable file
108
plugins/bak/tests/test_bak.fish
Executable file
@ -0,0 +1,108 @@
|
||||
function suite_bak
|
||||
function setup
|
||||
return 0
|
||||
end
|
||||
|
||||
function teardown
|
||||
rm -rf $test_dir/*
|
||||
end
|
||||
|
||||
function test_is_bak
|
||||
assert (__is_bak '.ccnet.20140817_234302.bak')
|
||||
assert (__is_bak 'file with spaces.20140817_234302.bak')
|
||||
assert (not __is_bak '.ccnet.bak')
|
||||
end
|
||||
|
||||
function test_normalized
|
||||
assert_equal '.ccnet' (__bak_normalized '.ccnet.20140817_234302.bak')
|
||||
assert_equal 'file with spaces' (__bak_normalized 'file with spaces.20140817_234302.bak')
|
||||
end
|
||||
|
||||
function test_mv_single
|
||||
touch a
|
||||
mvbak a
|
||||
assert __is_bak (ls)
|
||||
end
|
||||
|
||||
function test_mv_multiple
|
||||
touch a b
|
||||
mvbak a b
|
||||
for f in (ls)
|
||||
assert __is_bak $f
|
||||
end
|
||||
end
|
||||
|
||||
function test_unmv_single
|
||||
touch a
|
||||
mvbak a
|
||||
unmvbak (ls)
|
||||
assert_equal a (ls)
|
||||
end
|
||||
|
||||
function test_unmv_multiple
|
||||
set files (seq 4)
|
||||
touch $files
|
||||
mvbak $files
|
||||
unmvbak (ls)
|
||||
assert_equal "$files" (ls)
|
||||
end
|
||||
|
||||
function test_cp_single
|
||||
touch a
|
||||
cpbak a
|
||||
assert_equal (echo -e 'a' (__bak_name a) | sort) (ls | sort)
|
||||
end
|
||||
|
||||
function test_cp_multiple
|
||||
set files (seq 4)
|
||||
touch $files
|
||||
cpbak $files
|
||||
for f in $files
|
||||
set files_bak "$files_bak\n"(__bak_name $f)
|
||||
end
|
||||
set expected (begin; echo $files | sed 's/ /\n/g'; echo -e $files_bak; end | sort | grep -v '^$')
|
||||
assert_equal "$expected" (ls | sort)
|
||||
end
|
||||
|
||||
function test_uncp_single
|
||||
touch a
|
||||
cpbak a
|
||||
rm a
|
||||
uncpbak (ls)
|
||||
assert_equal (echo -e 'a' (__bak_name a) | sort) (ls | sort)
|
||||
end
|
||||
|
||||
function test_uncp_dir_single
|
||||
mkdir a
|
||||
cpbak a/
|
||||
rmdir a
|
||||
uncpbak (ls -p)
|
||||
assert_equal (echo -e 'a/' (__bak_name a)'/' | sort) (ls -p | sort)
|
||||
end
|
||||
|
||||
function test_cp_multiple
|
||||
set files (seq 4)
|
||||
touch $files
|
||||
cpbak $files
|
||||
rm $files
|
||||
uncpbak (ls)
|
||||
for f in $files
|
||||
set files_bak "$files_bak\n"(__bak_name $f)
|
||||
end
|
||||
set expected (begin; echo $files | sed 's/ /\n/g'; echo -e $files_bak; end | sort | grep -v '^$')
|
||||
end
|
||||
end
|
||||
|
||||
if not set -q tank_running
|
||||
source (dirname (status -f))/helper.fish
|
||||
|
||||
set -g test_dir /tmp/bak_test
|
||||
mkdir -p $test_dir
|
||||
pushd
|
||||
cd $test_dir
|
||||
|
||||
tank_run
|
||||
|
||||
popd
|
||||
set -e test_dir
|
||||
end
|
6
plugins/bak/uncpbak.fish
Normal file
6
plugins/bak/uncpbak.fish
Normal file
@ -0,0 +1,6 @@
|
||||
# Function to copy files and directories (a.txt.20140608_195859.bak copy to a.txt)
|
||||
# (c) Roman Inflianskas (rominf) <infroma@gmail.com>, 2014
|
||||
|
||||
function uncpbak --description 'Copy files to revert a backup copies to a normal files'
|
||||
__unbak uncpbak 'cp -a' $argv
|
||||
end
|
6
plugins/bak/unmvbak.fish
Normal file
6
plugins/bak/unmvbak.fish
Normal file
@ -0,0 +1,6 @@
|
||||
# Function to move files and directories (a.txt.20140608_195859.bak move to a.txt)
|
||||
# (c) Roman Inflianskas (rominf) <infroma@gmail.com>, 2014
|
||||
|
||||
function unmvbak --description 'Move files to revert a backup copies to a normal files'
|
||||
__unbak unmvbak mv $argv
|
||||
end
|
Loading…
Reference in New Issue
Block a user