mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-09 19:13:26 +03:00
update-source-version: escape special characters when replacing url
URLs can contain characters that sed would consider special in the context of the regex pattern. Let’s switch the URL replacement `sed` command to use POSIX Basic Regular Expression syntax to reduce the number of characters that need to be escaped: https://www.gnu.org/software/sed/manual/html_node/BRE-syntax.html Then, let’s escape all BRE special characters, plus the separator character `|` of the `s` command in the old URL pattern. Similarly, the replacement part of the `s` command (new URL) can also contain special characters (e.g. the `&` character would be replaced with the whole matched expression), so we need to escape it as well: https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html Co-Authored-By: Jan Tojnar <jtojnar@gmail.com>
This commit is contained in:
parent
49b6072f10
commit
dfb8bf17cf
1 changed files with 4 additions and 3 deletions
|
@ -229,10 +229,11 @@ if [[ -n "$newUrl" ]]; then
|
|||
die "Couldn't evaluate source url from '$attr.$sourceKey'!"
|
||||
fi
|
||||
|
||||
# Escape regex metacharacter that are allowed in store path names
|
||||
oldUrlEscaped=$(echo "$oldUrl" | sed -re 's|[${}.+?]|\\&|g')
|
||||
# Escape regex metacharacter that may appear in URLs
|
||||
oldUrlEscaped=$(echo "$oldUrl" | sed -e 's|[*.^$[\|]|\\&|g')
|
||||
newUrlEscaped=$(echo "$newUrl" | sed -e 's|[&\|]|\\&|g')
|
||||
|
||||
sed -i.cmp "$nixFile" -re "s|\"$oldUrlEscaped\"|\"$newUrl\"|"
|
||||
sed -i.cmp "$nixFile" -e "s|\"$oldUrlEscaped\"|\"$newUrlEscaped\"|"
|
||||
if cmp -s "$nixFile" "$nixFile.cmp"; then
|
||||
die "Failed to replace source URL '$oldUrl' to '$newUrl' in '$attr'!"
|
||||
fi
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue