summaryrefslogtreecommitdiff
path: root/doc/dumpdir.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/dumpdir.texi')
-rw-r--r--doc/dumpdir.texi132
1 files changed, 132 insertions, 0 deletions
diff --git a/doc/dumpdir.texi b/doc/dumpdir.texi
new file mode 100644
index 0000000..9ded73d
--- /dev/null
+++ b/doc/dumpdir.texi
@@ -0,0 +1,132 @@
+@c This is part of the paxutils manual.
+@c Copyright (C) 2006-2007, 2014, 2016 Free Software Foundation, Inc.
+@c Written by Sergey Poznyakoff
+@c This file is distributed under GFDL 1.1 or any later version
+@c published by the Free Software Foundation.
+
+ Incremental archives keep information about contents of each
+dumped directory in special data blocks called @dfn{dumpdirs}.
+
+ Dumpdir is a sequence of entries of the following form:
+
+@smallexample
+@var{C} @var{filename} \0
+@end smallexample
+
+@noindent
+where @var{C} is one of the @dfn{control codes} described below,
+@var{filename} is the name of the file @var{C} operates upon, and
+@samp{\0} represents a nul character (ASCII 0). The white space
+characters were added for readability, real dumpdirs do not contain
+them.
+
+ Each dumpdir ends with a single nul character.
+
+ The following table describes control codes and their meanings:
+
+@table @samp
+@item Y
+@var{filename} is contained in the archive.
+
+@item N
+@var{filename} was present in the directory at the time the archive
+was made, yet it was not dumped to the archive, because it had not
+changed since the last backup.
+
+@item D
+@var{filename} is a directory.
+
+@item R
+This code requests renaming of the @var{filename} to the name
+specified with the @samp{T} command, that immediately follows it.
+
+@item T
+Specify target file name for @samp{R} command (see below).
+
+@item X
+Specify @dfn{temporary directory} name for a rename operation (see below).
+@end table
+
+ Codes @samp{Y}, @samp{N} and @samp{D} require @var{filename} argument
+to be a relative file name to the directory this dumpdir describes,
+whereas codes @samp{R}, @samp{T} and @samp{X} require their argument
+to be an absolute file name.
+
+ The three codes @samp{R}, @samp{T} and @samp{X} specify a
+@dfn{renaming operation}. In the simplest case it is:
+
+@smallexample
+R@file{source}\0T@file{dest}\0
+@end smallexample
+
+@noindent
+which means ``rename file @file{source} to file @file{dest}''.
+
+ However, there are cases that require using a @dfn{temporary
+directory}. For example, consider the following scenario:
+
+@enumerate 1
+@item
+Previous run dumped a directory @file{foo} which contained the
+following three directories:
+
+@smallexample
+a
+b
+c
+@end smallexample
+
+@item
+They were renamed @emph{cyclically}, so that:
+
+@example
+@file{a} became @file{b}
+@file{b} became @file{c}
+@file{c} became @file{a}
+@end example
+
+@item
+New incremental dump was made.
+@end enumerate
+
+ This case cannot be handled by three successive renames, since
+renaming @file{a} to @file{b} will destroy the existing directory.
+To correctly process it, @GNUTAR{} needs a temporary directory, so
+it creates the following dumpdir (newlines have been added for
+readability):
+
+@smallexample
+@group
+Xfoo\0
+Rfoo/a\0T\0
+Rfoo/b\0Tfoo/c\0
+Rfoo/c\0Tfoo/a\0
+R\0Tfoo/a\0
+@end group
+@end smallexample
+
+ The first command, @samp{Xfoo\0}, instructs the extractor to create a
+temporary directory in the directory @file{foo}. Second command,
+@samp{Rfoo/aT\0}, says ``rename file @file{foo/a} to the temporary
+directory that has just been created'' (empty file name after a
+command means use temporary directory). Third and fourth commands
+work as usual, and, finally, the last command, @samp{R\0Tfoo/a\0}
+tells tar to rename the temporary directory to @file{foo/a}.
+
+ The exact placement of a dumpdir in the archive depends on the
+archive format (@pxref{Formats}):
+
+@itemize
+@item PAX archives
+
+In PAX archives, dumpdir is stored in the extended header of the
+corresponding directory, in variable @code{GNU.dumpdir}.
+
+@item GNU and old GNU archives
+
+These formats implement special header type @samp{D}, which is similar
+to ustar header @samp{5} (directory), except that it precedes a data
+block containing the dumpdir.
+@end itemize
+
+@c End of dumpdir.texi