diff options
-rw-r--r-- | dh-elpa.el | 20 | ||||
-rwxr-xr-x | dh_elpa | 29 |
2 files changed, 40 insertions, 9 deletions
@@ -33,15 +33,13 @@ (dirname (package-desc-full-name pkg-desc)) (pkg-dir (expand-file-name dirname destdir)) (backup-inhibited t)) + (make-directory pkg-dir t) (pcase (package-desc-kind pkg-desc) (`tar - (make-directory package-user-dir t) - ;; FIXME: should we delete PKG-DIR if it exists? - (let* ((default-directory (file-name-as-directory package-user-dir))) - (package-untar-buffer dirname))) + (let ((default-directory (file-name-as-directory destdir))) + (package-untar-buffer dirname))) (`single (let ((el-file (expand-file-name (format "%s.el" name) pkg-dir))) - (make-directory pkg-dir t) (package--write-file-no-coding el-file))) (kind (error "Unknown package kind: %S" kind))) (package--make-autoloads-and-stuff pkg-desc pkg-dir) @@ -66,7 +64,13 @@ Downloads and installs required packages as needed." into second command line argument" (let ((dest (car command-line-args-left)) (el-file (cadr command-line-args-left))) - (with-temp-buffer - (insert-file-contents-literally el-file) - (dhelpa-install-from-buffer dest)))) + (dhelpa-install-file dest el-file))) + +;;;###autoload +(defun dhelpa-install-file (dest el-file) + (with-temp-buffer + (insert-file-contents-literally el-file) + (when (string-match "\\.tar\\'" el-file) (tar-mode)) + (dhelpa-install-from-buffer (expand-file-name dest)))) + ;;; dh-elpa.el ends here @@ -1,5 +1,9 @@ #!/usr/bin/perl +use strict; +use Cwd qw{ getcwd }; +use File::Temp qw{ tempdir }; + use Debian::Debhelper::Dh_Lib; init(); @@ -12,6 +16,10 @@ foreach my $package (@{$dh{DOPACKAGES}}) { my $file=pkgfile($package,"elpa"); my @files; + + # Call isnative because it sets $dh{VERSION} + # as a side effect. + isnative($package); if ($file) { @files=filearray($file, "."); } @@ -20,10 +28,29 @@ foreach my $package (@{$dh{DOPACKAGES}}) { push @files, @ARGV; } + my $pkg_file; if (scalar(@files) == 1) { $pkg_file=$files[0]; } else { - die("multifile packages unimplimented"); + # TODO: add CLEANUP when somewhat debugged. + my $tempdir = tempdir(); + my $version = $dh{VERSION} or die "version not found!"; + $version =~ s/-[^-]+//; # strip Debian version + my $pkg_dir = "$package-$version"; + + $pkg_file = "$tempdir/$pkg_dir.tar"; + mkdir "$tempdir/$pkg_dir" or die "$!"; + + # copy files into tempdir, flattening hierarchy + # TODO: do this more correctly + foreach my $el_file (@files) { + doit("cp", "-a", $el_file, "$tempdir/$pkg_dir"); + } + + my $cwd = getcwd(); + chdir $tempdir or die "$!"; + doit("tar","cf",$pkg_file,$pkg_dir); + chdir $cwd or die "$!"; } doit(qw{emacs -batch -Q -l package}, |