From 6e5e3972542baa1c715e13a36c1144f148c6320b Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 19 Jun 2019 20:28:38 +0300 Subject: Consider only latest revisions for git repository location default set --- bpkg/fetch-git.cxx | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'bpkg/fetch-git.cxx') diff --git a/bpkg/fetch-git.cxx b/bpkg/fetch-git.cxx index 5ffc9a6..689a927 100644 --- a/bpkg/fetch-git.cxx +++ b/bpkg/fetch-git.cxx @@ -1073,13 +1073,41 @@ namespace bpkg caps (); refs::search_result r; + vector vs; // Parallel to search_result. + for (const ref& rf: load_refs (co, url ())) { - if (!rf.peeled && - rf.name.compare (0, 11, "refs/tags/v") == 0 && + if (!rf.peeled && rf.name.compare (0, 11, "refs/tags/v") == 0) + { + optional v ( parse_standard_version (string (rf.name, 11), - standard_version::allow_stub)) - r.push_back (rf); + standard_version::allow_stub)); + + if (v) + { + // Add this tag reference into the default set if it doesn't + // contain this version yet or replace the existing reference if + // this revision is greater. + // + auto i (find_if ( + vs.begin (), vs.end (), + [&v] (const standard_version& i) + { + return i.compare (*v, true /* ignore_revision */) == 0; + })); + + if (i == vs.end ()) + { + r.push_back (rf); + vs.push_back (move (*v)); + } + else if (*i < *v) + { + r[i - vs.begin ()] = rf; + *i = move (*v); + } + } + } } return r; -- cgit v1.1