Initial Commit.
This commit is contained in:
parent
b973b346ad
commit
4c30d7374a
|
|
@ -0,0 +1,681 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
: <<TODO
|
||||
TODO
|
||||
|
||||
DEST=${1:-/etc/skel/}
|
||||
|
||||
YAZI_HOME="${DEST}/.config/yazi"
|
||||
YAZI_PLUGIN_HOME="${YAZI_HOME}/plugins"
|
||||
NICOTINE_PLUGIN_HOME="${YAZI_PLUGIN_HOME}/nicotine.yazi"
|
||||
|
||||
mkdir -p "${NICOTINE_PLUGIN_HOME}"
|
||||
|
||||
conf_print_nicotine_main() {
|
||||
cat <<'EOF'
|
||||
local DEBUG_MODE = true
|
||||
|
||||
local function log(message)
|
||||
if DEBUG_MODE then
|
||||
ya.err(string.format("[Nicotine Debug] %s", message))
|
||||
end
|
||||
end
|
||||
|
||||
-- 1. Grab current state (Sync to access cx)
|
||||
local setup = ya.sync(function()
|
||||
local targets = {}
|
||||
local selected = cx.active.selected
|
||||
if #selected == 0 then
|
||||
local hovered = cx.active.current.hovered
|
||||
if hovered then
|
||||
table.insert(targets, tostring(hovered.url))
|
||||
end
|
||||
else
|
||||
for _, item in pairs(selected) do
|
||||
table.insert(targets, tostring(item.url))
|
||||
end
|
||||
end
|
||||
return {
|
||||
targets = targets,
|
||||
cwd = tostring(cx.active.current.cwd)
|
||||
}
|
||||
end)
|
||||
|
||||
return {
|
||||
entry = function(self, args)
|
||||
log("Plugin started")
|
||||
|
||||
local state = setup()
|
||||
local targets = state.targets
|
||||
local cwd = state.cwd
|
||||
|
||||
if #targets == 0 then
|
||||
return ya.notify({ title = "Nicotine", content = "No files selected", level = "warn" })
|
||||
end
|
||||
|
||||
local is_archive = args[1] == "--archive"
|
||||
|
||||
-- Create a unique temp container
|
||||
local tmp_container = string.format("%s/yazi-nicotine-%d", os.getenv("TMPDIR") or "/tmp", math.random(100000, 999999))
|
||||
|
||||
local status = Command("mkdir"):arg("-p"):arg(tmp_container):spawn():wait()
|
||||
if not status or not status.success then
|
||||
return ya.notify({ title = "Nicotine", content = "Failed to create temp dir", level = "error" })
|
||||
end
|
||||
|
||||
ya.notify({
|
||||
title = "Nicotine",
|
||||
content = is_archive and "Creating archive..." or "Generating Git history...",
|
||||
timeout = 2
|
||||
})
|
||||
|
||||
-- Build Nicotine Command
|
||||
-- Note: using --single-repo as seen in your test script to ensure one combined git
|
||||
local cmd = Command("nicotine")
|
||||
cmd:arg("--output-dir"):arg(tmp_container)
|
||||
cmd:arg("--single-repo")
|
||||
|
||||
if not is_archive then
|
||||
cmd:arg("--no-archive")
|
||||
end
|
||||
|
||||
for _, path in ipairs(targets) do
|
||||
cmd:arg(path)
|
||||
end
|
||||
|
||||
local nicotine_status = cmd:spawn():wait()
|
||||
|
||||
if not nicotine_status or not nicotine_status.success then
|
||||
Command("rm"):arg("-rf"):arg(tmp_container):spawn():wait()
|
||||
return ya.notify({ title = "Nicotine Error", content = "Nicotine execution failed.", level = "error" })
|
||||
end
|
||||
|
||||
-- Path fix: nicotine creates a sub-directory
|
||||
local repo_path = tmp_container .. "/nicotine-combined-git"
|
||||
|
||||
if is_archive then
|
||||
local archive_src = tmp_container .. "/nicotine-combined-git.tar.gz"
|
||||
local status = Command("cp")
|
||||
:arg(archive_src)
|
||||
:arg(cwd)
|
||||
:spawn()
|
||||
:wait()
|
||||
if not status or not status.success then
|
||||
ya.notify({ title = "Nicotine", content = "Failed to copy archive", level = "error" })
|
||||
return
|
||||
end
|
||||
ya.notify({ title = "Nicotine", content = "Archive copied to current directory", timeout = 3 })
|
||||
else
|
||||
-- Git/Lazygit Section
|
||||
local permit = ui.hide()
|
||||
local child_status = Command("lazygit")
|
||||
:cwd(repo_path) -- Enter the actual git directory
|
||||
:stdin(Command.INHERIT)
|
||||
:stdout(Command.INHERIT)
|
||||
:stderr(Command.INHERIT)
|
||||
:spawn()
|
||||
:wait()
|
||||
permit:drop()
|
||||
end
|
||||
|
||||
-- Cleanup container
|
||||
Command("rm"):arg("-rf"):arg(tmp_container):spawn():wait()
|
||||
|
||||
if not is_archive then
|
||||
ya.notify({ title = "Nicotine", content = "Session complete.", timeout = 2 })
|
||||
end
|
||||
end
|
||||
}
|
||||
EOF
|
||||
}
|
||||
conf_print_nicotine_main | tee "${NICOTINE_PLUGIN_HOME}/main.lua"
|
||||
|
||||
conf_print_nicotine_main() {
|
||||
cat <<EOF
|
||||
local DEBUG_MODE = true
|
||||
|
||||
local function log(message)
|
||||
if DEBUG_MODE then
|
||||
-- ya.err writes to the yazi log file/stderr
|
||||
ya.err(string.format("[Nicotine Debug] %s", message))
|
||||
end
|
||||
end
|
||||
|
||||
-- 1. Grab current state
|
||||
local setup = ya.sync(function()
|
||||
local targets = {}
|
||||
local selected = cx.active.selected
|
||||
if #selected == 0 then
|
||||
local hovered = cx.active.current.hovered
|
||||
if hovered then
|
||||
table.insert(targets, tostring(hovered.url))
|
||||
end
|
||||
else
|
||||
for _, item in pairs(selected) do
|
||||
table.insert(targets, tostring(item.url))
|
||||
end
|
||||
end
|
||||
return {
|
||||
targets = targets,
|
||||
cwd = tostring(cx.active.current.cwd)
|
||||
}
|
||||
end)
|
||||
|
||||
return {
|
||||
entry = function(self, args)
|
||||
log("Plugin started")
|
||||
|
||||
local state = setup()
|
||||
local targets = state.targets
|
||||
local cwd = state.cwd
|
||||
|
||||
if #targets == 0 then
|
||||
log("No targets found.")
|
||||
return ya.notify({ title = "Nicotine", content = "No files selected", level = "warn" })
|
||||
end
|
||||
|
||||
local is_archive = args[1] == "--archive"
|
||||
|
||||
-- Generate a safer unique temp directory
|
||||
local tmp_dir = string.format("%s/yazi-nicotine-%d", os.getenv("TMPDIR") or "/tmp", math.random(100000, 999999))
|
||||
|
||||
local status = Command("mkdir"):arg("-p"):arg(tmp_dir):spawn():wait()
|
||||
if not status or not status.success then
|
||||
return ya.notify({ title = "Nicotine", content = "Failed to create temp dir", level = "error" })
|
||||
end
|
||||
|
||||
ya.notify({
|
||||
title = "Nicotine",
|
||||
content = is_archive and "Creating archive..." or "Generating Git history...",
|
||||
timeout = 2
|
||||
})
|
||||
|
||||
-- Build Nicotine Command
|
||||
local cmd = Command("nicotine")
|
||||
cmd:arg("--output-dir"):arg(tmp_dir)
|
||||
|
||||
if not is_archive then
|
||||
cmd:arg("--no-archive")
|
||||
end
|
||||
|
||||
for _, path in ipairs(targets) do
|
||||
cmd:arg(path)
|
||||
end
|
||||
|
||||
local nicotine_status = cmd:spawn():wait()
|
||||
|
||||
if not nicotine_status or not nicotine_status.success then
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
return ya.notify({ title = "Nicotine Error", content = "Nicotine execution failed.", level = "error" })
|
||||
end
|
||||
|
||||
if is_archive then
|
||||
-- Use 'cp -a' to preserve attributes if possible
|
||||
Command("cp"):arg("-r"):arg(tmp_dir):arg(cwd):spawn():wait()
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
return ya.notify({ title = "Nicotine", content = "Archive saved to current directory.", timeout = 3 })
|
||||
end
|
||||
|
||||
-- Git/Lazygit Section
|
||||
local permit = ui.hide()
|
||||
local child_status = Command("lazygit")
|
||||
:cwd(tmp_dir)
|
||||
:stdin(Command.INHERIT)
|
||||
:stdout(Command.INHERIT)
|
||||
:stderr(Command.INHERIT)
|
||||
:spawn()
|
||||
:wait()
|
||||
|
||||
permit:drop()
|
||||
|
||||
-- Cleanup
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
|
||||
if child_status and child_status.success then
|
||||
ya.notify({ title = "Nicotine", content = "Session complete.", timeout = 2 })
|
||||
end
|
||||
end
|
||||
}
|
||||
EOF
|
||||
}
|
||||
# conf_print_nicotine_main | tee "${NICOTINE_PLUGIN_HOME}/main.lua"
|
||||
|
||||
conf_print_nicotine_main() {
|
||||
cat <<'EOF'
|
||||
-- 1. Use sync only to grab the current state (selected files, CWD, etc.)
|
||||
local setup = ya.sync(function(self)
|
||||
local targets = {}
|
||||
local selected = cx.active.selected
|
||||
if #selected == 0 then
|
||||
local hovered = cx.active.current.hovered
|
||||
if hovered then
|
||||
table.insert(targets, tostring(hovered.url))
|
||||
end
|
||||
else
|
||||
for _, item in pairs(selected) do
|
||||
table.insert(targets, tostring(item.url))
|
||||
end
|
||||
end
|
||||
return {
|
||||
targets = targets,
|
||||
cwd = tostring(cx.active.current.cwd)
|
||||
}
|
||||
end) -- Removed the trailing comma here
|
||||
|
||||
return {
|
||||
entry = function(self, args)
|
||||
-- Call our sync setup to get the data
|
||||
-- Note: we call 'setup' (the local variable), not 'self:setup'
|
||||
local state = setup()
|
||||
local targets = state.targets
|
||||
local cwd = state.cwd
|
||||
|
||||
if #targets == 0 then
|
||||
return ya.notify({ title = "Nicotine", content = "No files selected", level = "warn" })
|
||||
end
|
||||
|
||||
-- 2. Logic and Command execution happens here (Async context)
|
||||
local is_archive = args[1] == "--archive"
|
||||
local tmp_base = os.getenv("TMPDIR") or "/tmp"
|
||||
local tmp_dir = string.format("%s/yazi-nicotine-%.0f-%d", tmp_base, os.clock() * 1000, math.random(1000, 9999))
|
||||
|
||||
local mkdir_status = Command("mkdir"):arg("-p"):arg(tmp_dir):spawn():wait()
|
||||
if not mkdir_status or not mkdir_status.success then
|
||||
return ya.notify({ title = "Nicotine", content = "Failed to create temp directory", level = "error" })
|
||||
end
|
||||
|
||||
ya.notify({ title = "Nicotine", content = is_archive and "Creating compressed archive..." or "Generating Git history...", timeout = 2 })
|
||||
|
||||
local cmd = Command("nicotine")
|
||||
cmd:arg("--output-dir"):arg(tmp_dir)
|
||||
|
||||
if not is_archive then
|
||||
cmd:arg("--no-archive")
|
||||
end
|
||||
|
||||
for _, path in ipairs(targets) do
|
||||
cmd:arg(path)
|
||||
end
|
||||
|
||||
local nicotine_status = cmd:stderr(Command.PIPED):spawn():wait()
|
||||
|
||||
if not nicotine_status or not nicotine_status.success then
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
return ya.notify({ title = "Nicotine Error", content = "Nicotine failed.", level = "error" })
|
||||
end
|
||||
|
||||
if is_archive then
|
||||
-- Moving contents instead of just copying the folder into the CWD
|
||||
Command("cp"):arg("-r"):arg(tmp_dir):arg(cwd):spawn():wait()
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
return ya.notify({ title = "Nicotine", content = "Archive saved.", timeout = 3 })
|
||||
end
|
||||
|
||||
-- Git/Lazygit Section
|
||||
local permit = ui.hide()
|
||||
local child, err = Command("lazygit")
|
||||
:cwd(tmp_dir)
|
||||
:stdin(Command.INHERIT)
|
||||
:stdout(Command.INHERIT)
|
||||
:stderr(Command.INHERIT)
|
||||
:spawn()
|
||||
|
||||
if not child then
|
||||
permit:drop()
|
||||
return ya.notify({ title = "Nicotine", content = "Failed: " .. tostring(err), level = "error" })
|
||||
end
|
||||
|
||||
child:wait()
|
||||
permit:drop()
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
ya.notify({ title = "Nicotine", content = "Session ended.", timeout = 3 })
|
||||
end
|
||||
}
|
||||
EOF
|
||||
}
|
||||
# conf_print_nicotine_main | tee "${NICOTINE_PLUGIN_HOME}/main.lua"
|
||||
|
||||
conf_print_nicotine_main() {
|
||||
cat <<EOF
|
||||
return {
|
||||
--- @sync entry
|
||||
entry = ya.sync(function(self, args)
|
||||
local targets = {}
|
||||
local selected = cx.active.selected
|
||||
if #selected == 0 then
|
||||
table.insert(targets, tostring(cx.active.current.hovered.url))
|
||||
else
|
||||
for _, item in pairs(selected) do
|
||||
table.insert(targets, tostring(item.url))
|
||||
end
|
||||
end
|
||||
|
||||
-- Check if we want an archive or a live session
|
||||
local is_archive = args[1] == "--archive"
|
||||
|
||||
local tmp_base = os.getenv("TMPDIR") or "/tmp"
|
||||
local tmp_dir = string.format("%s/yazi-nicotine-%d-%d", tmp_base, os.clock() * 1000, math.random(1000, 9999))
|
||||
|
||||
local mkdir_status = Command("mkdir"):arg("-p"):arg(tmp_dir):spawn():wait()
|
||||
if not mkdir_status or not mkdir_status.success then
|
||||
return ya.notify({ title = "Nicotine", content = "Failed to create temp directory", level = "error" })
|
||||
end
|
||||
|
||||
ya.notify({ title = "Nicotine", content = is_archive and "Creating compressed archive..." or "Generating Git history...", timeout = 2 })
|
||||
|
||||
local cmd = Command("nicotine")
|
||||
:arg("--output-dir"):arg(tmp_dir)
|
||||
|
||||
-- If NOT an archive, we pass --no-archive to keep the raw git repo for lazygit
|
||||
if not is_archive then
|
||||
cmd:arg("--no-archive")
|
||||
end
|
||||
|
||||
for _, path in ipairs(targets) do
|
||||
cmd:arg(path)
|
||||
end
|
||||
|
||||
local nicotine_status = cmd:stderr(Command.PIPED):spawn():wait()
|
||||
|
||||
if not nicotine_status or not nicotine_status.success then
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
return ya.notify({
|
||||
title = "Nicotine Error",
|
||||
content = "Nicotine failed to process the selection.",
|
||||
level = "error"
|
||||
})
|
||||
end
|
||||
|
||||
-- Handle Archive Mode
|
||||
if is_archive then
|
||||
-- In archive mode, nicotine usually generates a .tar.gz or .zip inside the output dir
|
||||
-- We move it to the current directory for the user
|
||||
local dest = tostring(cx.active.current.cwd)
|
||||
Command("cp"):arg("-r"):arg(tmp_dir):arg(dest):spawn():wait()
|
||||
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
return ya.notify({ title = "Nicotine", content = "Archive saved to current directory.", timeout = 3 })
|
||||
end
|
||||
|
||||
-- Handle Git History Mode (lazygit)
|
||||
local git_check = Command("git")
|
||||
:arg("-C"):arg(tmp_dir)
|
||||
:arg("rev-parse"):arg("--is-inside-work-tree")
|
||||
:stdout(Command.PIPED)
|
||||
:spawn()
|
||||
:wait()
|
||||
|
||||
if not git_check or not git_check.success then
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
return ya.notify({
|
||||
title = "Nicotine Error",
|
||||
content = "Generated directory is not a valid Git repository.",
|
||||
level = "error"
|
||||
})
|
||||
end
|
||||
|
||||
local permit = ui.hide()
|
||||
local child, err = Command("lazygit")
|
||||
:cwd(tmp_dir)
|
||||
:stdin(Command.INHERIT)
|
||||
:stdout(Command.INHERIT)
|
||||
:stderr(Command.PIPED)
|
||||
:spawn()
|
||||
|
||||
if not child then
|
||||
permit:drop()
|
||||
return ya.notify({ title = "Nicotine", content = "Failed to spawn lazygit: " .. tostring(err), level = "error" })
|
||||
end
|
||||
|
||||
child:wait()
|
||||
permit:drop()
|
||||
Command("rm"):arg("-rf"):arg(tmp_dir):spawn():wait()
|
||||
|
||||
ya.notify({ title = "Nicotine", content = "Session ended. Temp files cleared.", timeout = 3 })
|
||||
end)
|
||||
}
|
||||
EOF
|
||||
}
|
||||
# conf_print_nicotine_main | tee "${NICOTINE_PLUGIN_HOME}/main.lua"
|
||||
|
||||
#----------------------------------------------------------------
|
||||
|
||||
conf_print_httm_keymap() {
|
||||
cat <<'EOF'
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "g", "n" ]
|
||||
run = "plugin nicotine"
|
||||
desc = "Run Nicotine Git snapshot history (lazygit)"
|
||||
|
||||
[[mgr.prepend_keymap]]
|
||||
on = [ "g", "z" ]
|
||||
run = "plugin nicotine --args='--archive'"
|
||||
desc = "Create compressed Nicotine archive of selection"
|
||||
EOF
|
||||
}
|
||||
# conf_print_httm_keymap | tee -a "${YAZI_HOME}/keymap.toml"
|
||||
|
||||
#----------------------------------------------------------------
|
||||
|
||||
# Create a version of nicotine that has the --single-repo option.
|
||||
conf_print_nicotine_script() {
|
||||
cat <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euf -o pipefail
|
||||
#set -x
|
||||
|
||||
print_version() {
|
||||
printf "\
|
||||
nicotine $(httm --version | cut -f2 -d' ')
|
||||
" 1>&2
|
||||
exit 0
|
||||
}
|
||||
|
||||
print_usage() {
|
||||
local nicotine="\e[31mnicotine\e[0m"
|
||||
local httm="\e[31mhttm\e[0m"
|
||||
local git="\e[31mgit\e[0m"
|
||||
local tar="\e[31mtar\e[0m"
|
||||
|
||||
printf "\
|
||||
$nicotine is a wrapper script for $httm which converts unique snapshot file versions to a $git archive.
|
||||
|
||||
USAGE:
|
||||
nicotine [OPTIONS]... [file1 file2...]
|
||||
|
||||
OPTIONS:
|
||||
--output-dir:
|
||||
Select the output directory. Default is current working directory.
|
||||
--no-archive
|
||||
Disable archive creation. Create a new $git repository.
|
||||
--single-repo:
|
||||
Add all provided files/dirs into a single git repository instead of one per argument.
|
||||
--debug:
|
||||
Show $git and $tar command output.
|
||||
--help:
|
||||
Display this dialog.
|
||||
--version:
|
||||
Display script version.
|
||||
|
||||
" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
prep_exec() {
|
||||
for cmd in find readlink git tar mktemp mkdir httm; do
|
||||
command -v "$cmd" >/dev/null 2>&1 || { printf "Error: '$cmd' is required.\n" 1>&2; exit 1; }
|
||||
done
|
||||
}
|
||||
|
||||
function copy_add_commit {
|
||||
local debug=$1; shift
|
||||
local path="$1"; shift
|
||||
local dest_dir="$1"; shift
|
||||
|
||||
if [[ -d "$path" ]]; then
|
||||
cp -a "$path" "$dest_dir/"
|
||||
return 0
|
||||
else
|
||||
cp -a "$path" "$dest_dir"
|
||||
fi
|
||||
|
||||
local commit_date
|
||||
commit_date=$(date -d "$(stat -c %y "$path")")
|
||||
|
||||
if [[ "$debug" = true ]]; then
|
||||
git add --all "$dest_dir"
|
||||
git commit -m "httm commit from ZFS snapshot: $(basename "$path")" --date "$commit_date" || true
|
||||
else
|
||||
git add --all "$dest_dir" > /dev/null
|
||||
git commit -q -m "httm commit from ZFS snapshot: $(basename "$path")" --date "$commit_date" > /dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
function get_unique_versions {
|
||||
local debug=$1; shift
|
||||
local path="$1"; shift
|
||||
local dest_dir="$1"; shift
|
||||
|
||||
local -a version_list=()
|
||||
if [[ ! -d "$path" ]]; then
|
||||
while read -r line; do
|
||||
[[ -n "$line" ]] && version_list+=("$line")
|
||||
done <<<"$(httm -n --omit-ditto "$path")"
|
||||
fi
|
||||
|
||||
if [[ -d "$path" ]] || [[ ${#version_list[@]} -le 1 ]]; then
|
||||
copy_add_commit "$debug" "$path" "$dest_dir"
|
||||
else
|
||||
for version in "${version_list[@]}"; do
|
||||
copy_add_commit "$debug" "$version" "$dest_dir"
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
function traverse {
|
||||
local debug=$1; shift
|
||||
local path="$1"; shift
|
||||
local dest_dir="$1"; shift
|
||||
|
||||
get_unique_versions "$debug" "$path" "$dest_dir"
|
||||
[[ -d "$path" ]] || return 0
|
||||
|
||||
local basename
|
||||
basename=$(basename "$path")
|
||||
|
||||
while read -r entry; do
|
||||
[[ -z "$entry" ]] && continue
|
||||
if [[ -d "$entry" ]]; then
|
||||
traverse "$debug" "$entry" "$dest_dir/$basename"
|
||||
else
|
||||
get_unique_versions "$debug" "$entry" "$dest_dir/$basename"
|
||||
fi
|
||||
done <<<"$(find "$path" -mindepth 1 -maxdepth 1)"
|
||||
}
|
||||
|
||||
function nicotine {
|
||||
(
|
||||
prep_exec
|
||||
|
||||
local debug=false
|
||||
local no_archive=false
|
||||
local single_repo=false
|
||||
local output_dir="$(pwd)"
|
||||
local -a input_files=()
|
||||
|
||||
while [[ $# -ge 1 ]]; do
|
||||
case "$1" in
|
||||
--output-dir) shift; output_dir="$(realpath "$1")"; shift ;;
|
||||
--debug) debug=true; shift ;;
|
||||
--no-archive) no_archive=true; shift ;;
|
||||
--single-repo) single_repo=true; shift ;;
|
||||
--help|-h) print_usage ;;
|
||||
--version|-V) print_version ;;
|
||||
*) input_files+=("$1"); shift ;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ ${#input_files[@]} -gt 0 ]] || { printf "Error: No input files.\n" 1>&2; exit 1; }
|
||||
|
||||
local tmp_dir
|
||||
tmp_dir="$(mktemp -d)"
|
||||
trap 'rm -rf "$tmp_dir"' EXIT
|
||||
|
||||
if [[ "$single_repo" = true ]]; then
|
||||
local repo_name="nicotine-combined"
|
||||
local archive_dir="$tmp_dir/$repo_name"
|
||||
mkdir -p "$archive_dir"
|
||||
cd "$archive_dir"
|
||||
git init -q
|
||||
|
||||
for file in "${input_files[@]}"; do
|
||||
local can_path
|
||||
can_path=$(realpath "$file" 2>/dev/null) || continue
|
||||
[[ -e "$can_path" ]] || continue
|
||||
|
||||
# if [[ -d "$can_path" ]]; then
|
||||
# traverse "$debug" "$can_path" "$tmp_dir"
|
||||
# else
|
||||
# traverse "$debug" "$can_path" "$archive_dir"
|
||||
# fi
|
||||
|
||||
traverse "$debug" "$can_path" "$archive_dir"
|
||||
done
|
||||
|
||||
finalize_output "$debug" "$no_archive" "$tmp_dir" "$output_dir" "$repo_name"
|
||||
else
|
||||
for file in "${input_files[@]}"; do
|
||||
local can_path
|
||||
can_path=$(realpath "$file" 2>/dev/null) || continue
|
||||
[[ -e "$can_path" ]] || continue
|
||||
|
||||
local base
|
||||
base=$(basename "$can_path")
|
||||
base="${base#.}"
|
||||
|
||||
local archive_dir="$tmp_dir/$base"
|
||||
mkdir -p "$archive_dir"
|
||||
(
|
||||
cd "$archive_dir"
|
||||
git init -q
|
||||
#
|
||||
# if [[ -d "$can_path" ]]; then
|
||||
# traverse "$debug" "$can_path" "$tmp_dir"
|
||||
# else
|
||||
# traverse "$debug" "$can_path" "$archive_dir"
|
||||
# fi
|
||||
|
||||
traverse "$debug" "$can_path" "$archive_dir"
|
||||
)
|
||||
finalize_output "$debug" "$no_archive" "$tmp_dir" "$output_dir" "$base"
|
||||
rm -rf "${archive_dir:?}"
|
||||
done
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
||||
function finalize_output {
|
||||
local debug=$1 no_archive=$2 tmp=$3 out=$4 base=$5
|
||||
if [[ "$no_archive" = true ]]; then
|
||||
cp -ra "$tmp/$base" "$out/$base-git"
|
||||
printf "Repository created: $out/$base-git\n"
|
||||
else
|
||||
local out_file="$out/$base-git.tar.gz"
|
||||
tar -C "$tmp" -zcf "$out_file" "$base"
|
||||
printf "Archive created: $out_file\n"
|
||||
fi
|
||||
}
|
||||
|
||||
nicotine "${@}"
|
||||
EOF
|
||||
}
|
||||
# So as to not loose the original nicotine bash script.
|
||||
if [[ -f /usr/bin/nicotine ]]; then
|
||||
if [[ -f /usr/bin/nicotine.bak ]]; then
|
||||
sudo mv /usr/bin/nicotine.bak /usr/bin/nicotine
|
||||
fi
|
||||
sudo mv /usr/bin/nicotine /usr/bin/nicotine.bak
|
||||
conf_print_nicotine_script | sudo tee /usr/bin/nicotine
|
||||
sudo chmod +x /usr/bin/nicotine
|
||||
fi
|
||||
Loading…
Reference in New Issue