view contrib/tcsh_completion_build.sh @ 30151:381293e1135e

copy: distinguish "file exists" cases and add a hint (BC) Users that want to add a copy record to an existing commit with 'hg commit --amend' should be guided towards this workflow, rather than reaching for some sort of uncommit-recommit flow. As part of this, distinguish in the top-line error message whether the file merely already exists (untracked) on disk or the file already exists in history. The full list of copy and rename cases and how they interact with flags are listed below: target exists --after --force | action n n * | copy n y * | (1) untracked n n | (4) NEWHINT untracked n y | (3) untracked y * | (2) y n n | (4) NEWHINT y n y | (3) y y n | (2) y y y | (3) deleted n n | copy deleted n y | (3) deleted y n | (1) deleted y y | (1) * = don't care (1) <src>: not recording move - <target> does not exist (2) preserve target contents (3) replace target contents (4) <target>: not overwriting - file {exists,already committed} Credit to Kevin for wholly rewriting my table to cover more cases we discovered at the sprint. I think this change gets the hints correct in all cases, but I'd appreciate close inspection of the test cases to make sure I haven't gotten turned around in here.
author Augie Fackler <augie@google.com>
date Mon, 19 Sep 2016 17:15:39 -0400
parents 2616325766e3
children
line wrap: on
line source

#!/bin/sh

#
# tcsh_completion_build.sh - script to generate tcsh completion
#
#
# Copyright (C) 2005 TK Soh.
#
# This is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
#
# Description
# -----------
# This script generates a tcsh source file to support completion
# of Mercurial commands and options.
#
# Instruction:
# -----------
# Run this script to generate the tcsh source file, and source
# the file to add command completion support for Mercurial.
#
#    tcsh% tcsh_completion.sh FILE
#    tcsh% source FILE
#
# If FILE is not specified, tcsh_completion will be generated.
#
# Bugs:
# ----
# 1. command specific options are not supported
# 2. hg commands must be specified immediately after 'hg'.
#

tcsh_file=${1-tcsh_completion}

hg_commands=`hg --debug help | \
        sed -e '1,/^list of commands:/d' \
            -e '/^enabled extensions:/,$d' \
            -e '/^additional help topics:/,$d' \
            -e '/^ [^ ]/!d; s/[,:]//g;' | \
        xargs -n5 | \
        sed -e '$!s/$/ \\\\/g; 2,$s/^ */    /g'`

hg_global_options=`hg -v help | \
        sed -e '1,/global/d;/^ *-/!d; s/ [^- ].*//' | \
        sed -e 's/ *$//; $!s/$/ \\\\/g; 2,$s/^ */    /g'`

hg_version=`hg version | sed -e '1q'`

script_name=`basename $0`

cat > $tcsh_file <<END
#
# tcsh completion for Mercurial
#
# This file has been auto-generated by $script_name for
# $hg_version
#
# Copyright (C) 2005 TK Soh.
#
# This is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#

complete hg \\
  'n/--cwd/d/' 'n/-R/d/' 'n/--repository/d/' \\
  'C/-/($hg_global_options)/' \\
  'p/1/($hg_commands)/'

END