]> git.saurik.com Git - apt.git/commitdiff
show URI.Path in all acquire item descriptions
authorDavid Kalnischkies <david@kalnischkies.de>
Thu, 11 Jun 2015 08:56:31 +0000 (10:56 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Thu, 11 Jun 2015 08:56:31 +0000 (10:56 +0200)
It is a rather strange sight that index items use SiteOnly which strips
the Path, while e.g. deb files are downloaded with NoUserPassword which
does not. Important to note here is that for the file transport Path is
pretty important as there is no Host which would be displayed by Site,
which always resulted in "interesting" unspecific errors for "file:".

Adding a 'middle' ground between the two which does show the Path but
potentially modifies it (it strips a pending / at the end if existing)
solves this "file:" issue, syncs the output and in the end helps to
identify which file is meant exactly in progress output and co as a
single site can have multiple repositories in different paths.

17 files changed:
apt-pkg/contrib/strutl.cc
apt-pkg/contrib/strutl.h
apt-pkg/deb/debindexfile.cc
apt-pkg/deb/debmetaindex.cc
test/integration/test-apt-cache
test/integration/test-apt-cli-show
test/integration/test-apt-get-update-unauth-warning
test/integration/test-apt-translation-has-no-packages
test/integration/test-apt-update-nofallback
test/integration/test-apt-update-rollback
test/integration/test-bug-543966-downgrade-below-1000-pin
test/integration/test-bug-595691-empty-and-broken-archive-files
test/integration/test-cve-2013-1051-InRelease-parsing
test/integration/test-policy-pinning
test/integration/test-releasefile-verification
test/integration/test-ubuntu-bug-1098738-apt-get-source-md5sum
test/libapt/uri_test.cc

index 0db4c57b249f9e20fea0d0f3a7b40b4d811736f8..5731b5a2b157b4d316b698e7bcbee8132f9ca252 100644 (file)
@@ -1637,8 +1637,6 @@ URI::operator string()
 }
                                                                        /*}}}*/
 // URI::SiteOnly - Return the schema and site for the URI              /*{{{*/
-// ---------------------------------------------------------------------
-/* */
 string URI::SiteOnly(const string &URI)
 {
    ::URI U(URI);
@@ -1648,9 +1646,18 @@ string URI::SiteOnly(const string &URI)
    return U;
 }
                                                                        /*}}}*/
+// URI::ArchiveOnly - Return the schema, site and cleaned path for the URI /*{{{*/
+string URI::ArchiveOnly(const string &URI)
+{
+   ::URI U(URI);
+   U.User.clear();
+   U.Password.clear();
+   if (U.Path.empty() == false && U.Path[U.Path.length() - 1] == '/')
+      U.Path.erase(U.Path.length() - 1);
+   return U;
+}
+                                                                       /*}}}*/
 // URI::NoUserPassword - Return the schema, site and path for the URI  /*{{{*/
-// ---------------------------------------------------------------------
-/* */
 string URI::NoUserPassword(const string &URI)
 {
    ::URI U(URI);
index d64270aaf3d0714de2297000b1ab31b9b8fca9c2..01bbfef720a254b3e1615b2ddd7808386f69b2f8 100644 (file)
@@ -167,6 +167,7 @@ class URI
    inline void operator =(const std::string &From) {CopyFrom(From);}
    inline bool empty() {return Access.empty();};
    static std::string SiteOnly(const std::string &URI);
+   static std::string ArchiveOnly(const std::string &URI);
    static std::string NoUserPassword(const std::string &URI);
    
    URI(std::string Path) {CopyFrom(Path);}
index 1852486199b5a8067fd49267e0765327f1670c7b..20bf5ae50033694f4a3569acf47977760f9fbee3 100644 (file)
@@ -57,7 +57,7 @@ string debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const &Record,
                                   pkgSrcRecords::File const &File) const
 {
    string Res;
-   Res = ::URI::NoUserPassword(URI) + ' ';
+   Res = ::URI::ArchiveOnly(URI) + ' ';
    if (Dist[Dist.size() - 1] == '/')
    {
       if (Dist != "/")
@@ -116,7 +116,7 @@ string debSourcesIndex::Describe(bool Short) const
 /* */
 string debSourcesIndex::Info(const char *Type) const
 {
-   string Info = ::URI::NoUserPassword(URI) + ' ';
+   string Info = ::URI::ArchiveOnly(URI) + ' ';
    if (Dist[Dist.size() - 1] == '/')
    {
       if (Dist != "/")
@@ -210,7 +210,7 @@ debPackagesIndex::debPackagesIndex(string const &URI, string const &Dist, string
 /* This is a shorter version that is designed to be < 60 chars or so */
 string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator Ver) const
 {
-   string Res = ::URI::NoUserPassword(URI) + ' ';
+   string Res = ::URI::ArchiveOnly(URI) + ' ';
    if (Dist[Dist.size() - 1] == '/')
    {
       if (Dist != "/")
@@ -248,7 +248,7 @@ string debPackagesIndex::Describe(bool Short) const
 /* */
 string debPackagesIndex::Info(const char *Type) const 
 {
-   string Info = ::URI::NoUserPassword(URI) + ' ';
+   string Info = ::URI::ArchiveOnly(URI) + ' ';
    if (Dist[Dist.size() - 1] == '/')
    {
       if (Dist != "/")
@@ -473,7 +473,7 @@ string debTranslationsIndex::Describe(bool Short) const
 /* */
 string debTranslationsIndex::Info(const char *Type) const 
 {
-   string Info = ::URI::NoUserPassword(URI) + ' ';
+   string Info = ::URI::ArchiveOnly(URI) + ' ';
    if (Dist[Dist.size() - 1] == '/')
    {
       if (Dist != "/")
index e1f86d20f01fa76fd078914bf169c10ef01e9aa1..d4e340be003cdc0084aa4b8a3f8d07fccd0487b0 100644 (file)
@@ -25,7 +25,7 @@ using namespace std;
 
 string debReleaseIndex::MetaIndexInfo(const char *Type) const
 {
-   string Info = ::URI::SiteOnly(URI) + ' ';
+   string Info = ::URI::ArchiveOnly(URI) + ' ';
    if (Dist[Dist.size() - 1] == '/')
    {
       if (Dist != "/")
@@ -105,7 +105,7 @@ void foreachTarget(std::string const URI, std::string const Dist,
    else
       baseURI += "dists/" + Dist + "/";
    std::string const Release = (Dist == "/") ? "" : Dist;
-   std::string const Site = ::URI::SiteOnly(URI);
+   std::string const Site = ::URI::ArchiveOnly(URI);
    std::vector<std::string> lang = APT::Configuration::getLanguages(true);
    if (lang.empty())
       lang.push_back("none");
index f3db8024f4b83d9561097d8a212410276072c27e..97dc0f9393da8887f5ee26913aed0ac4b4059c39 100755 (executable)
@@ -50,7 +50,7 @@ testsuccessequal 'bar' aptcache pkgnames bar
 testsuccessequal 'fancy
 foo' aptcache pkgnames f
 
-testsuccessequal "       foo |          1 | file:$(readlink -f .)/aptarchive/ unstable/main amd64 Packages" aptcache madison foo
+testsuccessequal "       foo |          1 | file:$(readlink -f .)/aptarchive unstable/main amd64 Packages" aptcache madison foo
 
 ### depends
 
index 43072cf038df74d791c217d07c1e3f06556d3439..5f4ef1b48c7237e9e9acebf8b8aa23974c864edf 100755 (executable)
@@ -32,7 +32,7 @@ Maintainer: Joe Sixpack <joe@example.org>
 Installed-Size: 43.0 kB
 Download-Size: unknown
 APT-Manual-Installed: yes
-APT-Sources: file:$APTARCHIVE/ unstable/main i386 Packages
+APT-Sources: file:$APTARCHIVE unstable/main i386 Packages
 Description: Some description 
  That has multiple lines
 " apt show foo
index 81c01ba3e38ff9f096ae197a3ae7a4c0b23438ae..ada7f7a26769232c0faf12836b37be48dece6974 100755 (executable)
@@ -19,11 +19,11 @@ APTARCHIVE=$(readlink -f ./aptarchive)
 rm -f $APTARCHIVE/dists/unstable/*Release*
 
 # update without authenticated files leads to warning
-testfailureequal "Ign file: unstable InRelease
+testfailureequal "Ign file:$APTARCHIVE unstable InRelease
   File not found
-Err file: unstable Release
+Err file:$APTARCHIVE unstable Release
   File not found
-W: The repository 'file: unstable Release' does not have a Release file. This is deprecated, please contact the owner of the repository.
+W: The repository 'file:$APTARCHIVE unstable Release' does not have a Release file. This is deprecated, please contact the owner of the repository.
 E: Use --allow-insecure-repositories to force the update" aptget update --no-allow-insecure-repositories
 
 # no package foo
@@ -32,12 +32,12 @@ testequal 'lock
 partial' ls rootdir/var/lib/apt/lists
 
 # allow override
-testwarningequal "Ign file: unstable InRelease
+testwarningequal "Ign file:$APTARCHIVE unstable InRelease
   File not found
-Ign file: unstable Release
+Ign file:$APTARCHIVE unstable Release
   File not found
 Reading package lists...
-W: The repository 'file: unstable Release' does not have a Release file. This is deprecated, please contact the owner of the repository." aptget update --allow-insecure-repositories
+W: The repository 'file:$APTARCHIVE unstable Release' does not have a Release file. This is deprecated, please contact the owner of the repository." aptget update --allow-insecure-repositories
 # ensure we can not install the package
 testfailureequal "WARNING: The following packages cannot be authenticated!
   foo
index 440fd30cf706dd5fb0d8cb5b171ab01babdd79f3..cf5b56243eee5e8e7fc82acb6c9e3f122a351ecb 100755 (executable)
@@ -38,4 +38,4 @@ testsuccessequal "foo:
   Candidate: 1.0
   Version table:
      1.0 0
-        500 file:$APTARCHIVE/ unstable/main amd64 Packages" aptcache policy foo
+        500 file:$APTARCHIVE unstable/main amd64 Packages" aptcache policy foo
index f132bcf8e6327b14bf1e4fd91f1e7625c4570d70..2ded73122083e46ed2134f002c09d12a2e8378d8 100755 (executable)
@@ -33,7 +33,7 @@ EOF
 
 assert_update_is_refused_and_last_good_state_used()
 {
-    testfailuremsg "E: The repository 'file: unstable Release' is no longer signed." aptget update
+    testfailuremsg "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update
 
     assert_repo_is_intact
 }
@@ -171,7 +171,7 @@ test_inrelease_to_invalid_inrelease()
     sed -i 's/^Codename:.*/Codename: evil!/' $APTARCHIVE/dists/unstable/InRelease
     inject_evil_package
 
-    testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file: unstable InRelease: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+    testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
 
 W: Failed to fetch file:${APTARCHIVE}/dists/unstable/InRelease  The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
 
@@ -195,7 +195,7 @@ test_release_gpg_to_invalid_release_release_gpg()
     echo "Some evil data" >>  $APTARCHIVE/dists/unstable/Release
     inject_evil_package
 
-    testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file: unstable Release: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
+    testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable Release: The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
 
 W: Failed to fetch file:${APTARCHIVE}/dists/unstable/Release.gpg  The following signatures were invalid: BADSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org>
 
index 6ecf322b209fbcbcec4bc961f8ec0770056e950b..70619dd08279986cc28fa68b624022eff0e76130 100755 (executable)
@@ -78,7 +78,7 @@ test_inrelease_to_valid_release() {
     rm $APTARCHIVE/dists/unstable/Release.gpg
 
     # update fails
-    testfailureequal "E: The repository 'file: unstable Release' is no longer signed." aptget update -qq
+    testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq
 
     # test that security downgrade was not successful
     testfileequal lists.before "$(listcurrentlistsdirectory)"
@@ -101,7 +101,7 @@ test_inrelease_to_release_reverts_all() {
     break_repository_sources_index '+1hour'
 
     # ensure error
-    testfailureequal "E: The repository 'file: unstable Release' is no longer signed." aptget update -qq # -o Debug::acquire::transaction=1
+    testfailureequal "E: The repository 'file:${APTARCHIVE} unstable Release' is no longer signed." aptget update -qq # -o Debug::acquire::transaction=1
 
     # ensure that the Packages file is also rolled back
     testfileequal lists.before "$(listcurrentlistsdirectory)"
@@ -144,7 +144,7 @@ test_inrelease_to_unauth_inrelease() {
 
     signreleasefiles 'Marvin Paranoid'
 
-    testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file: unstable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E8525D47528144E2
+    testwarningequal "W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: file:${APTARCHIVE} unstable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E8525D47528144E2
 
 W: Failed to fetch file:$APTARCHIVE/dists/unstable/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E8525D47528144E2
 
index e59231608937175fb6ef31080a49e6643835c433..18039386749d75c06f1f9b63bb6b253b16d07ee7 100755 (executable)
@@ -13,7 +13,7 @@ insertinstalledpackage 'base-files' 'all' '5.0.0-1'
 setupaptarchive
 
 STATUS=$(readlink -f rootdir/var/lib/dpkg/status)
-APTARCHIVE="$(readlink -f aptarchive)/"
+APTARCHIVE="$(readlink -f aptarchive)"
 
 testsuccessequal "base-files:
   Installed: 5.0.0-1
index 486b8ba027242bea2d1624377884aa9c74cbe95c..b42212f5ea32f9f70c9457fbe7ce68c0a6e537bc 100755 (executable)
@@ -49,6 +49,7 @@ createemptyfile() {
 }
 
 testoverfile() {
+       local APTARCHIVE="$(readlink -f ./aptarchive)"
        forcecompressor "$1"
 
        createemptyfile 'en'
@@ -63,9 +64,9 @@ testoverfile() {
        testaptgetupdate 'Reading package lists...' "empty archive Packages.$COMPRESS over file"
 
        createemptyfile 'Packages'
-       testaptgetupdate "Err file:  Packages
+       testaptgetupdate "Err file:$APTARCHIVE  Packages
   Empty files can't be valid archives
-W: Failed to fetch ${COMPRESSOR}:$(readlink -f aptarchive/Packages.$COMPRESS)  Empty files can't be valid archives
+W: Failed to fetch ${COMPRESSOR}:${APTARCHIVE}/Packages.$COMPRESS  Empty files can't be valid archives
 
 E: Some index files failed to download. They have been ignored, or old ones used instead." "empty file Packages.$COMPRESS over file"
 }
index d9917455320fb159ff04edf8409b4764f5e7e2ad..933cbbd921b49760d3776d385fd9975e97bebd69 100755 (executable)
@@ -12,7 +12,7 @@ insertpackage 'stable' 'good-pkg' 'all' '1.0'
 setupaptarchive
 
 changetowebserver
-ARCHIVE='http://localhost:8080/'
+ARCHIVE='http://localhost:8080'
 msgtest 'Initial apt-get update should work with' 'InRelease'
 testsuccess --nomsg aptget update
 
index 2675b51bc579f832ce2796bf84376940307a78b9..9cd54264b16dcbc4eb26a7cdf42588ce9cd21618 100755 (executable)
@@ -20,7 +20,7 @@ testequalpolicy() {
        testsuccessequal "Package files:
  $(echo "$SP" | awk '{ printf("%3s\n",$0) }') ${STATUS}
      release a=now
- $(echo "$AP" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}/  Packages
+ $(echo "$AP" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}  Packages
      release c=
 Pinned packages:" aptcache policy $*
 }
@@ -105,11 +105,11 @@ testequalpolicycoolstuff() {
        local BPO1ARCHIVE=""
        local BPO2ARCHIVE=""
        if [ ! "$7" = "2.0~bpo2" ]; then
-               BPO1ARCHIVE="        $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}/ backports/main i386 Packages"
+               BPO1ARCHIVE="        $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main i386 Packages"
        else
                BPO2ARCHIVE="
      2.0~bpo2 $PB
-        $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}/ backports/main i386 Packages"
+        $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main i386 Packages"
                SB="$(echo "$SB" | tail -n 1)"
                shift
        fi
@@ -121,7 +121,7 @@ testequalpolicycoolstuff() {
  $IB 2.0~bpo1 $PB
 ${BPO1ARCHIVE}$SB
  $IS 1.0 $PB
-        $(echo "$AS" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}/ stable/main i386 Packages$SS" \
+        $(echo "$AS" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} stable/main i386 Packages$SS" \
                aptcache policy coolstuff -o Policy=${INSTALLED}-${CANDIDATE}-${AB}-${AS}-${PB} $*
 }
 
index 469ed34d2137d7037c93cbb085c58d0e3acee8f4..e8419524ce23fad929feb526d5ad9e47dedce34f 100755 (executable)
@@ -41,7 +41,7 @@ The following NEW packages will be installed:
   apt
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 After this operation, 5370 kB of additional disk space will be used.
-Get:1 http://localhost:8080/  apt 0.7.25.3
+Get:1 http://localhost:8080  apt 0.7.25.3
 Download complete and in download only mode' aptget install apt -dy
 }
 
@@ -54,7 +54,7 @@ The following NEW packages will be installed:
   apt
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 After this operation, 5808 kB of additional disk space will be used.
-Get:1 http://localhost:8080/  apt 0.8.0~pre1
+Get:1 http://localhost:8080  apt 0.8.0~pre1
 Download complete and in download only mode' aptget install apt -dy
 }
 
index 555d8fcaaa7216a7020766dfe74dae58506cf34e..6abb5d12a99d7035d3d05b68ae4f6908ffbd8ba9 100755 (executable)
@@ -148,8 +148,8 @@ testok() {
        testsuccessequal "Reading package lists...
 Building dependency tree...
 Need to get 6 B of source archives.
-Get:1 http://localhost:8080/  $1 1.0 (dsc) [3 B]
-Get:2 http://localhost:8080/  $1 1.0 (tar) [3 B]
+Get:1 http://localhost:8080  $1 1.0 (dsc) [3 B]
+Get:2 http://localhost:8080  $1 1.0 (tar) [3 B]
 Download complete and in download only mode" aptget source -d "$@"
        msgtest 'Files were successfully downloaded for' "$1"
        testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
@@ -175,11 +175,11 @@ testmismatch() {
        testfailureequal "Reading package lists...
 Building dependency tree...
 Need to get 6 B of source archives.
-Get:1 http://localhost:8080/  $1 1.0 (dsc) [3 B]
-Err http://localhost:8080/  $1 1.0 (dsc)
+Get:1 http://localhost:8080  $1 1.0 (dsc) [3 B]
+Err http://localhost:8080  $1 1.0 (dsc)
   Hash Sum mismatch
-Get:2 http://localhost:8080/  $1 1.0 (tar) [3 B]
-Err http://localhost:8080/  $1 1.0 (tar)
+Get:2 http://localhost:8080  $1 1.0 (tar) [3 B]
+Err http://localhost:8080  $1 1.0 (tar)
   Hash Sum mismatch
 E: Failed to fetch http://localhost:8080/${1}_1.0.dsc  Hash Sum mismatch
 
@@ -203,8 +203,8 @@ Download complete and in download only mode" aptget source -d "$@" -o Acquire::F
        testsuccessequal "Reading package lists...
 Building dependency tree...
 Need to get 6 B of source archives.
-Get:1 http://localhost:8080/  $1 1.0 (dsc) [3 B]
-Get:2 http://localhost:8080/  $1 1.0 (tar) [3 B]
+Get:1 http://localhost:8080  $1 1.0 (dsc) [3 B]
+Get:2 http://localhost:8080  $1 1.0 (tar) [3 B]
 Download complete and in download only mode" aptget source --allow-unauthenticated -d "$@" -o Acquire::ForceHash=ROT26
        msgtest 'Files were downloaded unauthenticated as user allowed it' "$1"
        testsuccess --nomsg test -e ${1}_1.0.dsc -a -e ${1}_1.0.tar.gz
@@ -240,9 +240,9 @@ testok pkg-mixed-ok
 testfailureequal 'Reading package lists...
 Building dependency tree...
 Need to get 6 B of source archives.
-Get:1 http://localhost:8080/  pkg-mixed-sha1-bad 1.0 (tar) [3 B]
-Get:2 http://localhost:8080/  pkg-mixed-sha1-bad 1.0 (dsc) [3 B]
-Err http://localhost:8080/  pkg-mixed-sha1-bad 1.0 (dsc)
+Get:1 http://localhost:8080  pkg-mixed-sha1-bad 1.0 (tar) [3 B]
+Get:2 http://localhost:8080  pkg-mixed-sha1-bad 1.0 (dsc) [3 B]
+Err http://localhost:8080  pkg-mixed-sha1-bad 1.0 (dsc)
   Hash Sum mismatch
 E: Failed to fetch http://localhost:8080/pkg-mixed-sha1-bad_1.0.dsc  Hash Sum mismatch
 
@@ -252,10 +252,10 @@ testsuccess --nomsg test ! -e pkg-mixed-sha1-bad_1.0.dsc -a -e pkg-mixed-sha1-ba
 testfailureequal 'Reading package lists...
 Building dependency tree...
 Need to get 6 B of source archives.
-Get:1 http://localhost:8080/  pkg-mixed-sha2-bad 1.0 (tar) [3 B]
-Err http://localhost:8080/  pkg-mixed-sha2-bad 1.0 (tar)
+Get:1 http://localhost:8080  pkg-mixed-sha2-bad 1.0 (tar) [3 B]
+Err http://localhost:8080  pkg-mixed-sha2-bad 1.0 (tar)
   Hash Sum mismatch
-Get:2 http://localhost:8080/  pkg-mixed-sha2-bad 1.0 (dsc) [3 B]
+Get:2 http://localhost:8080  pkg-mixed-sha2-bad 1.0 (dsc) [3 B]
 E: Failed to fetch http://localhost:8080/pkg-mixed-sha2-bad_1.0.tar.gz  Hash Sum mismatch
 
 E: Failed to fetch some archives.' aptget source -d pkg-mixed-sha2-bad
index 5d5ae9679da9d04ace35312355255abebaab1be5..fe6015e65c0322eb0b3b35c91fc15d111acaba7a 100644 (file)
@@ -13,6 +13,9 @@ TEST(URITest, BasicHTTP)
    EXPECT_EQ("www.debian.org", U.Host);
    EXPECT_EQ("/temp/test", U.Path);
    EXPECT_EQ("http://www.debian.org:90/temp/test", (std::string)U);
+   EXPECT_EQ("http://www.debian.org:90", URI::SiteOnly(U));
+   EXPECT_EQ("http://www.debian.org:90/temp/test", URI::ArchiveOnly(U));
+   EXPECT_EQ("http://www.debian.org:90/temp/test", URI::NoUserPassword(U));
    // Login data
    U = URI("http://jgg:foo@ualberta.ca/blah");
    EXPECT_EQ("http", U.Access);
@@ -22,6 +25,9 @@ TEST(URITest, BasicHTTP)
    EXPECT_EQ("ualberta.ca", U.Host);
    EXPECT_EQ("/blah", U.Path);
    EXPECT_EQ("http://jgg:foo@ualberta.ca/blah", (std::string)U);
+   EXPECT_EQ("http://ualberta.ca", URI::SiteOnly(U));
+   EXPECT_EQ("http://ualberta.ca/blah", URI::ArchiveOnly(U));
+   EXPECT_EQ("http://ualberta.ca/blah", URI::NoUserPassword(U));
 }
 TEST(URITest, SingeSlashFile)
 {
@@ -33,6 +39,9 @@ TEST(URITest, SingeSlashFile)
    EXPECT_EQ("", U.Host);
    EXPECT_EQ("/usr/bin/foo", U.Path);
    EXPECT_EQ("file:/usr/bin/foo", (std::string)U);
+   EXPECT_EQ("file:", URI::SiteOnly(U));
+   EXPECT_EQ("file:/usr/bin/foo", URI::ArchiveOnly(U));
+   EXPECT_EQ("file:/usr/bin/foo", URI::NoUserPassword(U));
 }
 TEST(URITest, BasicCDROM)
 {
@@ -44,6 +53,9 @@ TEST(URITest, BasicCDROM)
    EXPECT_EQ("Moo Cow Rom", U.Host);
    EXPECT_EQ("/debian", U.Path);
    EXPECT_EQ("cdrom://Moo Cow Rom/debian", (std::string)U);
+   EXPECT_EQ("cdrom://Moo Cow Rom", URI::SiteOnly(U));
+   EXPECT_EQ("cdrom://Moo Cow Rom/debian", URI::ArchiveOnly(U));
+   EXPECT_EQ("cdrom://Moo Cow Rom/debian", URI::NoUserPassword(U));
 }
 TEST(URITest, RelativeGzip)
 {
@@ -55,6 +67,9 @@ TEST(URITest, RelativeGzip)
    EXPECT_EQ(".", U.Host);
    EXPECT_EQ("/bar/cow", U.Path);
    EXPECT_EQ("gzip://./bar/cow", (std::string)U);
+   EXPECT_EQ("gzip://.", URI::SiteOnly(U));
+   EXPECT_EQ("gzip://./bar/cow", URI::ArchiveOnly(U));
+   EXPECT_EQ("gzip://./bar/cow", URI::NoUserPassword(U));
 }
 TEST(URITest, NoSlashFTP)
 {
@@ -66,6 +81,9 @@ TEST(URITest, NoSlashFTP)
    EXPECT_EQ("ftp.fr.debian.org", U.Host);
    EXPECT_EQ("/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", U.Path);
    EXPECT_EQ("ftp://ftp.fr.debian.org/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", (std::string)U);
+   EXPECT_EQ("ftp://ftp.fr.debian.org", URI::SiteOnly(U));
+   EXPECT_EQ("ftp://ftp.fr.debian.org/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", URI::ArchiveOnly(U));
+   EXPECT_EQ("ftp://ftp.fr.debian.org/debian/pool/main/x/xtel/xtel_3.2.1-15_i386.deb", URI::NoUserPassword(U));
 }
 TEST(URITest, RFC2732)
 {
@@ -77,6 +95,9 @@ TEST(URITest, RFC2732)
    EXPECT_EQ("1080::8:800:200C:417A", U.Host);
    EXPECT_EQ("/foo", U.Path);
    EXPECT_EQ("http://[1080::8:800:200C:417A]/foo", (std::string)U);
+   EXPECT_EQ("http://[1080::8:800:200C:417A]", URI::SiteOnly(U));
+   EXPECT_EQ("http://[1080::8:800:200C:417A]/foo", URI::ArchiveOnly(U));
+   EXPECT_EQ("http://[1080::8:800:200C:417A]/foo", URI::NoUserPassword(U));
    // with port
    U = URI("http://[::FFFF:129.144.52.38]:80/index.html");
    EXPECT_EQ("http", U.Access);
@@ -86,6 +107,9 @@ TEST(URITest, RFC2732)
    EXPECT_EQ("::FFFF:129.144.52.38", U.Host);
    EXPECT_EQ("/index.html", U.Path);
    EXPECT_EQ("http://[::FFFF:129.144.52.38]:80/index.html", (std::string)U);
+   EXPECT_EQ("http://[::FFFF:129.144.52.38]:80", URI::SiteOnly(U));
+   EXPECT_EQ("http://[::FFFF:129.144.52.38]:80/index.html", URI::ArchiveOnly(U));
+   EXPECT_EQ("http://[::FFFF:129.144.52.38]:80/index.html", URI::NoUserPassword(U));
    // extra colon
    U = URI("http://[::FFFF:129.144.52.38:]:80/index.html");
    EXPECT_EQ("http", U.Access);
@@ -95,6 +119,9 @@ TEST(URITest, RFC2732)
    EXPECT_EQ("::FFFF:129.144.52.38:", U.Host);
    EXPECT_EQ("/index.html", U.Path);
    EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80/index.html", (std::string)U);
+   EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80", URI::SiteOnly(U));
+   EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80/index.html", URI::ArchiveOnly(U));
+   EXPECT_EQ("http://[::FFFF:129.144.52.38:]:80/index.html", URI::NoUserPassword(U));
    // extra colon port
    U = URI("http://[::FFFF:129.144.52.38:]/index.html");
    EXPECT_EQ("http", U.Access);
@@ -104,6 +131,9 @@ TEST(URITest, RFC2732)
    EXPECT_EQ("::FFFF:129.144.52.38:", U.Host);
    EXPECT_EQ("/index.html", U.Path);
    EXPECT_EQ("http://[::FFFF:129.144.52.38:]/index.html", (std::string)U);
+   EXPECT_EQ("http://[::FFFF:129.144.52.38:]", URI::SiteOnly(U));
+   EXPECT_EQ("http://[::FFFF:129.144.52.38:]/index.html", URI::ArchiveOnly(U));
+   EXPECT_EQ("http://[::FFFF:129.144.52.38:]/index.html", URI::NoUserPassword(U));
    // My Evil Corruption of RFC 2732 to handle CDROM names!
    // Fun for the whole family! */
    U = URI("cdrom:[The Debian 1.2 disk, 1/2 R1:6]/debian/");
@@ -114,6 +144,9 @@ TEST(URITest, RFC2732)
    EXPECT_EQ("The Debian 1.2 disk, 1/2 R1:6", U.Host);
    EXPECT_EQ("/debian/", U.Path);
    EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]/debian/", (std::string)U);
+   EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]", URI::SiteOnly(U));
+   EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]/debian", URI::ArchiveOnly(U));
+   EXPECT_EQ("cdrom://[The Debian 1.2 disk, 1/2 R1:6]/debian/", URI::NoUserPassword(U));
    // no brackets
    U = URI("cdrom:Foo Bar Cow/debian/");
    EXPECT_EQ("cdrom", U.Access);
@@ -123,9 +156,15 @@ TEST(URITest, RFC2732)
    EXPECT_EQ("Foo Bar Cow", U.Host);
    EXPECT_EQ("/debian/", U.Path);
    EXPECT_EQ("cdrom://Foo Bar Cow/debian/", (std::string)U);
+   EXPECT_EQ("cdrom://Foo Bar Cow", URI::SiteOnly(U));
+   EXPECT_EQ("cdrom://Foo Bar Cow/debian", URI::ArchiveOnly(U));
+   EXPECT_EQ("cdrom://Foo Bar Cow/debian/", URI::NoUserPassword(U));
    // percent encoded
    U = URI("ftp://foo:b%40r@example.org");
    EXPECT_EQ("foo", U.User);
    EXPECT_EQ("b@r", U.Password);
    EXPECT_EQ("ftp://foo:b%40r@example.org/", (std::string) U);
+   EXPECT_EQ("ftp://example.org", URI::SiteOnly(U));
+   EXPECT_EQ("ftp://example.org", URI::ArchiveOnly(U));
+   EXPECT_EQ("ftp://example.org/", URI::NoUserPassword(U));
 }