From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id aacb4493 for ; Thu, 16 Jan 2020 18:57:13 +0000 (UTC) Received: (qmail 12420 invoked by alias); 16 Jan 2020 18:57:05 -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: 45313 Received: (qmail 8644 invoked by uid 1010); 16 Jan 2020 18:57:05 -0000 X-Qmail-Scanner-Diagnostics: from out4-smtp.messagingengine.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.102.1/25691. spamassassin: 3.4.2. Clear:RC:0(66.111.4.28):SA:0(-1.9/5.0):. Processed in 3.622512 secs); 16 Jan 2020 18:57:05 -0000 X-Envelope-From: danielsh@apache.org X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: softfail (ns1.primenet.com.au: transitioning SPF record at amazonses.com does not designate 66.111.4.28 as permitted sender) X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrtdehgdduudeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpeffhffvuffkfhggtggujggfsehttd dttddtredvnecuhfhrohhmpeffrghnihgvlhcuufhhrghhrghfuceouggrnhhivghlshhh segrphgrtghhvgdrohhrgheqnecukfhppeejledrudektddrheejrdduudelnecurfgrrh grmhepmhgrihhlfhhrohhmpegurghnihgvlhhshhesrghprggthhgvrdhorhhgnecuvehl uhhsthgvrhfuihiivgeptd X-ME-Proxy: Date: Thu, 16 Jan 2020 18:56:22 +0000 From: Daniel Shahaf To: zsh-workers@zsh.org Subject: Re: [PATCH] _git: Support completion from outside of a worktree when --git-dir/--work-tree are specified on the command line Message-ID: <20200116185622.GA8329@tarpaulin.shahaf.local2> References: <20200116170538.10926-1-danielsh@apache.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200116170538.10926-1-danielsh@apache.org> User-Agent: Mutt/1.10.1 (2018-07-13) Daniel Shahaf wrote on Thu, Jan 16, 2020 at 17:05:38 +0000: > +++ b/Completion/Unix/Command/_git > @@ -7077,21 +7077,22 @@ __git_files_relative () { > - local pref=$gitcdup$gitprefix$PREFIX > + local pref=$gittoplevel$gitprefix$PREFIX Following a conversation of IRC I changed this line to account for the case that $PREFIX is an absolute path. Revised patch: [adding a marker line for git am -c] 8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<--8<-- >From 7bbc8efc83bd2d549c9034f11a2b23d07ad18d18 Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Thu, 16 Jan 2020 16:42:20 +0000 Subject: [PATCH] _git: Support completion from outside of a worktree when --git-dir/--work-tree are specified on the command line Revised version of workers/41523. --- Completion/Unix/Command/_git | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git index 7f2c206c1..3bc9158f5 100644 --- a/Completion/Unix/Command/_git +++ b/Completion/Unix/Command/_git @@ -7077,21 +7077,23 @@ __git_files_relative () { (( $+functions[__git_files] )) || __git_files () { - local compadd_opts opts tag description gitcdup gitprefix files expl + local compadd_opts opts tag description gittoplevel gitprefix files expl zparseopts -D -E -a compadd_opts V+: J+: 1 2 o+: n f x+: X+: M+: P: S: r: R: q F: zparseopts -D -E -a opts -- -cached -deleted -modified -others -ignored -unmerged -killed x+: --exclude+: tag=$1 description=$2; shift 2 - gitcdup=$(_call_program gitcdup git rev-parse --show-cdup 2>/dev/null) + gittoplevel=$(_call_program toplevel git rev-parse --show-toplevel 2>/dev/null) __git_command_successful $pipestatus || return 1 + [[ -n $gittoplevel ]] && gittoplevel+="/" gitprefix=$(_call_program gitprefix git rev-parse --show-prefix 2>/dev/null) __git_command_successful $pipestatus || return 1 # TODO: --directory should probably be added to $opts when --others is given. - local pref=$gitcdup$gitprefix$PREFIX + local pref=${(Q)${~PREFIX}} + [[ $pref[1] == '/' ]] || pref=$gittoplevel$gitprefix$pref # First allow ls-files to pattern-match in case of remote repository files=(${(0)"$(_call_program files git ls-files -z --exclude-standard ${(q)opts} -- ${(q)${pref:+$pref\*}:-.} 2>/dev/null)"}) @@ -8133,7 +8135,8 @@ _git() { ;; (option-or-argument) curcontext=${curcontext%:*:*}:git-$words[1]: - (( $+opt_args[--git-dir] )) && local -x GIT_DIR=$opt_args[--git-dir] + (( $+opt_args[--git-dir] )) && local -x GIT_DIR=${(Q)${~opt_args[--git-dir]}} + (( $+opt_args[--work-tree] )) && local -x GIT_WORK_TREE=${(Q)${~opt_args[--work-tree]}} if ! _call_function ret _git-$words[1]; then if [[ $words[1] = \!* ]]; then words[1]=${words[1]##\!}