forked from tokio-rs/tokio
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: script updating versions in links to docs.rs (tokio-rs#1249)
- Loading branch information
1 parent
461eebe
commit f529928
Showing
2 changed files
with
122 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
#!/usr/bin/env bash | ||
set -e | ||
USAGE="Update links to docs.rs in a tokio crate | ||
USAGE: | ||
$(basename "$0") [OPTIONS] [CRATE] [VERSION] | ||
OPTIONS: | ||
-d, --dry-run Perform a dry run (do not modify any file) | ||
-h, --help Show this help text and exit" | ||
|
||
err() { | ||
echo -e "\e[31m\e[1merror:\e[0m $@" 1>&2; | ||
} | ||
|
||
status() { | ||
WIDTH=12 | ||
printf "\e[32m\e[1m%${WIDTH}s\e[0m %s\n" "$1" "$2" | ||
} | ||
|
||
c1grep() { grep "$@" || test $? = 1; } | ||
|
||
update_versions_in_doc() { | ||
# Print what is being/would be done | ||
if [ -n "$DRY_RUN" ]; then | ||
local MSG="Would change:" | ||
else | ||
local MSG="Updating:" | ||
fi | ||
git grep -lr "docs.rs/$CRATE/" \ | ||
| xargs sed --quiet \ | ||
-E "s|docs.rs/$CRATE/[0-9.]+|docs.rs/$CRATE/$VERSION|gp" \ | ||
| sed -e "s/^/$MSG /" | ||
|
||
# Apply changes if not in dry run | ||
if [ -z "$DRY_RUN" ]; then | ||
git grep -lr "docs.rs/$CRATE/" \ | ||
| xargs sed -i \ | ||
-E "s|docs.rs/$CRATE/[0-9.]+|docs.rs/$CRATE/$VERSION|g" | ||
fi | ||
} | ||
|
||
update() { | ||
update_versions_in_doc | ||
} | ||
|
||
show_outdated() { | ||
OUTDATED=$(git grep -rn "docs.rs/$CRATE/" \ | ||
| c1grep -v "$VERSION" \ | ||
| sed -e 's/^/ - /') | ||
if [[ -n "$OUTDATED" ]]; then | ||
echo "Found the following links to docs.rs with an outdated version:" | ||
echo "$OUTDATED" | ||
echo | ||
else | ||
echo "Nothing to do." | ||
exit 1 | ||
fi | ||
} | ||
|
||
while [[ $# -gt 0 ]] | ||
do | ||
|
||
case "$1" in | ||
-h|--help) | ||
echo "$USAGE" | ||
exit 0 | ||
;; | ||
-d|--dry-run) | ||
DRY_RUN="--dry-run" | ||
shift | ||
;; | ||
-*) | ||
err "unknown flag \"$1\"" | ||
echo "$USAGE" | ||
exit 1 | ||
;; | ||
*) # crate or version | ||
if [ -z "$CRATE" ]; then | ||
CRATE="$1" | ||
elif [ -z "$VERSION" ]; then | ||
VERSION="$1" | ||
else | ||
err "unknown positional argument \"$1\"" | ||
echo "$USAGE" | ||
exit 1 | ||
fi | ||
shift | ||
;; | ||
esac | ||
done | ||
# set -- "${POSITIONAL[@]}" | ||
|
||
if [ -z "$VERSION" ]; then | ||
err "no version specified!" | ||
HELP=1 | ||
fi | ||
|
||
if [ -n "$CRATE" ]; then | ||
TAG="$CRATE-$VERSION" | ||
else | ||
err "no crate specified!" | ||
HELP=1 | ||
fi | ||
|
||
if [ -n "$HELP" ]; then | ||
echo "$USAGE" | ||
exit 1 | ||
fi | ||
|
||
if [ -d "$CRATE" ]; then | ||
# Does not cd in order to update everywhere | ||
show_outdated && update | ||
else | ||
err "no such crate \"$CRATE\"" | ||
exit 1 | ||
fi | ||
|