Merge branch 'nd/versioncmp-prereleases'
authorJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2015 20:11:45 +0000 (13:11 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2015 20:11:45 +0000 (13:11 -0700)
The versionsort.prerelease configuration variable can be used to
specify that v1.0-pre1 comes before v1.0.

* nd/versioncmp-prereleases:
config.txt: update versioncmp.prereleaseSuffix
versionsort: support reorder prerelease suffixes

1  2 
Documentation/config.txt
t/t7004-tag.sh
diff --combined Documentation/config.txt
index f1bc0f2d8cea321277d2a7d2869e56f18b1fd862,fe8705dcef2b36bbbbb882a81c0298d89227c708..35a5198856184f3e9f28bca2544de87a016c4b50
@@@ -375,19 -375,14 +375,19 @@@ This is useful for excluding servers in
  proxy use, while defaulting to a common proxy for external domains.
  
  core.ignoreStat::
 -      If true, commands which modify both the working tree and the index
 -      will mark the updated paths with the "assume unchanged" bit in the
 -      index. These marked files are then assumed to stay unchanged in the
 -      working tree, until you mark them otherwise manually - Git will not
 -      detect the file changes by lstat() calls. This is useful on systems
 -      where those are very slow, such as Microsoft Windows.
 -      See linkgit:git-update-index[1].
 -      False by default.
 +      If true, Git will avoid using lstat() calls to detect if files have
 +      changed by setting the "assume-unchanged" bit for those tracked files
 +      which it has updated identically in both the index and working tree.
 ++
 +When files are modified outside of Git, the user will need to stage
 +the modified files explicitly (e.g. see 'Examples' section in
 +linkgit:git-update-index[1]).
 +Git will not normally detect changes to those files.
 ++
 +This is useful on systems where lstat() calls are very slow, such as
 +CIFS/Microsoft Windows.
 ++
 +False by default.
  
  core.preferSymlinkRefs::
        Instead of the default "symref" format for HEAD
@@@ -683,13 -678,14 +683,13 @@@ core.abbrev:
        for abbreviated object names to stay unique for sufficiently long
        time.
  
 -add.ignore-errors::
  add.ignoreErrors::
 +add.ignore-errors (deprecated)::
        Tells 'git add' to continue adding files when some files cannot be
        added due to indexing errors. Equivalent to the '--ignore-errors'
 -      option of linkgit:git-add[1].  Older versions of Git accept only
 -      `add.ignore-errors`, which does not follow the usual naming
 -      convention for configuration variables.  Newer versions of Git
 -      honor `add.ignoreErrors` as well.
 +      option of linkgit:git-add[1].  `add.ignore-errors` is deprecated,
 +      as it does not follow the usual naming convention for configuration
 +      variables.
  
  alias.*::
        Command aliases for the linkgit:git[1] command wrapper - e.g.
@@@ -853,13 -849,11 +853,13 @@@ accepted are `normal`, `black`, `red`, 
  `magenta`, `cyan` and `white`; the attributes are `bold`, `dim`, `ul`,
  `blink` and `reverse`.  The first color given is the foreground; the
  second is the background.  The position of the attribute, if any,
 -doesn't matter.
 +doesn't matter. Attributes may be turned off specifically by prefixing
 +them with `no` (e.g., `noreverse`, `noul`, etc).
  +
  Colors (foreground and background) may also be given as numbers between
  0 and 255; these use ANSI 256-color mode (but note that not all
 -terminals may support this).
 +terminals may support this).  If your terminal supports it, you may also
 +specify 24-bit RGB values as hex, like `#ff0ab3`.
  
  color.diff::
        Whether to use ANSI escape sequences to add color to patches.
@@@ -956,11 -950,9 +956,11 @@@ color.status.<slot>:
        `added` or `updated` (files which are added but not committed),
        `changed` (files which are changed but not added in the index),
        `untracked` (files which are not tracked by Git),
 -      `branch` (the current branch), or
 +      `branch` (the current branch),
        `nobranch` (the color the 'no branch' warning is shown in, defaulting
 -      to red). The values of these variables may be specified as in
 +      to red), or
 +      `unmerged` (files which have unmerged changes).
 +      The values of these variables may be specified as in
        color.branch.<slot>.
  
  color.ui::
@@@ -1741,13 -1733,6 +1741,13 @@@ log.mailmap:
        If true, makes linkgit:git-log[1], linkgit:git-show[1], and
        linkgit:git-whatchanged[1] assume `--use-mailmap`.
  
 +mailinfo.scissors::
 +      If true, makes linkgit:git-mailinfo[1] (and therefore
 +      linkgit:git-am[1]) act by default as if the --scissors option
 +      was provided on the command-line. When active, this features
 +      removes everything from the message body before a scissors
 +      line (i.e. consisting mainly of ">8", "8<" and "-").
 +
  mailmap.file::
        The location of an augmenting mailmap file. The default
        mailmap, located in the root of the repository, is loaded
@@@ -1968,7 -1953,7 +1968,7 @@@ pack.useBitmaps:
        true. You should not generally need to turn this off unless
        you are debugging pack bitmaps.
  
 -pack.writebitmaps::
 +pack.writebitmaps (deprecated)::
        This is a deprecated synonym for `repack.writeBitmaps`.
  
  pack.writeBitmapHashCache::
@@@ -2102,11 -2087,6 +2102,11 @@@ rebase.autostash:
        successful rebase might result in non-trivial conflicts.
        Defaults to false.
  
 +receive.advertiseatomic::
 +      By default, git-receive-pack will advertise the atomic push
 +      capability to its clients. If you don't want to this capability
 +      to be advertised, set this variable to false.
 +
  receive.autogc::
        By default, git-receive-pack will run "git-gc --auto" after
        receiving data from git-push and updating refs.  You can stop
@@@ -2164,17 -2144,6 +2164,17 @@@ receive.denyCurrentBranch:
        print a warning of such a push to stderr, but allow the push to
        proceed. If set to false or "ignore", allow such pushes with no
        message. Defaults to "refuse".
 ++
 +Another option is "updateInstead" which will update the working
 +tree if pushing into the current branch.  This option is
 +intended for synchronizing working directories when one side is not easily
 +accessible via interactive ssh (e.g. a live web site, hence the requirement
 +that the working directory be clean). This mode also comes in handy when
 +developing inside a VM to test and fix code on different Operating Systems.
 ++
 +By default, "updateInstead" will refuse the push if the working tree or
 +the index have any difference from the HEAD, but the `push-to-checkout`
 +hook can be used to customize this.  See linkgit:githooks[5].
  
  receive.denyNonFastForwards::
        If set to true, git-receive-pack will deny a ref update which is
@@@ -2314,7 -2283,7 +2314,7 @@@ sendemail.smtpencryption:
        See linkgit:git-send-email[1] for description.  Note that this
        setting is not subject to the 'identity' mechanism.
  
 -sendemail.smtpssl::
 +sendemail.smtpssl (deprecated)::
        Deprecated alias for 'sendemail.smtpencryption = ssl'.
  
  sendemail.smtpsslcertpath::
@@@ -2349,12 -2318,10 +2349,12 @@@ sendemail.smtpserverport:
  sendemail.smtpserveroption::
  sendemail.smtpuser::
  sendemail.thread::
 +sendemail.transferencoding::
  sendemail.validate::
 +sendemail.xmailer::
        See linkgit:git-send-email[1] for description.
  
 -sendemail.signedoffcc::
 +sendemail.signedoffcc (deprecated)::
        Deprecated alias for 'sendemail.signedoffbycc'.
  
  showbranch.default::
@@@ -2419,16 -2386,12 +2419,16 @@@ status.submodulesummary:
  
  submodule.<name>.path::
  submodule.<name>.url::
 +      The path within this project and URL for a submodule. These
 +      variables are initially populated by 'git submodule init'. See
 +      linkgit:git-submodule[1] and linkgit:gitmodules[5] for
 +      details.
 +
  submodule.<name>.update::
 -      The path within this project, URL, and the updating strategy
 -      for a submodule.  These variables are initially populated
 -      by 'git submodule init'; edit them to override the
 -      URL and other values found in the `.gitmodules` file.  See
 -      linkgit:git-submodule[1] and linkgit:gitmodules[5] for details.
 +      The default update procedure for a submodule. This variable
 +      is populated by `git submodule init` from the
 +      linkgit:gitmodules[5] file. See description of 'update'
 +      command in linkgit:git-submodule[1].
  
  submodule.<name>.branch::
        The remote branch name for a submodule, used by `git submodule
@@@ -2560,6 -2523,18 +2560,18 @@@ user.signingkey:
        This option is passed unchanged to gpg's --local-user parameter,
        so you may specify a key using any method that gpg supports.
  
+ versionsort.prereleaseSuffix::
+       When version sort is used in linkgit:git-tag[1], prerelease
+       tags (e.g. "1.0-rc1") may appear after the main release
+       "1.0". By specifying the suffix "-rc" in this variable,
+       "1.0-rc1" will appear before "1.0".
+ +
+ This variable can be specified multiple times, once per suffix. The
+ order of suffixes in the config file determines the sorting order
+ (e.g. if "-pre" appears before "-rc" in the config file then 1.0-preXX
+ is sorted before 1.0-rcXX). The sorting order between different
+ suffixes is undefined if they are in multiple config files.
  web.browser::
        Specify a web browser that may be used by some commands.
        Currently only linkgit:git-instaweb[1] and linkgit:git-help[1]
diff --combined t/t7004-tag.sh
index 35c805a44e817c637c667b1d1d14d97b4ee46803,5674fe9f722344848473e7e06c41499aa5006870..8bfeef9b0bf6eedcd1f0b31a141efc87a37041f8
@@@ -1081,7 -1081,7 +1081,7 @@@ test_expect_success GPG 
  get_tag_header rfc1991-signed-tag $commit commit $time >expect
  echo "RFC1991 signed tag" >>expect
  echo '-----BEGIN PGP MESSAGE-----' >>expect
 -test_expect_success GPG \
 +test_expect_success GPG,RFC1991 \
        'creating a signed tag with rfc1991' '
        echo "rfc1991" >gpghome/gpg.conf &&
        git tag -s -m "RFC1991 signed tag" rfc1991-signed-tag $commit &&
@@@ -1095,7 -1095,7 +1095,7 @@@ cp "$1" actua
  EOF
  chmod +x fakeeditor
  
 -test_expect_success GPG \
 +test_expect_success GPG,RFC1991 \
        'reediting a signed tag body omits signature' '
        echo "rfc1991" >gpghome/gpg.conf &&
        echo "RFC1991 signed tag" >expect &&
        test_cmp expect actual
  '
  
 -test_expect_success GPG \
 +test_expect_success GPG,RFC1991 \
        'verifying rfc1991 signature' '
        echo "rfc1991" >gpghome/gpg.conf &&
        git tag -v rfc1991-signed-tag
  '
  
 -test_expect_success GPG \
 +test_expect_success GPG,RFC1991 \
        'list tag with rfc1991 signature' '
        echo "rfc1991" >gpghome/gpg.conf &&
        echo "rfc1991-signed-tag RFC1991 signed tag" >expect &&
  
  rm -f gpghome/gpg.conf
  
 -test_expect_success GPG \
 +test_expect_success GPG,RFC1991 \
        'verifying rfc1991 signature without --rfc1991' '
        git tag -v rfc1991-signed-tag
  '
  
 -test_expect_success GPG \
 +test_expect_success GPG,RFC1991 \
        'list tag with rfc1991 signature without --rfc1991' '
        echo "rfc1991-signed-tag RFC1991 signed tag" >expect &&
        git tag -l -n1 rfc1991-signed-tag >actual &&
        test_cmp expect actual
  '
  
 -test_expect_success GPG \
 +test_expect_success GPG,RFC1991 \
        'reediting a signed tag body omits signature' '
        echo "RFC1991 signed tag" >expect &&
        GIT_EDITOR=./fakeeditor git tag -f -s rfc1991-signed-tag $commit &&
@@@ -1459,6 -1459,34 +1459,34 @@@ test_expect_success 'invalid sort param
        test_cmp expect actual
  '
  
+ test_expect_success 'version sort with prerelease reordering' '
+       git config --unset tag.sort &&
+       git config versionsort.prereleaseSuffix -rc &&
+       git tag foo1.6-rc1 &&
+       git tag foo1.6-rc2 &&
+       git tag -l --sort=version:refname "foo*" >actual &&
+       cat >expect <<-\EOF &&
+       foo1.3
+       foo1.6-rc1
+       foo1.6-rc2
+       foo1.6
+       foo1.10
+       EOF
+       test_cmp expect actual
+ '
+ test_expect_success 'reverse version sort with prerelease reordering' '
+       git tag -l --sort=-version:refname "foo*" >actual &&
+       cat >expect <<-\EOF &&
+       foo1.10
+       foo1.6
+       foo1.6-rc2
+       foo1.6-rc1
+       foo1.3
+       EOF
+       test_cmp expect actual
+ '
  run_with_limited_stack () {
        (ulimit -s 128 && "$@")
  }