chiark / gitweb /
test suite: something to have a salsa (general purpose git) repo
[dgit.git] / dgit.7
diff --git a/dgit.7 b/dgit.7
index 6f5844b..7ad5aba 100644 (file)
--- a/dgit.7
+++ b/dgit.7
@@ -56,8 +56,12 @@ server to authenticate pushes.
 Uploads made by dgit contain an additional field
 .B Dgit
 in the source package .dsc.  (This is added by dgit push.)
 Uploads made by dgit contain an additional field
 .B Dgit
 in the source package .dsc.  (This is added by dgit push.)
-This specifies a commit (an ancestor of the dgit/suite
-branch) whose tree is identical to the unpacked source upload.
+This specifies: a commit (an ancestor of the dgit/suite
+branch) whose tree is identical to the unpacked source upload;
+the distro to which the upload was made;
+a tag name which can be used to fetch the git commits;
+and
+a url to use as a hint for the dgit git server for that distro.
 
 Uploads not made by dgit are represented in git by commits which are
 synthesised by dgit.  The tree of each such commit corresponds to the
 
 Uploads not made by dgit are represented in git by commits which are
 synthesised by dgit.  The tree of each such commit corresponds to the
@@ -112,6 +116,57 @@ using dgit look like
 reasonable
 changes made in an NMU: in a `3.0 (quilt)' package the delta from the
 previous upload is recorded in new patch(es) constructed by dpkg-source.
 reasonable
 changes made in an NMU: in a `3.0 (quilt)' package the delta from the
 previous upload is recorded in new patch(es) constructed by dpkg-source.
+.SH COMBINED SUITES
+dgit can synthesize a combined view of several underlying suites.
+This is requested by specifying, for
+.I suite,
+a comma-separated list:
+.IP
+.IR mainsuite \fB,\fR subsuite ...
+.LP
+This facility is available with dgit clone, fetch and pull, only.
+
+dgit will fetch the same package from each specified underlying suite,
+separately (as if with dgit fetch).
+dgit will then generate a pseudomerge commit
+on the tracking branch
+.BI remotes/dgit/dgit/ suite
+which has the tip of each of the underlying suites
+as an ancestor,
+and which contains the same as the suite which
+has the highest version of the package.
+
+The package must exist in mainsuite,
+but need not exist in the subsuites.
+
+If a specified subsuite starts with
+.B -
+then mainsuite is prepended.
+
+So, for example,
+.B stable,-security
+means to look for the package in stable, and stable-security,
+taking whichever is newer.
+If stable is currently jessie,
+dgit clone would leave you on the branch
+.BR dgit/jessie,-security .
+
+Combined suites are not supported by the dgit build operations.
+This is because those options are intended for building for
+uploading source packages,
+and look in the changelog to find the relevant suite.
+It does not make sense to name a dgit-synthesised combined suite
+in a changelog,
+or to try to upload to it.
+
+When using this facility, it is important to always specify the
+same suites in the same order:
+dgit will not be make a coherent fast-forwarding history
+view otherwise.
+
+The history generated by this feature is not normally suitable
+for merging back into upstreams,
+as it necessarily contains unattractive pseudomerges.
 .SH LIMITATIONS
 Because the synthesis
 of the suite tracking branches
 .SH LIMITATIONS
 Because the synthesis
 of the suite tracking branches
@@ -142,15 +197,76 @@ import existing vcs history
 (which might not be faithful to dgit's invariants)
 or previous non-Dgit uploads
 (which would not provide a very rich history).
 (which might not be faithful to dgit's invariants)
 or previous non-Dgit uploads
 (which would not provide a very rich history).
+
+git represents only file executability.
+git does not represent empty directories,
+or any leaf objects other than plain files and symlinks.
+The behaviour of Debian source package formats
+on objects with unusual permissions is complicated.
+Some pathological Debian source packages will no longer build
+if empty directories are pruned
+(or if other things not reproduced by git are changed).
+Such sources cannot be worked with properly in git,
+and therefore not with dgit either.
 .SH READ-ONLY DISTROS
 Distros which do not maintain a set of dgit history git repositories
 can still be used in a read-only mode with dgit.  Currently Ubuntu
 is configured this way.
 .SH READ-ONLY DISTROS
 Distros which do not maintain a set of dgit history git repositories
 can still be used in a read-only mode with dgit.  Currently Ubuntu
 is configured this way.
+.SH GITATTRIBUTES
+git has features which can automatically transform files
+as they are being copied between the working tree
+and the git history.
+The attributes can be specified in the source tree itself,
+in
+.BR .gitattributes .
+See \fBgitattributes\fP(5).
+
+These transformations are context-sensitive
+and not, in general, reversible,
+so dgit operates on the principle that
+the dgit git history contains the actual contents of the package.
+(When dgit is manipulating a .dsc,
+it does so in a private area,
+where the transforming gitattributes are defused,
+to achieve this.)
+
+If transforming gitattributes are used,
+they can cause trouble,
+because the working tree files can differ from
+the git revision history
+(and therefore from the source packages).
+dgit warns if it finds a .gitattributes file
+(in a package being fetched or imported),
+unless the transforming gitattributes have been defused.
+
+dgit clone
+and dgit setup-new-tree
+disable transforming gitattributes
+by default,
+by creating a suitable .git/info/attributes.
+See
+.B dgit setup-new-tree
+and
+.B dgit setup-gitattributes
+in dgit(1).
 .SH PACKAGE SOURCE FORMATS
 If you are not the maintainer, you do not need to worry about the
 source format of the package.  You can just make changes as you like
 in git.  If the package is a `3.0 (quilt)' package, the patch stack
 will usually not be represented in the git history.
 .SH PACKAGE SOURCE FORMATS
 If you are not the maintainer, you do not need to worry about the
 source format of the package.  You can just make changes as you like
 in git.  If the package is a `3.0 (quilt)' package, the patch stack
 will usually not be represented in the git history.
+.SH FILE EXECUTABILITY
+Debian source package formats
+do not always faithfully reproduce
+changes to executability.
+But dgit insists that the result of dgit clone is identical
+(as far as git can represent - see Limitations, above)
+to the result of dpkg-source -x.
+
+So files that are executable in your git tree
+must be executable in the result of dpkg-source -x
+(but often aren't).
+If a package has such troublesome files,
+they have to be non-executable in dgit-compatible git branches.
 .SH FORMAT 3.0 (QUILT)
 For a format `3.0 (quilt)' source package, dgit may have to make a
 commit on your current branch to contain metadata used by quilt and
 .SH FORMAT 3.0 (QUILT)
 For a format `3.0 (quilt)' source package, dgit may have to make a
 commit on your current branch to contain metadata used by quilt and
@@ -209,7 +325,7 @@ is a patches-applied or patches-unapplied tree.
 Split view conversions are cached in the ref
 dgit-intern/quilt-cache.
 This should not be manipulated directly.
 Split view conversions are cached in the ref
 dgit-intern/quilt-cache.
 This should not be manipulated directly.
-.SH FILES IN THE SOURCE PACKAGE BUT NOT IN GIT - AUTOTOOLS ETC.
+.SH FILES IN THE ORIG TARBALL BUT NOT IN GIT - AUTOTOOLS ETC.
 This section is mainly of interest to maintainers who want to use dgit
 with their existing git history for the Debian package.
 
 This section is mainly of interest to maintainers who want to use dgit
 with their existing git history for the Debian package.
 
@@ -227,6 +343,17 @@ branches, it will fail.
 As the maintainer you therefore have the following options:
 .TP
 \(bu
 As the maintainer you therefore have the following options:
 .TP
 \(bu
+Delete the files from your git branches,
+and your Debian source packages,
+and carry the deletion as a delta from upstream.
+(With `3.0 (quilt)' this means represeting the deletions as patches.
+You may need to pass --include-removal to dpkg-source --commit,
+or pass corresponding options to other tools.)
+This can make the Debian
+source package less useful for people without Debian build
+infrastructure.
+.TP
+\(bu
 Persuade upstream that the source code in their git history and the
 source they ship as tarballs should be identical.  Of course simply
 removing the files from the tarball may make the tarball hard for
 Persuade upstream that the source code in their git history and the
 source they ship as tarballs should be identical.  Of course simply
 removing the files from the tarball may make the tarball hard for
@@ -237,18 +364,6 @@ files, perhaps with some simple automation to deal with conflicts and
 spurious changes.  This has the advantage that someone who clones
 the git repository finds the program just as easy to build as someone
 who uses the tarball.
 spurious changes.  This has the advantage that someone who clones
 the git repository finds the program just as easy to build as someone
 who uses the tarball.
-.TP
-\(bu
-Have separate git branches which do contain the extra files, and after
-regenerating the extra files (whenever you would have to anyway),
-commit the result onto those branches.
-.TP
-\(bu
-Provide source packages which lack the files you don't want
-in git, and arrange for your package build to create them as needed.
-This may mean not using upstream source tarballs and makes the Debian
-source package less useful for people without Debian build
-infrastructure.
 .LP
 Of course it may also be that the differences are due to build system
 bugs, which cause unintended files to end up in the source package.
 .LP
 Of course it may also be that the differences are due to build system
 bugs, which cause unintended files to end up in the source package.
@@ -272,7 +387,7 @@ to delete these files.
 .LP
 dpkg-source does not
 (with any of the commonly used source formats)
 .LP
 dpkg-source does not
 (with any of the commonly used source formats)
-represent deletion of files (outside debian/) present in upstream.
+represent deletion of binaries (outside debian/) present in upstream.
 Thus deleting such files in a dpkg-source working tree does not
 actually result in them being deleted from the source package.
 Thus
 Thus deleting such files in a dpkg-source working tree does not
 actually result in them being deleted from the source package.
 Thus