Perbaiki backup/restore dan script yang tidak jalan dari shortcut
Backup/restore: - berkas .lazy (format versi 2) kini menyimpan ISI berkas: binary/script dan ikon (maks 512 MB per berkas); format versi 1 tetap bisa diimpor - impor memakai shortcut.Restore: binary ditulis ke ~/.local/bin lokal, ikon dari cadangan (atau diunduh ulang dari icon_source), .desktop ditulis dengan path lokal, salinan Desktop dibuat sesuai target - path dari komputer lama tidak dipakai mentah -> tidak ada lagi 'banyak file missing'; entri yang tidak bisa dipulihkan ditandai dan bisa dibetulkan via edit - tes end-to-end: pasang 3 shortcut -> ekspor -> pulihkan di HOME lain -> semua berkas lokal, script hasil restore benar-benar jalan Script: - script dipasang sebagai wrapper + <slug>.real: wrapper menambahkan ~/.local/bin ke PATH dan cd ke folder asli script (desktop environment menjalankan dengan cwd = home, PATH sesi) - .desktop dapat Path= sesuai folder asli script - opsi 'Run in a terminal window (scripts)' di dialog install & edit - uninstall membuang wrapper + script aslinya
This commit is contained in:
1 parent
fdb503e152
commit
581cd07dba
16 files changed
+779
-59
No files matched your search
@@ -105,3 +105,53 @@ func desktopCopy(desktopPath, slug string) (string, error) {
|
||||
}
|
||||
return dst, copyFile(desktopPath, dst, 0o755)
|
||||
}
|
||||
|
||||
// installBinary menyalin berkas target ke binDst.
|
||||
//
|
||||
// Script dapat perlakuan khusus: yang disalin adalah script aslinya (dengan
|
||||
// akhiran .real) plus wrapper kecil. Desktop environment menjalankan shortcut
|
||||
// dengan cwd = home dan PATH sesi, sehingga script yang memakai path relatif
|
||||
// atau tool di ~/.local/bin gagal; wrapper yang membereskan keduanya.
|
||||
func installBinary(kind, src, binDst string) error {
|
||||
if kind == KindScript {
|
||||
if err := copyFile(src, binDst+scriptSuffix, 0o755); err != nil {
|
||||
return err
|
||||
}
|
||||
return writeScriptWrapper(binDst, binDst+scriptSuffix, filepath.Dir(src))
|
||||
}
|
||||
if samePath(src, binDst) {
|
||||
return nil
|
||||
}
|
||||
return copyFile(src, binDst, 0o755)
|
||||
}
|
||||
|
||||
// writeFileMode menulis berkas dengan mode tertentu (dipakai saat restore).
|
||||
func writeFileMode(path string, data []byte, mode os.FileMode) error {
|
||||
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(path, data, mode)
|
||||
}
|
||||
|
||||
// scriptSuffix adalah akhiran berkas script asli di samping wrapper.
|
||||
const scriptSuffix = ".real"
|
||||
|
||||
// writeScriptWrapper menulis wrapper yang menyiapkan PATH dan folder kerja
|
||||
// sebelum menjalankan script aslinya.
|
||||
func writeScriptWrapper(path, real, originDir string) error {
|
||||
body := "#!/bin/sh\n" +
|
||||
"# dibuat oleh LazyRun: siapkan PATH & folder kerja lalu jalankan script aslinya\n" +
|
||||
`PATH="$HOME/.local/bin:$PATH"` + "\n" +
|
||||
"export PATH\n"
|
||||
if originDir != "" && originDir != "." {
|
||||
quoted := shellQuote(originDir)
|
||||
body += "if [ -d " + quoted + " ]; then cd " + quoted + " || exit 1; fi\n"
|
||||
}
|
||||
body += "exec " + shellQuote(real) + ` "$@"` + "\n"
|
||||
return os.WriteFile(path, []byte(body), 0o755)
|
||||
}
|
||||
|
||||
// shellQuote mengutip nilai untuk dipakai di dalam script shell.
|
||||
func shellQuote(value string) string {
|
||||
return "'" + strings.ReplaceAll(value, "'", `'\''`) + "'"
|
||||
}
|
||||
Reference in new issue
Block a user