* lisp/tar-mode.el: Allow for adding new archive members.
(tar-new-regular-file-header, tar--pad-to, tar--put-at)
(tar-header-serialize): New functions.
(tar-current-position): Split from tar-current-descriptor.
(tar-current-descriptor): Use it.
(tar-new-entry): New command.
(tar-mode-map): Bind it.
* doc/emacs/files.texi (File Archives): Document "I" for tar-new-entry.
* etc/NEWS: Mention the new tar-new-entry command.
Fixes: debbugs:19274
Consolidate the single-file vs tarball code.
(package-desc-suffix): New function.
(package-desc-full-name): Don't bother inlining it.
(package-load-descriptor): Return the new package-desc.
(package-mark-obsolete): Remove unused arg `package'.
(package-unpack): Make it work for single files as well.
Make it update package-alist.
(package--make-autoloads-and-stuff): Rename from
package--make-autoloads-and-compile. Don't compile any more.
(package--compile): New function.
(package-generate-description-file): New function, extracted from
package-unpack-single.
(package-unpack-single): Remove.
(package--with-work-buffer): Add indentation and debugging info.
(package-download-single): Remove.
(package-install-from-archive): Rename from package-download-tar, make
it take a pkg-desc, and make it work for single files as well.
(package-download-transaction): Simplify.
(package-tar-file-info): Remove `file' arg. Rewrite not to use an
external tar program.
(package-install-from-buffer): Remove `pkg-desc' argument.
Use package-tar-file-info for tar-mode buffers.
(package-install-file): Simplify accordingly.
(package-archive-base): Change to take a pkg-desc.
* lisp/tar-mode.el (tar--check-descriptor): New function, extracted from
tar-get-descriptor.
(tar-get-descriptor): Use it.
(tar-get-file-descriptor): New function.
(tar--extract): New function, extracted from tar-extract.
(tar--extract): Use it.
* lisp/emacs-lisp/package-x.el (package-upload-file): Decode the file, in
case the summary uses non-ascii. Adjust to new calling convention of
package-tar-file-info.
to nil around the call to `add-text-properties' to prevent
directory time modification by lock_file.
* lisp/tar-mode.el (tar-summarize-buffer): Idem.
Fixes: debbugs:2295
* lisp/woman.el: Remove eval-after-load for tar-mode.
* lisp/tar-mode.el (tar-mode-map): Add woman binding and menu entry.
(woman-tar-extract-file): Autoload it.
* view.el (view-file, view-buffer): Move test for special mode-class
from view-file to view-buffer.
* tar-mode.el (tar-extract): Turn if's into one cond
like in arc-mode.el.
permissive for when the buffer is empty.
(tar-header-block-tokenize): Decode the username and groupname.
(tar-chown-entry, tar-chgrp-entry): Encode the names (bug#4730).
(tar-summarize-buffer): Don't silently skip incomplete headers.
(tar-mode): Revert to fundamental-mode in case of malformed tar data.
(tar-extract): Try to make sure set-auto-mode doesn't mistakenly
treat a tar file member as being a tar file itself, just because
its own filename includes the parent tar file's.
(tar-data-swapped-p, tar-swap-data):
Use it instead of buffer-swapped-with.
(tar-write-region-annotate): Re-add (partial undo of last change).
(tar-mode): Use it again (partial undo as well).
(tar-change-major-mode-hook): Use it instead of buffer-swap-text.
(tar-mode-revert): Likewise.
(tar-mode): Likewise. Don't set write-region-annotate-functions.
(tar-data-swapped-p): Test buffer-swapped-with.
(tar-write-region-annotate): Remove.
(tar-header-block-tokenize): Add argument `coding' and use it
instead of tar-file-name-coding-system.
(tar-summarize-buffer): Pass tar-file-name-coding-system here.
(tar-header-block-tokenize): Set it when useful.
Drop "GNUtar " magic value, which even GNU Tar doesn't know about.
(tar-header-data-end): New function.
(tar-summarize-buffer): Use it.
(tar-next-line): Fix goal column for long usernames.
(tar-expunge-internal): Use header-start.
(tar-rename-entry): Handle ustar-style long names.
(tar-alter-one-field): Add optional `descriptor' argument.
(tar-subfile-save-buffer): Use it.
(tar-mode): Use write-region-annotate-functions rather than
write-contents-functions.
(tar-extract): Remove unused var `pos'.
(tar-subfile-save-buffer): Remove unused var `following-descs'.
(tar-mode-write-file): Remove.
(tar-write-region-annotate): New function.
(tar-setf): Remove.
(tar-header): Use defstruct. Add `data-start' field.
(make-tar-desc, tar-desc-tokens): Remove, folded into tar-header.
(tar-desc-data-start): Remove (now called tar-header-data-start).
(tar-roundup-512): New fun.
(tar-header-block-tokenize): Receive a buffer position rather than
a string. Handle @longLink here, be more careful about it.
Create a marker for data-start.
(tar-summarize-buffer): Don't handle @LongLink here any more.
(tar-expunge-internal, tar-subfile-save-buffer): Don't update
data-start on the following entries any more.
(tar-chown-entry, tar-chgrp-entry): Use read-number.