racket/pkgs/racket-doc/file/scribblings/zip.scrbl
Matthew Flatt 710320e3dc "Mac OS X" -> "Mac OS"
Although "macOS" is the correct name for Apple's current desktop OS,
we've decided to go with "Mac OS" to cover all of Apple's Unix-like
desktop OS versions. The label "Mac OS" is more readable, clear in
context (i.e., unlikely to be confused with the Mac OSes that
proceeded Mac OS X), and as likely to match Apple's future OS names
as anything.
2016-12-23 12:18:36 -07:00

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) 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). 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.}