summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* Dgit: Introduce in_workarea and fresh_workareaIan Jackson2017-07-19
| | | | | | No callers yet. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* Dgit.pm: git_slurp_config_src: Break out from dgitIan Jackson2017-07-19
| | | | | | | | | | We are going to want this so we can provide better subtree setup functions in Dgit.pm, including the config transfer. No functional change, except that we now run just "git" from the path, rather than honouring dgit's @git (which is not available in Dgit.pm). Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* Dgit.pm: workarea_setup: Break out from dgitIan Jackson2017-07-18
| | | | | | | | | | | This subroutine needs a hash of the main tree's git config, so that some of the config settings which affect the object store can be properly honoured. Purely code motion, except for the changed reference to $gitcfgs. No functional change. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* dgit: simplify gitattrs setup in mktree_in_ud_hereIan Jackson2017-07-18
| | | | | | | | | | | | | | | | We are going to want to break the meat of mktree_in_ud here out into Dgit.pm. Dgit.pm doesn't have access_cfg, is_gitattrs_setup, and so on. On the other hand, we don't need any of that here: this is a fresh tree of our own (so there is no existing .git/info/attributes to combine with our new settings), and we ignore the config already. So overall, little functional change: the .git/info/attributes in our private working areas are now slightly simpler: they don't indirect via git-defuse-attrs. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* Dgit.pm: $negate_harmful_gitattrs: Break out from dgitIan Jackson2017-07-18
| | | | | | No functional change. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* Dgit.pm: runcmd: Break out from dgitIan Jackson2017-07-18
| | | | | | | | | | | | Move runcmd into Dgit.pm. We need to change dgit-repos-server too, but luckily its definition is essentially equivalent. No functional change to dgit. dgit-repos-server now prints somewhat better error messages when subprocesses fail. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* test suite: sbuild-gitish: Find sbuild rune in the manpageIan Jackson2017-07-18
| | | | | | | This avoids duplicating this rune (so the manpage can't get out of date). Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* dgit-user(7): Provide information about how to use sbuildIan Jackson2017-07-18
| | | | | | Quite ugly due to #868527. Closes:#868526. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* dgit-user(7): Fixed example rune to use curlIan Jackson2017-07-18
| | | | | | | curl prints to stdout, as the rune expects. Reported-by: Simon Tatham Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* sbuild-gitish: New test case to check running sbuild from gitIan Jackson2017-07-18
| | | | | | | This involves creating a new "gitish-only" branch in the example worktree. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* Merge branch 'stable' into HEADIan Jackson2017-07-16
|\
| * changelog: finalise 3.12debian/3.12archive/debian/3.12Ian Jackson2017-07-16
| | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * quilt fixup: Check that funny changes are represented properlyIan Jackson2017-07-16
| | | | | | | | | | | | | | | | Specifically, do dgit push --dry-run. This will check that the source package and git tree agree - ie, that what we have produced can round-trip through dpkg-source. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * quilt fixup: Check we can delete files with funny modesIan Jackson2017-07-16
| | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: unrepres. changes: Tolerate creation of symlinksIan Jackson2017-07-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Experimentally, dpkg-source on stretch will create patches to create new symlinks. (It will fail on attempts to modify existing symlinks and it ignores attempts to change plain file executability.) Implementation: add an alternative which tolerates the git symlink mode. This replaces the check on $oldmode, which in this context we know is all 0s and can therefore never match. While we're here, change the error message. Closes:#857382. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: unrepres. changes: Tolerate deletion of executable filesIan Jackson2017-07-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We don't care what the old mode was; if we tell dpkg-source to record the deletion it can do so. But we do care that it was a file. Experimentally, dpkg-source on stretch ignores attempts to delete symlinks. The removal of the check for $newmode has no functional change, because in this context we know that $newmode is all 0s. If it wasn't, we would have been in "both old and new files exist", above. So that limb of the test will never match and should be removed. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: unrepres. changes: Separate out creation and deletionIan Jackson2017-07-16
| | | | | | | | | | | | | | | | | | | | We are going to want to handle these cases separately because the behaviour of dpkg-source is different. In this commit, simply clone the existing code (and add a few comments), so no functional change. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: unrepres. changes: Prepare to tolerate symlinksIan Jackson2017-07-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Permit symlinks (which have mode 120000 in git) to make their way through for more detailed checks. No functional change except to error messages, because: * If neither thing was a symlink, then the existing regexps still match and the new "modified symlink" clause will not, so the flow is unchanged. * Otherwise, if both $oldmode and $newmode match [^0], ie, this is a modification rather than deletion or removal, we insist that $oldmode=$newmode, and then, fail the new "modified symlink" check. * Otherwise, we fail the check for default mode. So in the case we are allowing to proceed further, we fail as before. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * test suite: Test symlink modification and deletion, not creationIan Jackson2017-07-16
| | | | | | | | | | | | | | | | We are going to tolerate symlink creation, because dpkg-source can consume patches to create symlinks (even though it cannot create them). Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * test suite: run git gc on tests/worktrees/example_1.0.tarIan Jackson2017-07-16
| | | | | | | | | | | | | | | | Specifically, git-gc --aggressive --prune=all This shrinks it quite a lot. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * test suite: Introduce example 1.1 orig containg some interesting objectsIan Jackson2017-07-16
| | | | | | | | | | | | | | | | | | | | | | We are going to want to test alternation/deletion of symlinks and non-644 files. To test this we need to switch to using example_1.1.orig.tar.gz (and the corresponding git branch in the worktree), so that we have such existing objects. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit-repos-server: Do not reject commits with no author/committer emailIan Jackson2017-07-16
| | | | | | | | | | | | | | | | | | But still insist on date, and hence on the actual committer and author commit header fields. Peter Green reports that eg 66c65d90db100435 in upstream linux.git is such a commit (and is accepted by github). Closes:#863353. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * test suite: import-dsc: Test missing files, particularly in ..Ian Jackson2017-07-16
| | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * test suite: t-report-fail: print $PWD as part of failure messageIan Jackson2017-07-16
| | | | | | | | | | | | This is really helpful when debugging. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit import: Avoid making broken symlinks in ..Ian Jackson2017-07-16
| | | | | | | | | | | | | | | | | | | | | | | | In most cases we could carry on and fail later. But creating a broken symlink is undesirable, particularly because it might prevent dgit from trying to make a non-broken symlink pointing elsewhere in future (or prevent dget from downloading the file). Even worse, if the dsc is in .. but an absolute path was provided, we would make a circular symlink! Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit import: Right error message for missing files in ..Ian Jackson2017-07-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Close examination of this code path reveals that: * The error is generated only if $there contains no slash. * This can only occur if $dscfn matches the first regexp, ie $dscfn is [./]../X in which case $there becomes X * So in this situation, $there is simply the dsc filename which is supposed to be in .. * What we should be testing is ../$f but that is $here which is what are trying to create and which we statted earlier and got ENOENT for. So this occurs when the dsc is in .. and a file it refers to is missing. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit import: Defend against broken symlinks in ..Ian Jackson2017-07-15
| | | | | | | | | | | | | | | | | | Provide a special error message if lstat succeeds but lstat fails. This is not hypothetical - currently even dgit import ../blah.dsc can generate this situation ! Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * Merge tag 'archive/debian/3.11_deb9u1' into stableIan Jackson2017-07-15
| |\ | | | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| | * changelog: finalise stable updatedebian/3.11_deb9u1archive/debian/3.11_deb9u1Ian Jackson2017-07-15
| | | | | | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
* | | Merge branch 'stable'Ian Jackson2017-07-09
|\ \ \ | |/ / | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * | dgit: Regularise patch filenames, and defend against funny commit subjectsIan Jackson2017-07-09
| | | | | | | | | | | | | | | | | | | | | * Do not specified patch names which look like series filenames * When we invent a filename based on a commit message, add ".patch". Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * | dgit: Pass --no-renames to git diff-tree -z, avoiding potential troubleIan Jackson2017-07-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Without this option, git-diff-tree might detect a rename (or possibly even a copy). If it does it prints a different output format with a status of C or R *and a separate filename*. The latter is an additional nul-terminated record and would get dgit's interpreter of the git diff-tree output out of step. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * | changelog: start 3.12~Ian Jackson2017-07-09
| |/ | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * changelog: finalise 3.11debian/3.11archive/debian/3.11Ian Jackson2017-07-08
| |
| * Actually understand foo,-security (!)Ian Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | | | There does not in fact seem to have been any code which implements this line from dgit(7): If a specified subsuite starts with - then mainsuite is prepended. The code which canonicalises it back to the version with ",-" does work, though. Closes:#867189. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: mkdir .git/info in setup_gitattrsIan Jackson2017-07-08
| | | | | | | | | | | | | | | | This might be necessary if setup_mergechangelogs were disabled. (This is something of a latent bug, since `git init' creates .git/info.) Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * changelog: Garden and reformatIan Jackson2017-07-08
| | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * test suite: Test multisuite clone without --rm-on-error.Ian Jackson2017-07-08
| | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: clone multisuite works even without --no-rm-on-error.Ian Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is slightly subtle. We need $rmonerror in cmd_clone to be cleared. cmd_clone does that only when clone itself returns. The multisuite plumbing means that currently, clone returns only in the child which set up the tree and set up the first suite. Unsetting $rmonerror there is correct because we want to keep the tree on success, and the parent will remove it if there is a later failure. (Ie, the child remains responsible for removing the tree if it itself fails.) In the parent, we get $multi_fetched==1 if not only our original clone child succeeded, but all the other fetches worked too. We are now responsible for the tree. If our final tasks are successful, again, we need not to delete the tree. Closes:#867434. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * test suite: badcommit-fixup: Check core.sharedRepository worksIan Jackson2017-07-08
| | | | | | | | Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit-badcommit-fixup: Honour core.sharedRepository.Ian Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | Closes:#867603. In principle it might be nicer to copy more options. But we don't want to duplicate the logic in prep_ud in dgit, and we don't want to make this script too standalone. I'm not aware of other options that are important, rather than nice-to-have tuneables. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: honour more pre-tree git config options in our private treesIan Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | These share the user's object store and we should manipulate the object store the way the user wants. In particular, core.sharedRepository is important. Prompted by #867603, which is the same bug in dgit-badcommit-fixup. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: tolerate compressor terminating with SIGPIPE.Ian Jackson2017-07-08
| | | | | | | | | | | | Closes:#857694. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: avoid dying with wrong message if compression failsIan Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | When dgit intended to report a decompressor had failed, it would instead crash with no useful message. This was due to generate_commits_from_dsc's @compr_cmd being shadowed inside the if $compr_ext. This is part of #857694. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * infrastructure: Cope with new git-receive-pack which has quarantine featureIan Jackson2017-07-08
| | | | | | | | | | | | | | | | | | Ie, work around #867702. See the bug there for discussion. (We are perhaps flying a little close to the wind with our wrapper script location, but it doesn't seem likely to break, to me.) Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * infra: dgit-repos-server: Break out mkscriptIan Jackson2017-07-08
| | | | | | | | | | | | No functional change. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: Add many pre_* to call no_local_git_cfgIan Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | For each operation which can meaningfully be run outside a git tree, arrange to call no_local_git_cfg and thus avoid running git config --local There is one slight infelicity: some subcommands (notably archive-api-query) could in theory be run within a git tree and expect that git tree to influence their output. However, this seems unlikely. In fact, I think there are probably only in-tree callers and the in-tree callers do not do this. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: Provide no_local_git_configIan Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | Part of the fix to #865863. No callers yet, so no functional change. This function not only arranges not to call git config --local. Removing 'local' from @gitcfgsources also prevents various config lookup machinery from trying to find information in $cfg{local} now of course does not exist. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: rpush: Do argument parsing and chdir in pre_...Ian Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The only thing in between pre_... and cmd_... os git_slurp_config. The code now in pre_... does the following things, all of these should be done before git_slurp_config: * Sets some global variables affecting debugging and logging output. If git_slurp_config is told to print debugging, it should be affected by these changes. * Rearranges its file descriptors so that stdin/stdout are as the rest of dgit expects, and the protocol is on PI/PO. If git_slurp_config were to use stdin/stdout, it ought to use the "normal" versions, and not access the protocol streams. * Checks and calculates the negotiated protocol version. This is not affected by the config, only by the arguments form the caller and our own idea of the protocol versions we support. * Changes to the appropriate working tree. Doing this before slurping the config arranges to honour the local git config from build host working tree. (It also avoids rpush failing on newer git due to asking for git config --local in the wrong place.) Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
| * dgit: Postpone call to git_slurp_configIan Jackson2017-07-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is needed to fix #865863: we need to know what our operation is, before we can decide whether to look for --local git config. The code which now runs earlier is: * The messages about $dryrun_level (which is set only by the command line, and not by configuration - verified by searching for $dryrun_level). * Usage failure if @ARGV empty. This is not affected by configuration. (parseopts does the argument parsing and already runs before git_slurp_config.) * Extracting the $cmd from @ARGV. * Calling $pre_fn. There is only one pre_* sub, which is pre_gbp_build. It provides the default for $quilt_mode. $quilt_mode is indeed somewhat entangled with the git config, but this takes place in parseopts_late_defaults, which is called much later. Therefore there is no functional change. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>