1. 07 Mar, 2019 1 commit
  2. 28 Feb, 2019 1 commit
  3. 04 Feb, 2019 1 commit
    • William Hubbs's avatar
      config: allow giving separate author and committer idents · 39ab4d09
      William Hubbs authored
      The author.email, author.name, committer.email and committer.name
      settings are analogous to the GIT_AUTHOR_* and GIT_COMMITTER_*
      environment variables, but for the git config system. This allows them
      to be set separately for each repository.
      
      Git supports setting different authorship and committer
      information with environment variables. However, environment variables
      are set in the shell, so if different authorship and committer
      information is needed for different repositories an external tool is
      required.
      
      This adds support to git config for author.email, author.name,
      committer.email and committer.name  settings so this information
      can be set per repository.
      
      Also, it generalizes the fmt_ident function so it can handle author vs
      committer identification.
      Signed-off-by: 's avatarWilliam Hubbs <williamh@gentoo.org>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      39ab4d09
  4. 16 Oct, 2018 1 commit
  5. 15 Jun, 2017 1 commit
  6. 26 May, 2017 1 commit
  7. 19 Apr, 2017 2 commits
  8. 23 Feb, 2017 4 commits
    • Jeff King's avatar
      ident: do not ignore empty config name/email · 94425552
      Jeff King authored
      When we read user.name and user.email from a config file,
      they go into strbufs. When a caller asks ident_default_name()
      for the value, we fallback to auto-detecting if the strbuf
      is empty.
      
      That means that explicitly setting an empty string in the
      config is identical to not setting it at all. This is
      potentially confusing, as we usually accept a configured
      value as the final value.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      94425552
    • Jeff King's avatar
      ident: reject all-crud ident name · 13b9a24e
      Jeff King authored
      An ident name consisting of only "crud" characters (like
      whitespace or punctuation) is effectively the same as an
      empty one, because our strbuf_addstr_without_crud() will
      remove those characters.
      
      We reject an empty name when formatting a strict ident, but
      don't notice an all-crud one because our check happens
      before the crud-removal step.
      
      We could skip past the crud before checking for an empty
      name, but let's make it a separate code path, for two
      reasons. One is that we can give a more specific error
      message. And two is that unlike a blank name, we probably
      don't want to kick in the fallback-to-username behavior.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      13b9a24e
    • Jeff King's avatar
      ident: handle NULL email when complaining of empty name · 862e80a4
      Jeff King authored
      If we see an empty name, we complain about and mention the
      matching email in the error message (to give it some
      context). However, the "email" pointer may be NULL here if
      we were planning to fill it in later from ident_default_email().
      
      This was broken by 59f92959 (fmt_ident: refactor strictness
      checks, 2016-02-04). Prior to that commit, we would look up
      the default name and email before doing any other actions.
      So one solution would be to go back to that.
      
      However, we can't just do so blindly. The logic for handling
      the "!email" condition has grown since then. In particular,
      looking up the default email can die if getpwuid() fails,
      but there are other errors that should take precedence.
      Commit 734c7789 (ident: check for useConfigOnly before
      auto-detection of name/email, 2016-03-30) reordered the
      checks so that we prefer the error message for
      useConfigOnly.
      
      Instead, we can observe that while the name-handling depends
      on "email" being set, the reverse is not true. So we can
      simply set up the email variable first.
      
      This does mean that if both are bogus, we'll complain about
      the email before the name. But between the two, there is no
      reason to prefer one over the other.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      862e80a4
    • Jeff King's avatar
      ident: mark error messages for translation · afb6c30b
      Jeff King authored
      We already translate the big "please tell me who you are"
      hint, but missed the individual error messages that go with
      it.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      afb6c30b
  9. 23 Sep, 2016 1 commit
    • Jeff King's avatar
      ident: handle NULL ai_canonname · c375a7ef
      Jeff King authored
      We call getaddrinfo() to try to convert a short hostname
      into a fully-qualified one (to use it as an email domain).
      If there isn't a canonical name, getaddrinfo() will
      generally return either a NULL addrinfo list, or one in
      which ai->ai_canonname is a copy of the original name.
      
      However, if the result of gethostname() looks like an IP
      address, then getaddrinfo() behaves differently on some
      systems. On OS X, it will return a "struct addrinfo" with a
      NULL ai_canonname, and we segfault feeding it to strchr().
      
      This is hard to test reliably because it involves not only a
      system where we we have to fallback to gethostname() to come
      up with an ident, but also where the hostname is a number
      with no dots. But I was able to replicate the bug by faking
      a hostname, like:
      
          diff --git a/ident.c b/ident.c
          index e20a772..b790d28 100644
          --- a/ident.c
          +++ b/ident.c
          @@ -128,6 +128,7 @@ static void add_domainname(struct strbuf *out, int *is_bogus)
                           *is_bogus = 1;
                           return;
                   }
          +        xsnprintf(buf, sizeof(buf), "1");
                   if (strchr(buf, '.'))
                           strbuf_addstr(out, buf);
                   else if (canonical_name(buf, out) < 0) {
      
      and running "git var GIT_AUTHOR_IDENT" on an OS X system.
      
      Before this patch it segfaults, and after we correctly
      complain of the bogus "user@1.(none)" address (though this
      bogus address would be suitable for non-object uses like
      writing reflogs).
      Reported-by: 's avatarJonas Thiel <jonas.lierschied@gmx.de>
      Diagnosed-by: John Keeping's avatarJohn Keeping <john@keeping.me.uk>
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      c375a7ef
  10. 21 Sep, 2016 1 commit
  11. 01 Aug, 2016 1 commit
    • Jeff King's avatar
      am: reset cached ident date for each patch · 4d9c7e6f
      Jeff King authored
      When we compute the date to go in author/committer lines of
      commits, or tagger lines of tags, we get the current date
      once and then cache it for the rest of the program.  This is
      a good thing in some cases, like "git commit", because it
      means we do not racily assign different times to the
      author/committer fields of a single commit object.
      
      But as more programs start to make many commits in a single
      process (e.g., the recently builtin "git am"), it means that
      you'll get long strings of commits with identical committer
      timestamps (whereas before, we invoked "git commit" many
      times and got true timestamps).
      
      This patch addresses it by letting callers reset the cached
      time, which means they'll get a fresh time on their next
      call to git_committer_info() or git_author_info(). The first
      caller to do so is "git am", which resets the time for each
      patch it applies.
      
      It would be nice if we could just do this automatically
      before filling in the ident fields of commit and tag
      objects. Unfortunately, it's hard to know where a particular
      logical operation begins and ends.
      
      For instance, if commit_tree_extended() were to call
      reset_ident_date() before getting the committer/author
      ident, that doesn't quite work; sometimes the author info is
      passed in to us as a parameter, and it may or may not have
      come from a previous call to ident_default_date(). So in
      those cases, we lose the property that the committer and the
      author timestamp always match.
      
      You could similarly put a date-reset at the end of
      commit_tree_extended(). That actually works in the current
      code base, but it's fragile. It makes the assumption that
      after commit_tree_extended() finishes, the caller has no
      other operations that would logically want to fall into the
      same timestamp.
      
      So instead we provide the tool to easily do the reset, and
      let the high-level callers use it to annotate their own
      logical operations.
      
      There's no automated test, because it would be inherently
      racy (it depends on whether the program takes multiple
      seconds to run). But you can see the effect with something
      like:
      
        # make a fake 100-patch series
        top=$(git rev-parse HEAD)
        bottom=$(git rev-list --first-parent -100 HEAD | tail -n 1)
        git log --format=email --reverse --first-parent \
                --binary -m -p $bottom..$top >patch
      
        # now apply it; this presumably takes multiple seconds
        git checkout --detach $bottom
        git am <patch
      
        # now count the number of distinct committer times;
        # prior to this patch, there would only be one, but
        # now we'd typically see several.
        git log --format=%ct $bottom.. | sort -u
      Suggested-by: 's avatarLinus Torvalds <torvalds@linux-foundation.org>
      Helped-by: 's avatarPaul Tan <pyokagan@gmail.com>
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      4d9c7e6f
  12. 09 May, 2016 1 commit
  13. 01 Apr, 2016 2 commits
  14. 08 Feb, 2016 1 commit
  15. 04 Feb, 2016 1 commit
    • Jeff King's avatar
      fmt_ident: refactor strictness checks · 59f92959
      Jeff King authored
      This function has evolved quite a bit over time, and as a
      result, the logic for "is this an OK ident" has been
      sprinkled throughout. This ends up with a lot of redundant
      conditionals, like checking want_name repeatedly. Worse,
      we want to know in many cases whether we are using the
      "default" ident, and we do so by comparing directly to the
      global strbuf, which violates the abstraction of the
      ident_default_* functions.
      
      Let's reorganize the function into a hierarchy of
      conditionals to handle similar cases together. The only
      case that doesn't just work naturally for this is that of an
      empty name, where our advice is different based on whether
      we came from ident_default_name() or not. We can use a
      simple flag to cover this case.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      59f92959
  16. 15 Jan, 2016 2 commits
    • Junio C Hamano's avatar
      ident.c: read /etc/mailname with strbuf_getline() · 1f3b1efd
      Junio C Hamano authored
      Just in case /etc/mailname file was edited with a DOS editor,
      read it with strbuf_getline() so that a stray CR is not included
      as the last character of the mail hostname.
      
      We _might_ want to more aggressively discard whitespace characters
      around the line with strbuf_trim(), but that is a bit outside the
      scope of this series.
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      1f3b1efd
    • Junio C Hamano's avatar
      strbuf: introduce strbuf_getline_{lf,nul}() · 8f309aeb
      Junio C Hamano authored
      The strbuf_getline() interface allows a byte other than LF or NUL as
      the line terminator, but this is only because I wrote these
      codepaths anticipating that there might be a value other than NUL
      and LF that could be useful when I introduced line_termination long
      time ago.  No useful caller that uses other value has emerged.
      
      By now, it is clear that the interface is overly broad without a
      good reason.  Many codepaths have hardcoded preference to read
      either LF terminated or NUL terminated records from their input, and
      then call strbuf_getline() with LF or NUL as the third parameter.
      
      This step introduces two thin wrappers around strbuf_getline(),
      namely, strbuf_getline_lf() and strbuf_getline_nul(), and
      mechanically rewrites these call sites to call either one of
      them.  The changes contained in this patch are:
      
       * introduction of these two functions in strbuf.[ch]
      
       * mechanical conversion of all callers to strbuf_getline() with
         either '\n' or '\0' as the third parameter to instead call the
         respective thin wrapper.
      
      After this step, output from "git grep 'strbuf_getline('" would
      become a lot smaller.  An interim goal of this series is to make
      this an empty set, so that we can have strbuf_getline_crlf() take
      over the shorter name strbuf_getline().
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      8f309aeb
  17. 14 Dec, 2015 2 commits
    • Jeff King's avatar
      ident: fix undefined variable when NO_IPV6 is set · 58d29ece
      Jeff King authored
      Commit 00bce77f (ident.c: add support for IPv6, 2015-11-27)
      moved the "gethostbyname" call out of "add_domainname" and
      into the helper function "canonical_name". But when moving
      the code, it forgot that the "buf" variable is passed as
      "host" in the helper.
      Reported-by: 's avatarjohan defries <johandefries@gmail.com>
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      58d29ece
    • Jeff King's avatar
      ident: loosen getpwuid error in non-strict mode · 92bcbb9b
      Jeff King authored
      If the user has not specified an identity and we have to
      turn to getpwuid() to find the username or gecos field, we
      die immediately when getpwuid fails (e.g., because the user
      does not exist). This is OK for making a commit, where we
      have set IDENT_STRICT and would want to bail on bogus input.
      
      But for something like a reflog, where the ident is "best
      effort", it can be pain. For instance, even running "git
      clone" with a UID that is not in /etc/passwd will result in
      git barfing, just because we can't find an ident to put in
      the reflog.
      
      Instead of dying in xgetpwuid_self, we can instead return a
      fallback value, and set a "bogus" flag. For the username in
      an email, we already have a "default_email_is_bogus" flag.
      For the name field, we introduce (and check) a matching
      "default_name_is_bogus" flag. As a bonus, this means you now
      get the usual "tell me who you are" advice instead of just a
      "no such user" error.
      
      No tests, as this is dependent on configuration outside of
      git's control. However, I did confirm that it behaves
      sensibly when I delete myself from the local /etc/passwd
      (reflogs get written, and commits complain).
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      92bcbb9b
  18. 10 Dec, 2015 2 commits
    • Jeff King's avatar
      ident: keep a flag for bogus default_email · 19ce497c
      Jeff King authored
      If we have to deduce the user's email address and can't come
      up with something plausible for the hostname, we simply
      write "(none)" or ".(none)" in the hostname.
      
      Later, our strict-check is forced to use strstr to look for
      this magic string. This is probably not a problem in
      practice, but it's rather ugly. Let's keep an extra flag
      that tells us the email is bogus, and check that instead.
      
      We could get away with simply setting the global in
      add_domainname(); it only gets called to write into
      git_default_email. However, let's make the code a little
      more obvious to future readers by actually passing a pointer
      to our "bogus" flag down the call-chain.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      19ce497c
    • Jeff King's avatar
      ident: make xgetpwuid_self() a static local helper · e850194c
      Jeff King authored
      This function is defined in wrapper.c, but nobody besides
      ident.c uses it. And nobody is likely to in the future,
      either, as anything that cares about the user's name should
      be going through the ident code.
      
      Moving it here is a cleanup of the global namespace, but it
      will also enable further cleanups inside ident.c.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      e850194c
  19. 28 Nov, 2015 1 commit
  20. 27 Aug, 2014 1 commit
    • Jeff King's avatar
      date: use strbufs in date-formatting functions · c33ddc2e
      Jeff King authored
      Many of the date functions write into fixed-size buffers.
      This is a minor pain, as we have to take special
      precautions, and frequently end up copying the result into a
      strbuf or heap-allocated buffer anyway (for which we
      sometimes use strcpy!).
      
      Let's instead teach parse_date, datestamp, etc to write to a
      strbuf. The obvious downside is that we might need to
      perform a heap allocation where we otherwise would not need
      to. However, it turns out that the only two new allocations
      required are:
      
        1. In test-date.c, where we don't care about efficiency.
      
        2. In determine_author_info, which is not performance
           critical (and where the use of a strbuf will help later
           refactoring).
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      c33ddc2e
  21. 25 Jul, 2014 1 commit
    • Matthieu Moy's avatar
      config --global --edit: create a template file if needed · 9830534e
      Matthieu Moy authored
      When the user has no ~/.gitconfig file, git config --global --edit used
      to launch an editor on an nonexistant file name.
      
      Instead, create a file with a default content before launching the
      editor. The template contains only commented-out entries, to save a few
      keystrokes for the user. If the values are guessed properly, the user
      will only have to uncomment the entries.
      
      Advanced users teaching newbies can create a minimalistic configuration
      faster for newbies. Beginners reading a tutorial advising to run "git
      config --global --edit" as a first step will be slightly more guided for
      their first contact with Git.
      Signed-off-by: 's avatarMatthieu Moy <Matthieu.Moy@imag.fr>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      9830534e
  22. 15 Oct, 2013 1 commit
    • Jeff King's avatar
      split_ident: parse timestamp from end of line · 03818a4a
      Jeff King authored
      Split_ident currently parses left to right. Given this
      input:
      
        Your Name <email@example.com> 123456789 -0500\n
      
      We assume the name starts the line and runs until the first
      "<".  That starts the email address, which runs until the
      first ">".  Everything after that is assumed to be the
      timestamp.
      
      This works fine in the normal case, but is easily broken by
      corrupted ident lines that contain an extra ">". Some
      examples seen in the wild are:
      
        1. Name <email>-<> 123456789 -0500\n
      
        2. Name <email> <Name<email>> 123456789 -0500\n
      
        3. Name1 <email1>, Name2 <email2> 123456789 -0500\n
      
      Currently each of these produces some email address (which
      is not necessarily the one the user intended) and end up
      with a NULL date (which is generally interpreted as the
      epoch by "git log" and friends).
      
      But in each case we could get the correct timestamp simply
      by parsing from the right-hand side, looking backwards for
      the final ">", and then reading the timestamp from there.
      
      In general, it's a losing battle to try to automatically
      guess what the user meant with their broken crud. But this
      particular workaround is probably worth doing.  One, it's
      dirt simple, and can't impact non-broken cases. Two, it
      doesn't catch a single breakage we've seen, but rather a
      large class of errors (i.e., any breakage inside the email
      angle brackets may affect the email, but won't spill over
      into the timestamp parsing). And three, the timestamp is
      arguably more valuable to get right, because it can affect
      correctness (e.g., in --until cutoffs).
      
      This patch implements the right-to-left scheme described
      above. We adjust the tests in t4212, which generate a commit
      with such a broken ident, and now gets the timestamp right.
      We also add a test that fsck continues to detect the
      breakage.
      
      For reference, here are pointers to the breakages seen (as
      numbered above):
      
      [1] http://article.gmane.org/gmane.comp.version-control.git/221441
      
      [2] http://article.gmane.org/gmane.comp.version-control.git/222362
      
      [3] http://perl5.git.perl.org/perl.git/commit/13b79730adea97e660de84bbe67f9d7cbe344302Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      03818a4a
  23. 20 Sep, 2013 1 commit
    • Jeff King's avatar
      format-patch: print in-body "From" only when needed · 662cc30c
      Jeff King authored
      Commit a9080475 taught format-patch the "--from" option,
      which places the author ident into an in-body from header,
      and uses the committer ident in the rfc822 from header.  The
      documentation claims that it will omit the in-body header
      when it is the same as the rfc822 header, but the code never
      implemented that behavior.
      
      This patch completes the feature by comparing the two idents
      and doing nothing when they are the same (this is the same
      as simply omitting the in-body header, as the two are by
      definition indistinguishable in this case). This makes it
      reasonable to turn on "--from" all the time (if it matches
      your particular workflow), rather than only using it when
      exporting other people's patches.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      662cc30c
  24. 25 Jan, 2013 1 commit
  25. 16 Nov, 2012 2 commits
    • Jeff King's avatar
      ident: keep separate "explicit" flags for author and committer · d6991cee
      Jeff King authored
      We keep track of whether the user ident was given to us
      explicitly, or if we guessed at it from system parameters
      like username and hostname. However, we kept only a single
      variable. This covers the common cases (because the author
      and committer will usually come from the same explicit
      source), but can miss two cases:
      
        1. GIT_COMMITTER_* is set explicitly, but we fallback for
           GIT_AUTHOR. We claim the ident is explicit, even though
           the author is not.
      
        2. GIT_AUTHOR_* is set and we ask for author ident, but
           not committer ident. We will claim the ident is
           implicit, even though it is explicit.
      
      This patch uses two variables instead of one, updates both
      when we set the "fallback" values, and updates them
      individually when we read from the environment.
      
      Rather than keep user_ident_sufficiently_given as a
      compatibility wrapper, we update the only two callers to
      check the committer_ident, which matches their intent and
      what was happening already.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      d6991cee
    • Jeff King's avatar
      ident: make user_ident_explicitly_given static · 45280230
      Jeff King authored
      In v1.5.6-rc0~56^2 (2008-05-04) "user_ident_explicitly_given"
      was introduced as a global for communication between config,
      ident, and builtin-commit.  In v1.7.0-rc0~72^2 (2010-01-07)
      readers switched to using the common wrapper
      user_ident_sufficiently_given().  After v1.7.11-rc1~15^2~18
      (2012-05-21), the var is only written in ident.c.
      
      Now we can make it static, which will enable further
      refactoring without worrying about upsetting other code.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Reviewed-by: 's avatarJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      45280230
  26. 16 Sep, 2012 1 commit
  27. 31 Aug, 2012 1 commit
    • Junio C Hamano's avatar
      split_ident_line(): make best effort when parsing author/committer line · e27ddb64
      Junio C Hamano authored
      Commits made by ancient version of Git allowed committer without
      human readable name, like this (00213b17c in the kernel history):
      
          tree 6947dba41f8b0e7fe7bccd41a4840d6de6a27079
          parent 352dd1df32e672be4cff71132eb9c06a257872fe
          author Petr Baudis <pasky@ucw.cz> 1135223044 +0100
          committer  <sam@mars.ravnborg.org> 1136151043 +0100
      
          kconfig: Remove support for lxdialog --checklist
      
          ...
      Signed-off-by: 's avatarPetr Baudis <pasky@suse.cz>
      Signed-off-by: 's avatarSam Ravnborg <sam@ravnborg.org>
      
      When fed such a commit, --format='%ci' fails to parse it, and gives
      back an empty string.  Update the split_ident_line() to be a bit
      more lenient when parsing, but make sure the caller that wants to
      pick up sane value from its return value does its own validation.
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      e27ddb64
  28. 25 May, 2012 4 commits
    • Jeff King's avatar
      ident: reject bogus email addresses with IDENT_STRICT · 8c5b1ae1
      Jeff King authored
      If we come up with a hostname like "foo.(none)" because the
      user's machine is not fully qualified, we should reject this
      in strict mode (e.g., when we are making a commit object),
      just as we reject an empty gecos username.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      8c5b1ae1
    • Jeff King's avatar
      ident: rename IDENT_ERROR_ON_NO_NAME to IDENT_STRICT · f9bc573f
      Jeff King authored
      Callers who ask for ERROR_ON_NO_NAME are not so much
      concerned that the name will be blank (because, after all,
      we will fall back to using the username), but rather it is a
      check to make sure that low-quality identities do not end up
      in things like commit messages or emails (whereas it is OK
      for them to end up in things like reflogs).
      
      When future commits add more quality checks on the identity,
      each of these callers would want to use those checks, too.
      Rather than modify each of them later to add a new flag,
      let's refactor the flag.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      f9bc573f
    • Jeff King's avatar
      ident: let callers omit name with fmt_indent · c15e1987
      Jeff King authored
      Most callers want to see all of "$name <$email> $date", but
      a few want only limited parts, omitting the date, or even
      the name. We already have IDENT_NO_DATE to handle the date
      part, but there's not a good option for getting just the
      email. Callers have to done one of:
      
        1. Call ident_default_email; this does not respect
           environment variables, nor does it promise to trim
           whitespace or other crud from the result.
      
        2. Call git_{committer,author}_info; this returns the name
           and email, leaving the caller to parse out the wanted
           bits.
      
      This patch adds IDENT_NO_NAME; it stops short of adding
      IDENT_NO_EMAIL, as no callers want it (nor are likely to),
      and it complicates the error handling of the function.
      
      When no name is requested, the angle brackets (<>) around
      the email address are also omitted.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      c15e1987
    • Jeff King's avatar
      ident: refactor NO_DATE flag in fmt_ident · 359b27ad
      Jeff King authored
      As a short-hand, we extract this flag into the local
      variable "name_addr_only". It's more accurate to simply
      negate this and refer to it as "want_date", which will be
      less confusing when we add more NO_* flags.
      
      While we're touching this part of the code, let's move the
      call to ident_default_date() only when we are actually going
      to use it, not when we have NO_DATE set, or when we get a
      date from the environment.
      Signed-off-by: 's avatarJeff King <peff@peff.net>
      Signed-off-by: 's avatarJunio C Hamano <gitster@pobox.com>
      359b27ad