diff options
-rw-r--r-- | contrib/completion/zsh/_devtools.in | 6 | ||||
-rw-r--r-- | src/pkgrepo.in | 67 |
2 files changed, 73 insertions, 0 deletions
diff --git a/contrib/completion/zsh/_devtools.in b/contrib/completion/zsh/_devtools.in index 06e05e1..d30648a 100644 --- a/contrib/completion/zsh/_devtools.in +++ b/contrib/completion/zsh/_devtools.in @@ -19,6 +19,7 @@ _pkgrepo_cmds=( "pkgrepo command" "clone[Clone a package repository]" "configure[Configure a clone according to distro specs]" + "web[Open the packaging repository's website]" ) _pkgrepo_clone_args=( @@ -35,6 +36,11 @@ _pkgrepo_configure_args=( '*:git_dir:_files -/' ) +_pkgrepo_web_args=( + '(-h --help)'{-h,--help}'[Display usage]' + '*:git_dir:_files -/' +) + _arch_nspawn_args=( '-C[Location of a pacman config file]:pacman_config:_files -g "*.conf(.)"' '-M[Location of a makepkg config file]:makepkg_config:_files -g "*.conf(.)"' diff --git a/src/pkgrepo.in b/src/pkgrepo.in index 13f8847..c6f5951 100644 --- a/src/pkgrepo.in +++ b/src/pkgrepo.in @@ -28,6 +28,7 @@ usage() { COMMANDS clone Clone a package repository configure Configure a clone according to distro specs + web Opens the packaging repository's website OPTIONS -h, --help Show this help text @@ -72,6 +73,18 @@ usage_configure() { _EOF_ } +usage_web() { + cat <<- _EOF_ + Usage: ${COMMAND} web [PKGNAME...] + + Opens the packaging repository's website via xdg-open. If called with + no arguments, open the package cloned in the current working directory. + + OPTIONS + -h, --help Show this help text +_EOF_ +} + if (( $# < 1 )); then usage exit 1 @@ -107,6 +120,11 @@ while (( $# )); do shift break ;; + web) + WEB=1 + shift + break + ;; *) die "invalid argument: %s" "$1" ;; @@ -184,6 +202,26 @@ elif (( CONFIGURE )); then ;; esac done +elif (( WEB )); then + # option checking + while (( $# )); do + case $1 in + -h|--help) + usage_web + exit 0 + ;; + --) + shift + break + ;; + -*) + die "invalid argument: %s" "$1" + ;; + *) + break + ;; + esac + done fi pkgbases=("$@") @@ -231,6 +269,31 @@ if (( CLONE_ALL )); then stat_done fi +# Check web mode requirements and current directory shorthand +if (( WEB )); then + # Check if web mode has xdg-open + if ! command -v xdg-open &>/dev/null; then + die "The web command requires 'xdg-open'" + fi + + # Check if used without pkgnames in a packaging directory + if (( ! $# )); then + path=${PWD} + if [[ ! -d "${path}/.git" ]]; then + die "Not a Git repository: ${path}" + fi + + giturl=$(git -C "${path}" remote get-url origin) + if [[ ${giturl} != *${GIT_PACKAGING_NAMESPACE}* ]]; then + die "Not a packaging repository: ${path}" + fi + + pkgbase=$(basename "${giturl}") + pkgbase=${pkgbase%.git} + pkgbases=("${pkgbase}") + fi +fi + for pkgbase in "${pkgbases[@]}"; do if (( CLONE )); then if [[ ! -d ${pkgbase} ]]; then @@ -274,4 +337,8 @@ for pkgbase in "${pkgbases[@]}"; do fi fi fi + + if (( WEB )); then + xdg-open "${GIT_PACKAGING_URL_HTTPS}/${pkgbase}" + fi done |