emacsPackages.cask: 0.9.0 -> 0.9.1 (#445674)

This commit is contained in:
Lin Jian
2025-09-30 18:56:00 +00:00
committed by GitHub
2 changed files with 169 additions and 49 deletions
@@ -0,0 +1,85 @@
diff --git a/cask-bootstrap.el b/cask-bootstrap.el
--- a/cask-bootstrap.el
+++ b/cask-bootstrap.el
@@ -27,41 +27,18 @@
;;; Code:
-(require 'package)
+;; Add nix store paths for dependencies to the load-path.
+(let ((paths '(@loadPaths@)))
+ (dolist (path paths)
+ (push path load-path)))
-(defvar cask-directory)
+(let ((paths '(@nativeLoadPaths@)))
+ (dolist (path paths)
+ (push path native-comp-eln-load-path)))
-(defconst cask-bootstrap-dir
- (expand-file-name
- (locate-user-emacs-file
- (format ".cask/%s.%s/bootstrap" emacs-major-version emacs-minor-version)))
- "Path to Cask bootstrap directory.")
-
-;; Restore several package- variables and `load-path` after let-scope.
-(let (package-alist
- package-archive-contents
- package--initialized
- (load-path (add-to-list
- 'load-path (expand-file-name "package-build" cask-directory)))
- (package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
- ("melpa" . "https://melpa.org/packages/")))
- (package-user-dir cask-bootstrap-dir)
- (deps '(s f commander git epl shut-up cl-lib cl-generic eieio ansi)))
- (package-initialize)
- (setq package-archive-contents nil) ;; force refresh, cask#573, cask#559
- (unless (package-installed-p 'cl-lib)
- ;; package-build depends on cl-lib
- (unless package-archive-contents
- (package-refresh-contents))
- (package-install 'cl-lib))
- (require 'package-build)
+(let ((deps '(@depsMod@)))
(dolist (pkg deps)
- (unless (featurep pkg)
- (unless (package-installed-p pkg)
- (unless package-archive-contents
- (package-refresh-contents))
- (package-install pkg))
- (require pkg))))
+ (require pkg)))
(provide 'cask-bootstrap)
diff --git a/cask-cli.el b/cask-cli.el
--- a/cask-cli.el
+++ b/cask-cli.el
@@ -129,25 +129,8 @@ already is installed, it will not be installed again."
(cask-install (cask-cli--bundle))))
(defun cask-cli/upgrade-cask ()
- "Upgrade Cask itself and its dependencies.
-
-This command requires that Cask is installed using Git and that
-Git is available in `exec-path'."
- (unless (f-exists? (f-expand ".no-upgrade" cask-directory))
- (unwind-protect
- (progn
- (epl-change-package-dir cask-bootstrap-dir)
- (epl-initialize)
- (epl-add-archive "gnu" "https://elpa.gnu.org/packages/")
- (epl-add-archive "melpa" "https://melpa.org/packages/")
- (epl-refresh)
- (epl-upgrade))
- (epl-reset))
- (require 'git)
- (let ((git-repo cask-directory))
- (if (s-present? (git-run "status" "--porcelain"))
- (error "Cannot update Cask because of dirty tree")
- (git-pull)))))
+ "Disabled in Nixpkgs as this function requires that Cask is installed using Git."
+ (princ "Upgrade not available when installed via Nixpkgs.\n"))
(defun cask-cli/exec (&rest _args)
"Execute ARGS with correct `exec-path' and `load-path'.")
@@ -4,68 +4,103 @@
cl-generic,
cl-lib,
commander,
epl,
f,
fetchFromGitHub,
installShellFiles,
git,
melpaBuild,
package-build,
replaceVars,
s,
shut-up,
}:
let
formatLoadPath = x: ''"${x}/share/emacs/site-lisp/elpa/${x.ename}-${x.melpaVersion or x.version}"'';
formatNativeLoadPath = x: ''"${x}/share/emacs/native-lisp"'';
getAllDependenciesOfPkg =
pkg:
let
direct = builtins.filter (x: x != null) (pkg.packageRequires or [ ]);
indirect = builtins.concatLists (map getAllDependenciesOfPkg direct);
in
lib.unique (direct ++ indirect);
in
melpaBuild (
finalAttrs:
let
nixpkgDependencies = getAllDependenciesOfPkg finalAttrs.finalPackage;
loadPaths = builtins.concatStringsSep " " (map formatLoadPath nixpkgDependencies);
nativeLoadPaths = builtins.concatStringsSep " " (
map formatNativeLoadPath (nixpkgDependencies ++ [ (placeholder "out") ])
);
emacsBuiltinDeps = [
"cl-lib"
"eieio"
];
depsMod = builtins.concatStringsSep " " ((map (x: x.ename) nixpkgDependencies) ++ emacsBuiltinDeps);
in
{
pname = "cask";
version = "0.9.1";
melpaBuild (finalAttrs: {
pname = "cask";
version = "0.9.0";
src = fetchFromGitHub {
name = "cask-source-${finalAttrs.version}";
owner = "cask";
repo = "cask";
rev = "v${finalAttrs.version}";
hash = "sha256-/vinpQ51AuaTbXW4L4MnVonyfzTMvHUF4HViSPBKZxs=";
};
src = fetchFromGitHub {
name = "cask-source-${finalAttrs.version}";
owner = "cask";
repo = "cask";
rev = "v${finalAttrs.version}";
hash = "sha256-91rJFsp2SLk/JY+v6G5JmXH5bg9QnT+qhI8ccNJlI4A=";
};
nativeBuildInputs = [ installShellFiles ];
patches = [
# Uses LISPDIR substitution var
./0000-cask-lispdir.diff
];
patches = [
# Uses LISPDIR substitution var
./0000-cask-lispdir.diff
# Use Nix provided dependencies instead of letting Cask bootstrap itself
./0001-cask-bootstrap.diff
];
packageRequires = [
ansi
cl-generic
cl-lib
commander
epl
f
git
package-build
s
shut-up
];
packageRequires = [
ansi
cl-generic
cl-lib
commander
epl
f
git
package-build
s
shut-up
];
# use melpaVersion so that it works for unstable releases too
postPatch = ''
lispdir=$out/share/emacs/site-lisp/elpa/cask-${finalAttrs.melpaVersion} \
substituteAllInPlace bin/cask
'';
postPatch = ''
# use melpaVersion so that it works for unstable releases too
substituteInPlace bin/cask \
--replace-fail @lispdir@ $out/share/emacs/site-lisp/elpa/$ename-$melpaVersion
# TODO: use installBin as soon as installBin arrives Master branch
postInstall = ''
install -D -t $out/bin bin/cask
'';
meta = {
homepage = "https://github.com/cask/cask";
description = "Project management for Emacs";
longDescription = ''
Cask is a project management tool for Emacs that helps automate the
package development cycle; development, dependencies, testing, building,
packaging and more.
# using `replaceVars` results in wrong result of `placeholder "out"`
substituteInPlace cask-bootstrap.el \
--replace-fail @depsMod@ '${depsMod}' \
--replace-fail @loadPaths@ '${loadPaths}' \
--replace-fail @nativeLoadPaths@ '${nativeLoadPaths}'
'';
license = lib.licenses.gpl3Plus;
mainProgram = "cask";
maintainers = with lib.maintainers; [ ];
};
})
postInstall = ''
installBin bin/cask
'';
meta = {
homepage = "https://github.com/cask/cask";
description = "Project management for Emacs";
longDescription = ''
Cask is a project management tool for Emacs that helps automate the
package development cycle; development, dependencies, testing, building,
packaging and more.
'';
license = lib.licenses.gpl3Plus;
mainProgram = "cask";
maintainers = with lib.maintainers; [ ];
};
}
)