From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24815 invoked by alias); 31 Aug 2018 20:55:17 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43359 Received: (qmail 29685 invoked by uid 1010); 31 Aug 2018 20:55:17 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(205.235.26.22):SA:0(-1.7/5.0):. Processed in 1.288091 secs); 31 Aug 2018 20:55:17 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE,SPF_PASS,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=jHIi=LO=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1535748894; bh=LPs/fNrDuH1Rtk0SXg73ED7O/bsU/Slp9VIkgm+ZsHg=; h=From:References:To:Subject:Date:From:Subject; b=TI5cp50PbNgMLhPS4XFeM6Lo41T81pZBOcC+8SL1hKUpLlNWMnp0EWaUilKgHEcWiRWk+IGXjZAcgnBT5a/DpNSG3EANrbBr9RJfwD98hmpzZqlLUCAIW5w7xHGu9+ot+iNr2G//kINMyCd6HhPzXoxeoDcCW1lapmgU+m4XCRzUhyd8pVzUVtk67pyPLezNWegAXgP2dWcsGrhZH2f+4Y03judsY8zkyFuAKgJ5VtLx+WmDrGmxYTLyocA7sRE2P3hBLKUkEz7lyYRL7/lVcYwDncE8MN1vgyqsQDorRuGwK7dogePFgigqQHgqz8btnXy76nXVx9sLsPCuXz4EnQ== X-YMail-OSG: u8ADVmsVM1k6kAsEUP.DZW5mSgR_wTUjHcn9oFzKX42XFbNioFFcmgGsQAzC4Y3 0dV3uGSUWdxW7vT_uajlZJcguFdx1aUz7iTcyisxqmJ7wF8JKfxdHwXliCIAU1T5YB3Wg4Fq8jQ0 Tw0clOHRUqFCoPB02UzTEvSRdkBrFwusmays8AEaadQoF67HUo8dyGLhDLQLORgqfO7bF_fJcq.2 XgDSDxUk6.TKB77JUo_eWUN9iElh9u12yUS1IaAsmt9BizIEpv3.Nj9lOBDaOboXfEO32r0Q_26q 6t.spYUx9hcG0mtg3SkowLvzMeXDsGZGo9gjO3S4_4g0j0R30cxej4Kw6KvcrD8ThSAX2drLtVp4 DAkeSquIVGd9lcy2OzkKAuele_KeKM6WHACjh3U7L4e69FaV3gauN5VkxIdCvwgORqkKet.dcR7. 6S3qPe_D.KKbNTTVxcY3d0EQ1MSkuqdC5CCBWphCBhi3PP_CYy.sVMREgFUcQiXAmLlyw9VjFoGu VejWIoVKWO7OgNTzErF0FlsfGs0TTlgMz0D424sYn4IfHJc5AIeMfLLm.MN08NXtbIWMXXvctq_H rxkvgA1zN67yNBIN4ja7f5ivbrFsySpuSXrICgeA67QrGfhtdho7K.z0jT5O9xdHKgXbla57V4v1 vwkKL_i5if3qSxnyjnZnwHqjI7YXhqwXSp1pcuRztZfCWUHRyR5RIJgphZsjRe3ODs6rMDtmkreV bULDEGmLNqgmI.0vaN9QQPESH3COYD03UH4KpOPvvYNCBZvgnPWJGyUP8dION.rJQDxbnXsfp65k jrFDtRThhQPm1HAQ0_OuHlksoqn.0z5nUjzD5kCOEQ_3Mrk9w9O9iGgc0kzSXY_hVgWh20DxHV.T pP8v4oKRt1n1pzkFc8xTcNAyY9J_d8F3xsWJ313X8XKvgmk.WS6qXdPDjS0p0H4AuEPN821PxoH9 E2yLOrGhghaRa1yRhEt.nmIAIpBNJN1Ki4EPhFcZXtnUVMAJX40Ti cc: zsh-workers@zsh.org In-reply-to: <20180521204513.GA26538@robusta> From: Oliver Kiddle References: <20180521204513.GA26538@robusta> To: pseyfert Subject: Re: git remote set-url completion MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <31091.1535748891.1@hydra> Date: Fri, 31 Aug 2018 22:54:51 +0200 Message-ID: <31092-1535748891.186231@QeZo.VfrC.CLU8> On 21 May, pseyfert wrote: > I was not happy with the completion of > git remote set-url TAB ... > So I put the below patch together which uses __git_repositories (and _urls) instead of _urls. The following patch is to be applied after Paul's original patch from 42810. It covers the things I mentioned in my reply to the original message. Oliver diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git index c9201bea2..2cae4c82f 100644 --- a/Completion/Unix/Command/_git +++ b/Completion/Unix/Command/_git @@ -3607,12 +3607,7 @@ _git-remote () { '(-m --master)'{-m,--master=}'[set HEAD of remote to point to given master branch]: :__git_branch_names' \ '--mirror[do not use separate remotes]::mirror type:(fetch pull)' \ ':name:__git_remotes' \ - ':repository:->repository' && ret=0 - case $state in - (repository) - __git_repositories_or_url && ret=0 - ;; - esac + ':repository:__git_repositories_or_urls' && ret=0 ;; (get-url) _arguments -S -s \ @@ -3641,17 +3636,13 @@ _git-remote () { '*: :__git_branch_names' && ret=0 ;; (set-url) - # TODO: Old URL does not get completed if --push, --add, or --delete are present - # TODO: assumes $line[1] is always the remote name - _message "the line is: $line" - _arguments -S -s \ - '(3)--push[manipulate push URLs instead of fetch URLs]' \ - '--add[add URL to those already defined]' \ - '(3)--delete[delete all matching URLs]' \ - ': :__git_remotes' \ - ':new url:__git_repositories_or_url' \ - ':old url:__git_current_remote_url $line[1]' \ - && ret=0 + _arguments -S \ + '--push[manipulate push URLs instead of fetch URLs]' \ + '(3)--add[add URL to those already defined]' \ + '(2)--delete[delete all matching URLs]' \ + '1: :__git_remotes' \ + '2:new url:__git_repositories_or_urls' \ + '3:old url: __git_current_remote_urls ${(k)opt_args[--push]} $line[1]' && ret=0 ;; (show) _arguments -S \ @@ -6971,19 +6962,19 @@ __git_local_repositories () { _wanted local-repositories expl 'local repositories' _directories } -(( $+functions[__git_repositories_or_url] )) || -__git_repositories_or_url () { +(( $+functions[__git_repositories_or_urls] )) || +__git_repositories_or_urls () { _alternative \ 'repositories::__git_repositories' \ - 'url::_urls' + 'urls::_urls' } -(( $+functions[__git_current_remote_url] )) || -__git_current_remote_url () { - # TODO: is ${(@)*[1,4]} a proper replacement for $* and passing extra arguments? - # TODO: add --push to the `git remote get-url` command in case `git remote set-url --push origin ` is completed - _wanted remote-urls expl 'current urls' \ - compadd ${(@)*[1,4]} - ${${(0)"$(_call_program remote-urls git remote get-url $5)"}%%$'\n'*} +(( $+functions[__git_current_remote_urls] )) || +__git_current_remote_urls () { + local expl + _description remote-urls expl 'current url' + compadd "$expl[@]" -M 'r:|/=* r:|=*' - ${(f)"$(_call_program remote-urls + git remote get-url "$@" --all)"} } (( $+functions[__git_any_repositories] )) ||