fix(cli): don't delete repos beyond $DOOMLOCALDIR
Doom makes multiple attempts to re-clone repos if they failed the first time, however, if a user provides a :local-repo and that location isn't a git repo, Doom assumes this it is the result of a failed clone, and so deletes it to "try" again (which will fail). This can result in lost work. This prevents this from happening to packages/repos outside of $DOOMLOCALDIR (all packages under $DOOMLOCALDIR must be git repos). Fix: #7785 Amend:3643c4dadd
Amend:1fa8d3a4b9
This commit is contained in:
parent
392fe88ed0
commit
c6fc0e5bc0
1 changed files with 24 additions and 26 deletions
|
@ -315,38 +315,36 @@ list remains lean."
|
|||
(doom-packages--cli-recipes-update))
|
||||
(condition-case-unless-debug e
|
||||
(let ((straight-vc-git-post-clone-hook
|
||||
(cons (lambda! (&key repo-dir commit)
|
||||
(cons (lambda! (&key commit)
|
||||
(print-group!
|
||||
(if-let (pin (cdr (assoc package pinned)))
|
||||
(print! (item "Pinned to %s") pin)
|
||||
(when commit
|
||||
(print! (item "Checked out %s") commit))))
|
||||
;; HACK: Line encoding issues can plague
|
||||
;; repos with dirty worktree prompts
|
||||
;; when updating packages or "Local
|
||||
;; variables entry is missing the
|
||||
;; suffix" errors when installing them
|
||||
;; (see #2637), so have git handle
|
||||
;; conversion by force.
|
||||
(when (and doom--system-windows-p (stringp repo-dir))
|
||||
(let ((default-directory repo-dir))
|
||||
(when (file-in-directory-p default-directory straight-base-dir)
|
||||
(straight--process-run "git" "config" "core.autocrlf" "true")))))
|
||||
(print! (item "Checked out %s") commit)))))
|
||||
straight-vc-git-post-clone-hook)))
|
||||
(straight-use-package (intern package))
|
||||
;; HACK: Straight can sometimes fail to clone a repo,
|
||||
;; leaving behind an empty directory which, in future
|
||||
;; invocations, it will assume indicates a successful
|
||||
;; clone (causing load errors later).
|
||||
(let ((try 0))
|
||||
(while (not (file-directory-p (doom-path repo-dir ".git")))
|
||||
(when (= try 3)
|
||||
(error "Failed to clone package"))
|
||||
(print! "Failed to clone %S, trying again (attempt #%d)..." package (1+ try))
|
||||
(delete-directory repo-dir t)
|
||||
(delete-directory build-dir t)
|
||||
(straight-use-package (intern package))
|
||||
(cl-incf try))))
|
||||
(when (file-in-directory-p repo-dir straight-base-dir)
|
||||
;; HACK: Straight can sometimes fail to clone a repo,
|
||||
;; leaving behind an empty directory which, in
|
||||
;; future invocations, it will assume indicates a
|
||||
;; successful clone (causing load errors later).
|
||||
(let ((try 0))
|
||||
(while (not (file-directory-p (doom-path repo-dir ".git")))
|
||||
(when (= try 3)
|
||||
(error "Failed to clone package"))
|
||||
(print! (warn "Failed to clone %S, trying again (attempt #%d)...") package (1+ try))
|
||||
(delete-directory repo-dir t)
|
||||
(delete-directory build-dir t)
|
||||
(straight-use-package (intern package))
|
||||
(cl-incf try)))
|
||||
;; HACK: Line encoding issues can plague repos with
|
||||
;; dirty worktree prompts when updating packages or
|
||||
;; "Local variables entry is missing the suffix"
|
||||
;; errors when installing them (see #2637), so have
|
||||
;; git handle conversion by force.
|
||||
(when doom--system-windows-p
|
||||
(let ((default-directory repo-dir))
|
||||
(straight--process-run "git" "config" "core.autocrlf" "true")))))
|
||||
(error
|
||||
(signal 'doom-package-error (list package e)))))))
|
||||
(progn
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue