aboutsummaryrefslogtreecommitdiff
path: root/libbpkg
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2018-07-05 13:54:08 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2018-07-05 13:54:08 +0300
commitdfcbb65ed9b65f392fc250cb91124e4793b49c14 (patch)
treeb1babbf49d386b85a07e7743e973a2d9c63c6913 /libbpkg
parentac884344b24112b11cd6cad0a7cf41f036159a22 (diff)
Guess repository type for relative locations and consider git type for all locations with .git extension
Diffstat (limited to 'libbpkg')
-rw-r--r--libbpkg/manifest.cxx30
-rw-r--r--libbpkg/manifest.hxx9
2 files changed, 12 insertions, 27 deletions
diff --git a/libbpkg/manifest.cxx b/libbpkg/manifest.cxx
index dc488de..af2a889 100644
--- a/libbpkg/manifest.cxx
+++ b/libbpkg/manifest.cxx
@@ -2062,13 +2062,14 @@ namespace bpkg
}
case repository_protocol::http:
case repository_protocol::https:
- {
- return url.path->extension () == "git"
- ? repository_type::git
- : repository_type::pkg;
- }
case repository_protocol::file:
{
+ if (url.path->extension () == "git")
+ return repository_type::git;
+
+ if (url.scheme != repository_protocol::file) // HTTP(S)?
+ return repository_type::pkg;
+
return local &&
dir_exists (path_cast<dir_path> (*url.path) / dir_path (".git"))
? repository_type::git
@@ -2751,25 +2752,8 @@ namespace bpkg
{
repository_url u (move (location->value));
- // If the prerequisite repository type is not specified explicitly then
- // we consider it to be the base repository type for the relative
- // location or guess it otherwise.
- //
if (!type)
- {
- if (u.scheme == repository_protocol::file && u.path->relative ())
- {
- type = base_type;
-
- // Strip the URL fragment if the base repository type is dir (see
- // the Repository Manifest documentation for the gory details).
- //
- if (base_type == repository_type::dir)
- u.fragment = nullopt;
- }
- else
- type = guess_type (u, false); // Can't throw.
- }
+ type = guess_type (u, false); // Can't throw.
// Call prerequisite repository location constructor, do not amend
// relative path.
diff --git a/libbpkg/manifest.hxx b/libbpkg/manifest.hxx
index fc6c332..59359b4 100644
--- a/libbpkg/manifest.hxx
+++ b/libbpkg/manifest.hxx
@@ -616,11 +616,12 @@ namespace bpkg
//
// 1. If scheme is git then git.
//
- // 2. If scheme is http(s), then check if path has the .git extension,
- // then git, otherwise pkg.
+ // 2. If path has the .git extension then git.
//
- // 3. If local (which will normally be without the .git extension), check
- // if directory contains the .git/ subdirectory then git, otherwise pkg.
+ // 3. If scheme is http(s) then pkg.
+ //
+ // 4. If local, check if directory contains the .git/ subdirectory then
+ // git, otherwise pkg.
//
// Can throw system_error in the later case.
//