1. 12 3月, 2011 1 次提交
    • L
      Make the default abbrev length configurable · dce96489
      Linus Torvalds 提交于
      The default of 7 comes from fairly early in git development, when
      seven hex digits was a lot (it covers about 250+ million hash
      values). Back then I thought that 65k revisions was a lot (it was what
      we were about to hit in BK), and each revision tends to be about 5-10
      new objects or so, so a million objects was a big number.
      
      These days, the kernel isn't even the largest git project, and even
      the kernel has about 220k revisions (_much_ bigger than the BK tree
      ever was) and we are approaching two million objects. At that point,
      seven hex digits is still unique for a lot of them, but when we're
      talking about just two orders of magnitude difference between number
      of objects and the hash size, there _will_ be collisions in truncated
      hash values. It's no longer even close to unrealistic - it happens all
      the time.
      
      We should both increase the default abbrev that was unrealistically
      small, _and_ add a way for people to set their own default per-project
      in the git config file.
      
      This is the first step to first make it configurable; the default of 7
      is not raised yet.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      dce96489
  2. 23 12月, 2010 1 次提交
  3. 20 12月, 2010 1 次提交
    • J
      handle arbitrary ints in git_config_maybe_bool · db6195ef
      Jeff King 提交于
      This function recently gained the ability to recognize the documented "0"
      and "1" values as false/true. However, unlike regular git_config_bool, it
      did not treat arbitrary non-zero numbers as true.
      
      While this is undocumented and probably ridiculous for somebody to rely
      on, it is safer to behave exactly as git_config_bool would. Because
      git_config_maybe_bool can be used to retrofit new non-bool values onto
      existing bool options, not behaving in exactly the same way is technically
      a regression.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      db6195ef
  4. 18 11月, 2010 1 次提交
    • J
      log.decorate: accept 0/1 bool values · b2be2f6a
      Jeff King 提交于
      We explicitly document "0" and "1" as synonyms for "false"
      and "true" in boolean config options. However, we don't
      actually handle those values in git_config_maybe_bool.
      
      In most cases this works fine, as we call git_config_bool,
      which in turn calls git_config_bool_or_int, which in turn
      calls git_config_maybe_bool. Values of 0/1 are considered
      "not bool", but their integer values end up being converted
      to the corresponding boolean values.
      
      However, the log.decorate code looks for maybe_bool
      explicitly, so that it can fall back to the "short" and
      "full" strings. It does not handle 0/1 at all, and considers
      them invalid values.
      
      We cannot simply add 0/1 support to git_config_maybe_bool.
      That would confuse git_config_bool_or_int, which may want to
      distinguish the integer values "0" and "1" from bools.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b2be2f6a
  5. 29 10月, 2010 1 次提交
    • J
      core.abbrevguard: Ensure short object names stay unique a bit longer · 72a5b561
      Junio C Hamano 提交于
      Even though git makes sure that it uses enough hexdigits to show an
      abbreviated object name unambiguously, as more objects are added to the
      repository over time, a short name that used to be unique will stop being
      unique.  Git uses this many extra hexdigits that are more than necessary
      to make the object name currently unique, in the hope that its output will
      stay unique a bit longer.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      72a5b561
  6. 22 10月, 2010 1 次提交
    • J
      config: treat non-existent config files as empty · 1f2baa78
      Jeff King 提交于
      The git_config() function signals error by returning -1 in
      two instances:
      
        1. An actual error occurs in opening a config file (parse
           errors cause an immediate die).
      
        2. Of the three possible config files, none was found.
      
      However, this second case is often not an error at all; it
      simply means that the user has no configuration (they are
      outside a repo, and they have no ~/.gitconfig file). This
      can lead to confusing errors, such as when the bash
      completion calls "git config --list" outside of a repo. If
      the user has a ~/.gitconfig, the command completes
      succesfully; if they do not, it complains to stderr.
      
      This patch allows callers of git_config to distinguish
      between the two cases. Error is signaled by -1, and
      otherwise the return value is the number of files parsed.
      This means that the traditional "git_config(...) < 0" check
      for error should work, but callers who want to know whether
      we parsed any files or not can still do so.
      
      [jc: with tests from Jonathan]
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      1f2baa78
  7. 01 9月, 2010 1 次提交
  8. 25 8月, 2010 1 次提交
    • J
      pass "git -c foo=bar" params through environment · 2b64fc89
      Jeff King 提交于
      Git uses the "-c foo=bar" parameters to set a config
      variable for a single git invocation. We currently do this
      by making a list in the current process and consulting that
      list in git_config.
      
      This works fine for built-ins, but the config changes are
      silently ignored by subprocesses, including dashed externals
      and invocations to "git config" from shell scripts.
      
      This patch instead puts them in an environment variable
      which we consult when looking at config (both internally and
      via calls "git config").
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      2b64fc89
  9. 07 6月, 2010 1 次提交
  10. 20 5月, 2010 1 次提交
    • E
      Add per-repository eol normalization · fd6cce9e
      Eyvind Bernhardsen 提交于
      Change the semantics of the "crlf" attribute so that it enables
      end-of-line normalization when it is set, regardless of "core.autocrlf".
      
      Add a new setting for "crlf": "auto", which enables end-of-line
      conversion but does not override the automatic text file detection.
      
      Add a new attribute "eol" with possible values "crlf" and "lf".  When
      set, this attribute enables normalization and forces git to use CRLF or
      LF line endings in the working directory, respectively.
      
      The line ending style to be used for normalized text files in the
      working directory is set using "core.autocrlf".  When it is set to
      "true", CRLFs are used in the working directory; when set to "input" or
      "false", LFs are used.
      Signed-off-by: NEyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      fd6cce9e
  11. 29 3月, 2010 3 次提交
  12. 18 2月, 2010 1 次提交
    • J
      git_config_maybe_bool() · 8420ccd8
      Junio C Hamano 提交于
      Some configuration variables can take boolean values in addition to
      enumeration specific to them.  Introduce git_config_maybe_bool() that
      returns 0 or 1 if the given value is boolean, or -1 if not, so that
      a parser for such a variable can check for boolean first and then
      parse other kinds of values as a fallback.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8420ccd8
  13. 11 1月, 2010 1 次提交
    • J
      ident.c: check explicit identity for name and email separately · 91c38a21
      Junio C Hamano 提交于
      bb1ae3f6 (commit: Show committer if automatic, 2008-05-04) added a logic to
      check both name and email were given explicitly by the end user, but it
      assumed that fmt_ident() is never called before git_default_user_config()
      is called, which was fragile.  The former calls setup_ident() and fills
      the "default" name and email, so the check in the config parser would have
      mistakenly said both are given even if only user.name was provided.
      
      Make the logic more robust by keeping track of name and email separately.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      Acked-by: NSanti Béjar <santi@agolina.net>
      91c38a21
  14. 18 11月, 2009 1 次提交
  15. 20 10月, 2009 1 次提交
    • J
      Introduce commit notes · a97a7468
      Johannes Schindelin 提交于
      Commit notes are blobs which are shown together with the commit
      message.  These blobs are taken from the notes ref, which you can
      configure by the config variable core.notesRef, which in turn can
      be overridden by the environment variable GIT_NOTES_REF.
      
      The notes ref is a branch which contains "files" whose names are
      the names of the corresponding commits (i.e. the SHA-1).
      
      The rationale for putting this information into a ref is this: we
      want to be able to fetch and possibly union-merge the notes,
      maybe even look at the date when a note was introduced, and we
      want to store them efficiently together with the other objects.
      
      This patch has been improved by the following contributions:
      - Thomas Rast: fix core.notesRef documentation
      - Tor Arne Vestbø: fix printing of multi-line notes
      - Alex Riesen: Using char array instead of char pointer costs less BSS
      - Johan Herland: Plug leak when msg is good, but msglen or type causes return
      Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
      Signed-off-by: NThomas Rast <trast@student.ethz.ch>
      Signed-off-by: NTor Arne Vestbø <tavestbo@trolltech.com>
      Signed-off-by: NJohan Herland <johan@herland.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      
      get_commit_notes(): Plug memory leak when 'if' triggers, but not because of read_sha1_file() failure
      a97a7468
  16. 13 9月, 2009 1 次提交
    • J
      use write_str_in_full helper to avoid literal string lengths · 2b7ca830
      Jim Meyering 提交于
      In 2d14d65c (Use a clearer style to issue commands to remote helpers,
      2009-09-03) I happened to notice two changes like this:
      
      -	write_in_full(helper->in, "list\n", 5);
      +
      +	strbuf_addstr(&buf, "list\n");
      +	write_in_full(helper->in, buf.buf, buf.len);
      +	strbuf_reset(&buf);
      
      IMHO, it would be better to define a new function,
      
          static inline ssize_t write_str_in_full(int fd, const char *str)
          {
                 return write_in_full(fd, str, strlen(str));
          }
      
      and then use it like this:
      
      -       strbuf_addstr(&buf, "list\n");
      -       write_in_full(helper->in, buf.buf, buf.len);
      -       strbuf_reset(&buf);
      +       write_str_in_full(helper->in, "list\n");
      
      Thus not requiring the added allocation, and still avoiding
      the maintenance risk of literal string lengths.
      These days, compilers are good enough that strlen("literal")
      imposes no run-time cost.
      
      Transformed via this:
      
          perl -pi -e \
              's/write_in_full\((.*?), (".*?"), \d+\)/write_str_in_full($1, $2)/'\
            $(git grep -l 'write_in_full.*"')
      Signed-off-by: NJim Meyering <meyering@redhat.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      2b7ca830
  17. 12 9月, 2009 1 次提交
    • J
      push: make non-fast-forward help message configurable · 75194438
      Jeff King 提交于
      This message is designed to help new users understand what
      has happened when refs fail to push. However, it does not
      help experienced users at all, and significantly clutters
      the output, frequently dwarfing the regular status table and
      making it harder to see.
      
      This patch introduces a general configuration mechanism for
      optional messages, with this push message as the first
      example.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      75194438
  18. 24 8月, 2009 1 次提交
  19. 31 7月, 2009 1 次提交
  20. 25 7月, 2009 2 次提交
  21. 06 5月, 2009 1 次提交
  22. 02 5月, 2009 1 次提交
  23. 30 4月, 2009 2 次提交
  24. 26 4月, 2009 1 次提交
  25. 18 4月, 2009 1 次提交
    • T
      Fix buffer overflow in config parser · e0b3cc0d
      Thomas Jarosch 提交于
      When interpreting a config value, the config parser reads in 1+ space
      character(s) and puts -one- space character in the buffer as soon as
      the first non-space character is encountered (if not inside quotes).
      
      Unfortunately the buffer size check lacks the extra space character
      which gets inserted at the next non-space character, resulting in
      a crash with a specially crafted config entry.
      
      The unit test now uses Java to compile a platform independent
      .NET framework to output the test string in C# :o)
      
          Read: Thanks to Johannes Sixt for the correct printf call
          which replaces the perl invocation.
      Signed-off-by: NThomas Jarosch <thomas.jarosch@intra2net.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      e0b3cc0d
  26. 12 4月, 2009 1 次提交
  27. 18 3月, 2009 1 次提交
    • F
      New config push.default to decide default behavior for push · 52153747
      Finn Arne Gangstad 提交于
      When "git push" is not told what refspecs to push, it pushes all matching
      branches to the current remote.  For some workflows this default is not
      useful, and surprises new users.  Some have even found that this default
      behaviour is too easy to trigger by accident with unwanted consequences.
      
      Introduce a new configuration variable "push.default" that decides what
      action git push should take if no refspecs are given or implied by the
      command line arguments or the current remote configuration.
      
      Possible values are:
      
        'nothing'  : Push nothing;
        'matching' : Current default behaviour, push all branches that already
                     exist in the current remote;
        'tracking' : Push the current branch to whatever it is tracking;
        'current'  : Push the current branch to a branch of the same name,
                     i.e. HEAD.
      Signed-off-by: NFinn Arne Gangstad <finnag@pvv.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      52153747
  28. 22 2月, 2009 1 次提交
  29. 11 2月, 2009 1 次提交
  30. 09 2月, 2009 1 次提交
  31. 21 12月, 2008 1 次提交
    • J
      Introduce commit notes · 879ef248
      Johannes Schindelin 提交于
      Commit notes are blobs which are shown together with the commit
      message.  These blobs are taken from the notes ref, which you can
      configure by the config variable core.notesRef, which in turn can
      be overridden by the environment variable GIT_NOTES_REF.
      
      The notes ref is a branch which contains "files" whose names are
      the names of the corresponding commits (i.e. the SHA-1).
      
      The rationale for putting this information into a ref is this: we
      want to be able to fetch and possibly union-merge the notes,
      maybe even look at the date when a note was introduced, and we
      want to store them efficiently together with the other objects.
      Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      879ef248
  32. 15 12月, 2008 1 次提交
  33. 15 11月, 2008 1 次提交
    • L
      Add cache preload facility · 671c9b7e
      Linus Torvalds 提交于
      This can do the lstat() storm in parallel, giving potentially much
      improved performance for cold-cache cases or things like NFS that have
      weak metadata caching.
      
      Just use "read_cache_preload()" instead of "read_cache()" to force an
      optimistic preload of the index stat data.  The function takes a
      pathspec as its argument, allowing us to preload only the relevant
      portion of the index.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      671c9b7e
  34. 31 10月, 2008 1 次提交
  35. 13 10月, 2008 1 次提交
  36. 03 10月, 2008 1 次提交