aboutsummaryrefslogtreecommitdiffstats
path: root/hm/soispha/conf/lf/commands/scripts/cow_cp
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2024-02-20 16:35:15 +0100
committerSoispha <soispha@vhack.eu>2024-02-20 16:35:15 +0100
commitcc09b607330385d6d81b9c47cf64a2442432e93f (patch)
treedc7e4503a3341b8936576c6339a70df4adaa2512 /hm/soispha/conf/lf/commands/scripts/cow_cp
parentrefactor(hm/conf/zsh/config): Rework old config scripts (diff)
downloadnixos-config-cc09b607330385d6d81b9c47cf64a2442432e93f.zip
refactor(treewide): Add a `.sh` extension to shell scripts
Diffstat (limited to 'hm/soispha/conf/lf/commands/scripts/cow_cp')
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/cow_cp96
1 files changed, 0 insertions, 96 deletions
diff --git a/hm/soispha/conf/lf/commands/scripts/cow_cp b/hm/soispha/conf/lf/commands/scripts/cow_cp
deleted file mode 100755
index 85fd3431..00000000
--- a/hm/soispha/conf/lf/commands/scripts/cow_cp
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/env dash
-
-# shellcheck source=/dev/null
-SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH
-
-# source: https://github.com/gokcehan/lf/wiki/Tips#use-copy-on-write-when-possible
-#
-# # FIXME: Add this. The hardest part is in checking, if a file can be reflinked, as fuse and bind mount are hard to
-# backtrack <2023-08-29>
-
-# # This was very helpful for debugging:
-# log_file="$HOME/lf-reflink-log-$(date +'%Y-%m-%d_%H-%M-%S')"
-# [ -f "$log_file" ] || touch "$log_file"
-# exec 1>> $log_file 2>&1
-# set -x
-
-# In theory, this may fail,
-# but I tested it on selection with 10k files - everything worked (bash)
-# FIXME: This will very likely fail on dash, when the file number > 255 <2023-08-29>
-set -- "$(cat ~/.local/share/lf/files)"
-
-mode="$1"
-shift
-
-if [ "$mode" = 'copy' ]; then
- # Reflink if all items of selection and the destination are on the
- # same mount point and it is CoW fs.
- # (to make sure reflink never fails in first place, so we don't have to
- # clean up)
-
- src_targets="$(df --output=target -- "$@" | sed '1d' | sort -u)"
-
- if [ "$(df --output=target -- "$PWD" | tail -n 1)" = \
- "$(echo "$src_targets" | tail -n 1)" ] && \
- (( "$(echo "$src_targets" | wc -l)" == 1 )) && \
- [[ "$(df --output=fstype -- "$PWD" | tail -n 1)" =~ ^(btrfs|xfs|zfs)$ ]]; then
-
- echo 'selected copy and cp reflink paste'
-
- start=$(date '+%s')
-
- # Handle same names in dst
- # TODO parallelism, idk - but exit/return/break won't stop the loop from subshell...
- for i in "$@"; do
- name="${i##*/}"
- original="$name"
-
- count=0
- while [ -w "$PWD/$name" ]; do
- count=$((count+1))
- name="$original.~$count~"
- done
-
- set +e
- cp_out="$(cp -rn --reflink=always -- "$i" "$PWD/$name" 2>&1)"
- set -e
-
- if [ ! -z "$cp_out" ]; then
- lf -remote "send $id echoerr $cp_out"
- exit 0
- fi
- done
-
- finish=$(( $(date '+%s') - $start ))
- t=''
- if (( $finish > 2 )); then
- t="${finish}s"
- fi
-
- # Or just skip a file when names are the same.
- # (A LOT faster if you e.g. pasting selection of 10k files)
- # cp -rn --reflink=always -- "$@" .
-
- lf -remote "send clear"
-
- green=$'\u001b[32m'
- reset=$'\u001b[0m'
- lf -remote "send $id echo ${green}reflinked!${reset} $t"
- else
- echo 'selected copy and lf native paste'
- lf -remote "send $id paste"
- lf -remote "send clear"
- fi
-
- elif [ $mode = 'move' ]; then
- echo 'selected move and lf native paste'
- lf -remote "send $id paste"
- lf -remote "send clear"
- fi
-
-# # for debug
-# set +x
-
-lf -remote "send load"
-
-# vim: ft=sh