Browse Source

add support for apt-get build-dep foo.dsc

tags/debian/1.1.exp1
Michael Vogt 7 years ago
parent
commit
feab34c521
6 changed files with 141 additions and 3 deletions
  1. +19
    -0
      apt-pkg/deb/debsrcrecords.cc
  2. +7
    -0
      apt-pkg/deb/debsrcrecords.h
  3. +11
    -0
      apt-pkg/tagfile.cc
  4. +2
    -0
      apt-pkg/tagfile.h
  5. +17
    -3
      cmdline/apt-get.cc
  6. +85
    -0
      test/integration/test-apt-get-build-dep

+ 19
- 0
apt-pkg/deb/debsrcrecords.cc View File

@@ -18,6 +18,7 @@
#include <apt-pkg/aptconfiguration.h>
#include <apt-pkg/srcrecords.h>
#include <apt-pkg/tagfile.h>
#include <apt-pkg/gpgv.h>

#include <ctype.h>
#include <stdlib.h>
@@ -189,3 +190,21 @@ debSrcRecordParser::~debSrcRecordParser()
delete[] Buffer;
}
/*}}}*/


debDscRecordParser::debDscRecordParser(std::string const &DscFile)
: debSrcRecordParser(DscFile, NULL)
{
// support clear signed files
if (OpenMaybeClearSignedFile(DscFile, Fd) == false)
{
_error->Error("Failed to open %s", DscFile.c_str());
return;
}

// re-init to ensure the updated Fd is used
Tags.Init(&Fd);
// read the first (and only) record
Step();

}

+ 7
- 0
apt-pkg/deb/debsrcrecords.h View File

@@ -26,6 +26,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
/** \brief dpointer placeholder (for later in case we need it) */
void *d;

protected:
FileFd Fd;
pkgTagFile Tags;
pkgTagSection Sect;
@@ -60,4 +61,10 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
virtual ~debSrcRecordParser();
};

class debDscRecordParser : public debSrcRecordParser
{
public:
debDscRecordParser(std::string const &DscFile);
};

#endif

+ 11
- 0
apt-pkg/tagfile.cc View File

@@ -51,12 +51,23 @@ public:
// ---------------------------------------------------------------------
/* */
pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long long Size)
: d(NULL)
{
Init(pFd, Size);
}

void pkgTagFile::Init(FileFd *pFd,unsigned long long Size)
{
/* The size is increased by 4 because if we start with the Size of the
filename we need to try to read 1 char more to see an EOF faster, 1
char the end-pointer can be on and maybe 2 newlines need to be added
to the end of the file -> 4 extra chars */
Size += 4;
if(d != NULL)
{
free(d->Buffer);
delete d;
}
d = new pkgTagFilePrivate(pFd, Size);

if (d->Fd.IsOpen() == false)


+ 2
- 0
apt-pkg/tagfile.h View File

@@ -105,6 +105,8 @@ class pkgTagFile
unsigned long Offset();
bool Jump(pkgTagSection &Tag,unsigned long long Offset);

void Init(FileFd *F,unsigned long long Size = 32*1024);

pkgTagFile(FileFd *F,unsigned long long Size = 32*1024);
virtual ~pkgTagFile();
};


+ 17
- 3
cmdline/apt-get.cc View File

@@ -57,6 +57,9 @@
#include <apt-pkg/cacheiterators.h>
#include <apt-pkg/upgrade.h>

// FIXME: direct include of deb specific header
#include <apt-pkg/debsrcrecords.h>

#include <apt-private/acqprogress.h>
#include <apt-private/private-cacheset.h>
#include <apt-private/private-cachefile.h>
@@ -1053,12 +1056,23 @@ static bool DoBuildDep(CommandLine &CmdL)
for (const char **I = CmdL.FileList + 1; *I != 0; I++, J++)
{
string Src;
pkgSrcRecords::Parser *Last = FindSrc(*I,Recs,SrcRecs,Src,Cache);
pkgSrcRecords::Parser *Last = 0;
vector<pkgSrcRecords::Parser::BuildDepRec> BuildDeps;

// support local .dsc files
if (FileExists(*I) && flExtension(*I) == "dsc")
{
// FIXME: add a layer of abstraction
Last = new debDscRecordParser(*I);
Src = *I;
} else {
Last = FindSrc(*I,Recs,SrcRecs,Src,Cache);
}
if (Last == 0)
return _error->Error(_("Unable to find a source package for %s"),Src.c_str());
// Process the build-dependencies
vector<pkgSrcRecords::Parser::BuildDepRec> BuildDeps;
// FIXME: Can't specify architecture to use for [wildcard] matching, so switch default arch temporary
if (hostArch.empty() == false)
{
@@ -1071,7 +1085,7 @@ static bool DoBuildDep(CommandLine &CmdL)
}
else if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only", false), StripMultiArch) == false)
return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str());
// Also ensure that build-essential packages are present
Configuration::Item const *Opts = _config->Tree("APT::Build-Essential");
if (Opts)


+ 85
- 0
test/integration/test-apt-get-build-dep View File

@@ -0,0 +1,85 @@
#!/bin/sh
set -e

TESTDIR=$(readlink -f $(dirname $0))
. $TESTDIR/framework

setupenvironment
configarchitecture "i386"

buildsimplenativepackage 'debhelper' 'i386' '7' 'stable'
buildsimplenativepackage 'build-essential' 'i386' '1' 'stable'

setupaptarchive
cat > 2vcard_0.5-3.dsc <<EOF
Format: 1.0
Source: 2vcard
Binary: 2vcard
Architecture: all
Version: 0.5-3
Maintainer: Martin Albisetti <argentina@gmail.com>
Uploaders: Marcela Tiznado <mlt@debian.org>
Standards-Version: 3.8.0
Build-Depends: debhelper (>= 5.0.37)
Checksums-Sha1:
b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
Checksums-Sha256:
efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
Files:
f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz
EOF

testequal "Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
build-essential debhelper
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst build-essential (1 stable [i386])
Inst debhelper (7 stable [i386])
Conf build-essential (1 stable [i386])
Conf debhelper (7 stable [i386])" aptget build-dep -s 2vcard_0.5-3.dsc

cat > 2vcard_0.5-3.dsc <<EOF
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.0
Source: 2vcard
Binary: 2vcard
Architecture: all
Version: 0.5-3
Maintainer: Martin Albisetti <argentina@gmail.com>
Uploaders: Marcela Tiznado <mlt@debian.org>
Standards-Version: 3.8.0
Build-Depends: debhelper (>= 5.0.37)
Checksums-Sha1:
b7f1ce31ec856414a3f0f1090689f91aa7456d56 9398 2vcard_0.5.orig.tar.gz
5f9acd07ebda6ab00fa6b4fe3198c13e94090862 2036 2vcard_0.5-3.diff.gz
Checksums-Sha256:
efdc22859ac2f8f030d038dc4faa9020082ebae34212498c288968ffd45c9764 9398 2vcard_0.5.orig.tar.gz
82673ff3456af571094066c89bcea87b25c23c87cf1d0050b731e5222563626b 2036 2vcard_0.5-3.diff.gz
Files:
f73a69c170f772f3f6e75f2d11bbb792 9398 2vcard_0.5.orig.tar.gz
1e806d32233af87437258d86b1561f57 2036 2vcard_0.5-3.diff.gz

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkijKhsACgkQsrBfRdYmq7aA2gCfaOW9riTYVQMx5ajKQVAcctlC
z2UAn1oXgTai6opwhVfkxrlmJ+iRxzuc
=4eRd
-----END PGP SIGNATURE-----
EOF

testequal "Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
build-essential debhelper
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst build-essential (1 stable [i386])
Inst debhelper (7 stable [i386])
Conf build-essential (1 stable [i386])
Conf debhelper (7 stable [i386])" aptget build-dep --simulate 2vcard_0.5-3.dsc

Loading…
Cancel
Save