
The layer is now redundant, since everything left in "pkgs" is in the "racket-pkgs" category.
99 lines
4.5 KiB
Racket
99 lines
4.5 KiB
Racket
#lang scribble/doc
|
|
@(require "common.rkt" (for-label file/zip file/gzip file/gunzip scheme/file))
|
|
|
|
@title[#:tag "zip"]{@exec{zip} File Creation}
|
|
|
|
@defmodule[file/zip]{The @racketmodname[file/zip] library provides
|
|
utilities to create @exec{zip} archive files, which are compatible
|
|
with both Windows and Unix (including Mac OS X) unpacking. The actual
|
|
compression is implemented by @racket[deflate].}
|
|
|
|
@defproc[(zip [zip-file path-string?] [path path-string?] ...
|
|
[#:timestamp timestamp (or/c #f exact-integer?) #f]
|
|
[#:get-timestamp get-timestamp
|
|
(path? . -> . exact-integer?)
|
|
(if timestamp
|
|
(lambda (p) timestamp)
|
|
file-or-directory-modify-seconds)]
|
|
[#:utc-timestamps? utc-timestamps? any/c #f]
|
|
[#:round-timestamps-down? round-timestamps-down? any/c #f]
|
|
[#:path-prefix path-prefix (or/c #f path-string?) #f]
|
|
[#:system-type sys-type symbol? (system-type)])
|
|
void?]{
|
|
|
|
Creates @racket[zip-file], which holds the complete content of all
|
|
@racket[path]s.
|
|
|
|
The given @racket[path]s are all expected to be
|
|
relative path names of existing directories and files (i.e., relative
|
|
to the current directory). If a nested path is provided as a
|
|
@racket[path], its ancestor directories are also added to the
|
|
resulting @exec{zip} file, up to the current directory (using
|
|
@racket[pathlist-closure]).
|
|
|
|
Files are packaged as usual for
|
|
@exec{zip} files, including permission bits for both Windows and Unix
|
|
(including Mac OS X). The permission bits are determined by
|
|
@racket[file-or-directory-permissions], which does not preserve the
|
|
distinction between owner/group/other permissions. Also, symbolic
|
|
links are always followed.
|
|
|
|
The @racket[get-timestamp] function is used to obtain the modification
|
|
date to record in the archive for a file or directory. Normally,
|
|
@exec{zip} archives record modification dates in local time, but if
|
|
@racket[utc-timestamps?] is true, then the UTC time is recorded.
|
|
Timestamps in @exec{zip} archives are precise only to two seconds; by
|
|
default, the time is rounded toward the future (like WinZip or PKZIP),
|
|
but time is rounded toward the past (like Java) if
|
|
@racket[round-timestamps-down?] is true.
|
|
|
|
The @racket[sys-type] argument determines the system type recorded in
|
|
the archive.
|
|
|
|
If @racket[path-prefix] is not @racket[#f], then it prefixes the name
|
|
of each path as it is written in the @exec{zip} file, and directory
|
|
entries are added for each element of @racket[path-prefix].
|
|
|
|
@history[#:changed "6.0.0.3"
|
|
@elem{Added the @racket[#:get-timestamp] and @racket[#:system-type] arguments.}
|
|
#:changed "6.0.1.12"
|
|
@elem{Added the @racket[#:path-prefix], @racket[#:utc-timestamps?], and
|
|
@racket[#:utc-timestamps-down?] arguments.}]}
|
|
|
|
|
|
|
|
@defproc[(zip->output [paths (listof path-string?)]
|
|
[out output-port? (current-output-port)]
|
|
[#:timestamp timestamp (or/c #f exact-integer?) #f]
|
|
[#:get-timestamp get-timestamp
|
|
(path? . -> . exact-integer?)
|
|
(if timestamp
|
|
(lambda (p) timestamp)
|
|
file-or-directory-modify-seconds)]
|
|
[#:utc-timestamps? utc-timestamps? any/c #f]
|
|
[#:round-timestamps-down? round-timestamps-down? any/c #f]
|
|
[#:path-prefix path-prefix (or/c #f path-string?) #f]
|
|
[#:system-type sys-type symbol? (system-type)])
|
|
void?]{
|
|
|
|
Zips each of the given @racket[paths], and packages it as a @exec{zip}
|
|
``file'' that is written directly to @racket[out]. Unlike
|
|
@racket[zip], the specified @racket[paths] are included without
|
|
closing over directories: if a
|
|
directory is specified, its content is not automatically added, and
|
|
nested directories are added without parent directories.
|
|
|
|
@history[#:changed "6.0.0.3"
|
|
@elem{Added the @racket[#:get-timestamp] and @racket[#:system-type] arguments.}
|
|
#:changed "6.0.1.12"
|
|
@elem{Added the @racket[#:path-prefix], @racket[#:utc-timestamps?], and
|
|
@racket[#:utc-timestamps-down?] arguments.}]}
|
|
|
|
|
|
@defboolparam[zip-verbose on?]{
|
|
|
|
A parameter that controls output during a @racket[zip]
|
|
operation. Setting this parameter to a true value causes @racket[zip]
|
|
to display to @racket[(current-error-port)] the filename that is
|
|
currently being compressed.}
|