aboutsummaryrefslogtreecommitdiffstats
path: root/Mk
diff options
context:
space:
mode:
authortobik <tobik@FreeBSD.org>2017-07-19 22:00:16 +0800
committertobik <tobik@FreeBSD.org>2017-07-19 22:00:16 +0800
commit5b72b85b7162ce5d93c8b4e4b5dc9325df6506e8 (patch)
tree3fc4dbc3f57cd0973fe6e3df1a0b18d158737ac0 /Mk
parentca4d11d6b4a5c9abb35eee6ecbe0bb41cdae1096 (diff)
downloadfreebsd-ports-gnome-5b72b85b7162ce5d93c8b4e4b5dc9325df6506e8.tar.gz
freebsd-ports-gnome-5b72b85b7162ce5d93c8b4e4b5dc9325df6506e8.tar.zst
freebsd-ports-gnome-5b72b85b7162ce5d93c8b4e4b5dc9325df6506e8.zip
When specifying Git dependencies in Cargo.toml developers can set 3
additional keys: rev, branch, tag [1]. These are reflected in a projects' Cargo.lock file as e.g. git+https://github.com/servo/angle?branch=servo#a1371e8a160128677af863d1d73f150862ba42b2 git+https://github.com/rust-lang/libc?tag=0.2.26#288942e6858a4b2f8ee56338da5386263b9c4b82 Currently cargo-crates.awk generates the wrong output in these cases: GH_TUPLE= servo:angle?branch=servo:a1371e8a160128677af863d1d73f150862ba42b2:angle \ rust-lang:libc?tag=0.2.26:288942e6858a4b2f8ee56338da5386263b9c4b82:libc Fix cargo-crates.awk to ignore the query string (except in the tag case) and generate GH_TUPLE= servo:angle:a1371e8a160128677af863d1d73f150862ba42b2:angle \ rust-lang:libc:0.2.26:libc instead. [1] https://github.com/rust-lang/cargo/blob/master/src/doc/specifying-dependencies.md#specifying-dependencies-from-git-repositories PR: 220548 Reported by: jbeich Reviewed by: jbeich, mat Differential Revision: https://reviews.freebsd.org/D11571
Diffstat (limited to 'Mk')
-rw-r--r--Mk/Scripts/cargo-crates.awk53
1 files changed, 44 insertions, 9 deletions
diff --git a/Mk/Scripts/cargo-crates.awk b/Mk/Scripts/cargo-crates.awk
index cf4302204d00..8daaf05065eb 100644
--- a/Mk/Scripts/cargo-crates.awk
+++ b/Mk/Scripts/cargo-crates.awk
@@ -1,3 +1,6 @@
+# MAINTAINER: ports@FreeBSD.org
+# $FreeBSD$
+
BEGIN {
gh_tuple_len = 0
crates_len = 0
@@ -17,18 +20,50 @@ BEGIN {
gsub("[^a-zA-Z_]", "", package_name)
}
-/^source = "git\+(https|http|git):\/\/github.com\/.*#.*"/ {
- split($3, url, "#")
+function split_url(s) {
+ # scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
+ split(s, url_scheme, "://")
+ url["scheme"] = url_scheme[1]
- gsub("^\"git\+", "", url[1])
- split(url[1], repourl, "/")
- account = repourl[4]
- project = repourl[5]
- gsub("\.git$", "", project)
+ split(url_scheme[2], url_fragment, "#")
+ url["fragment"] = url_fragment[2]
- tag = url[2]
- gsub("\"$", "", tag)
+ split(url_fragment[1], url_query, "?")
+ url["query"] = url_query[2]
+ split(url_query[1], url_authority, "/")
+ url["path"] = substr(url_query[1], length(url_authority[1]) + 1)
+
+ split(url_authority[1], url_auth, "@")
+
+ if (length(url_auth) == 2) {
+ split(url_auth[1], url_user, ":")
+ url["user"] = url_user[1]
+ url["password"] = url_user[2]
+ split(url_auth[2], url_host, ":")
+ } else {
+ url["user"] = ""
+ url["password"] = ""
+ split(url_auth[1], url_host, ":")
+ }
+ url["host"] = url_host[1]
+ url["port"] = url_host[2]
+}
+
+/^source = "git\+(https|http|git):\/\/github.com\/.*#.*"/ {
+ split_url(substr($3, 1, length($3) - 1))
+
+ split(url["path"], path, "/")
+ account = path[2]
+ project = path[3]
+ gsub("\.git$", "", project)
+
+ if (match(url["query"], "^tag=")) {
+ split(url["query"], tag_, "=")
+ tag = tag_[2]
+ } else {
+ tag = url["fragment"]
+ }
gh_tuple[gh_tuple_len++] = sprintf(\
"%s:%s:%s:%s", account, project, tag, package_name)
}