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
This commit is contained in:
parent
eed792d29a
commit
05b30a8d06
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=446198
1 changed files with 45 additions and 10 deletions
|
@ -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)
|
||||
}
|
||||
|
||||
function split_url(s) {
|
||||
# scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
|
||||
split(s, url_scheme, "://")
|
||||
url["scheme"] = url_scheme[1]
|
||||
|
||||
split(url_scheme[2], url_fragment, "#")
|
||||
url["fragment"] = url_fragment[2]
|
||||
|
||||
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($3, url, "#")
|
||||
|
||||
gsub("^\"git\+", "", url[1])
|
||||
split(url[1], repourl, "/")
|
||||
account = repourl[4]
|
||||
project = repourl[5]
|
||||
split_url(substr($3, 1, length($3) - 1))
|
||||
|
||||
split(url["path"], path, "/")
|
||||
account = path[2]
|
||||
project = path[3]
|
||||
gsub("\.git$", "", project)
|
||||
|
||||
tag = url[2]
|
||||
gsub("\"$", "", tag)
|
||||
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue