[Bug 1175557] Re: adt-run fulfills dependencies with --built-tree contrary to the manpage
Ian Jackson
ijackson at chiark.greenend.org.uk
Tue Jan 28 17:36:50 UTC 2014
Robie Basak writes ("Re: [Bug 1175557] Re: adt-run fulfills dependencies with --built-tree contrary to the manpage"):
> On Tue, Jan 28, 2014 at 04:22:06PM -0000, Ian Jackson wrote:
> > Do you want me to try to explain how I think they're supposed to
> > work ?
>
> Please! I said this to pitti on IRC earlier:
>
> 11:10 <rbasak> pitti: incidentally, I find the manpage very confusing
> and ambiguous whenever I'm trying to understand what the different
> --built-tree, --unbuilt-tree, --source and --binary options will
> actually do in terms of build or no build, where the build dependencies
> will come from, and what test dependencies will be fulfilled and where
> they will come from.
So:
--unbuilt-tree and --dsc do the same thing: they, by default:
* build the tree
* use the binaries produced to satisfy any build-dependencies for
sources further on the command line
* use the binaries produced to satisfy any dependencies for tests
further on the command line
* run any applicable tests in that source package
It is possible to individually control these uses to which the tree is
put, though:
If --no-built-binaries, or --built-binaries-filter, or --binaries (or
--binaries-forbuilds or --binaries-fortests) is specified, then the
binaries aren't used for some of those purposes.
If --sources-no-tests is used, that source package's tests are not
run.
The relevant --*binaries* options are all the ones which precede a
particular --unbuilt-tree or --dsc, with later options of the same
kind overriding earlier ones.
I think, but am not sure, that there is an optimisation: if you
specify that the binaries from the source should not be used, and the
package's tests don't require the built source tree, then perhaps
adt-run won't build the source at all - since nothing needs it (and
you presumably weren't using adt-run for an archive rebuild test).
--binary specifies just a binary package to be used for tests which
appear subsequently on the adt-run command line. It will be used (by
default) to satisfy dependencies. --binary is subject to the effects
of preceding --binaries= and --binaries-forbuilds= and
--binaries-fortests= options. So if you say
--binaries=install --binary foo.deb --binaries=auto [more stuff]
then foo.deb will be unconditionally installed while the
tests specified by [more stuff] take place.
--built-tree specifies some tests to be run, but does not provide any
binaries.
Another way to look at it is for me to explain the implementation of
the option/argument processor:
* --built-binaries-filter sets a set of patterns. The set of
patterns is applied to subsequent --unbuilt-tree and --source
options. Any packages produced by the build matching the filter
are treated as if they had been specified explicitly with --binary
at the same place in the command line as the source package dide.
* --binaries[-forbuilds|-fortests]=ignore|auto|install: There are two
tristate variables, one for --binaries-forbuilds and one for
--binaries-fortests. Saying just --binaries= sets both.
--binaries-forbuilds applies when we are doing builds, and
--binaries-fortests when we are doing tests. The tristates apply
to all subsequently encountered binary packages (i.e. .debs on the
command line, and binaries (except those filtered out) produced by
sources on the command line.
This is mostly done with the variable "arghandling" in parse_args.
Every time it is modified, it is copied. Every time an actual action
argument is supplied, the current arghandling is saved away.
Does that help ? Catch me on irc if you have more questions (Diziet
on oftc/freenode.)
Ian.
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to autopkgtest in Ubuntu.
https://bugs.launchpad.net/bugs/1175557
Title:
adt-run fulfills dependencies with --built-tree contrary to the
manpage
Status in “autopkgtest” package in Ubuntu:
Fix Committed
Bug description:
adt-run(1) says:
--built-tree directory
Specifies that tests from the built source tree directory should
be run. Note that the packages that would normally be installed
as a result of @ in the tests' Depends field (which includes the
case where the Depends field is not specified) are not
installed. The caller must explicitly instruct adt-run to
install any relevant packages.
On the other hand, when I run:
adt-run --built-tree facter-1.6.10 --- adt-virt-schroot saucy-
amd64
then it fulfils the facter test dependency from the archive. I
expected it not to fulfil the dependency and thus for my test to fail.
This is a problem for me because I am trying to test my new dep8 test
for facter to prevent a recurrence of bug 1173265. In order to test my
test, I'm trying to run my new test against a locally rebuilt deb of
facter 1.6.9-2ubuntu1 to verify that it correctly detects the failure
case. So I ran:
adt-run --binaries-fortests=install --binary
facter_1.6.9-2ubuntu1_all.deb --built-tree facter-1.6.10 --- adt-virt-
schroot saucy-amd64
(facter_1.6.9-2ubuntu1_all.deb is my locally rebuilt version, and
factor-1.6.10 is a directory that contains my newest yet-to-upload
merge of facter that includes a new smoke test)
I expected this to fulfill the facter dependency in my test from the
deb, rather than from the archive. But adt-run appeared to ignore this
and fulfill it from the archive instead, causing the test run to pass,
instead of running it from my local .deb and causing the test to fail.
I'm not sure if I'm calling adt-run correctly here, but I am confused
by the documentation. So I reduced the problem and found behaviour
that directly contracts the manpage, as above.
This bug is for the first case, where --built-tree fulfils
dependencies in direct contradiction of the documentation.
ProblemType: Bug
DistroRelease: Ubuntu 13.04
Package: autopkgtest 2.2.3ubuntu4
ProcVersionSignature: User Name 3.8.0-19.29-generic 3.8.8
Uname: Linux 3.8.0-19-generic x86_64
ApportVersion: 2.9.2-0ubuntu8
Architecture: amd64
Date: Thu May 2 11:04:13 2013
Ec2AMI: ami-000002a8
Ec2AMIManifest: FIXME
Ec2AvailabilityZone: nova
Ec2InstanceType: m1.small
Ec2Kernel: unavailable
Ec2Ramdisk: unavailable
MarkForUpload: True
PackageArchitecture: all
ProcEnviron:
TERM=screen
LC_COLLATE=C
PATH=(custom, no user)
LANG=en_US.UTF-8
SHELL=/bin/bash
SourcePackage: autopkgtest
UpgradeStatus: No upgrade log present (probably fresh install)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/autopkgtest/+bug/1175557/+subscriptions
More information about the foundations-bugs
mailing list