1. 27 5月, 2011 5 次提交
    • J
      format-patch: preserve subject newlines with -k · 9553d2b2
      Jeff King 提交于
      In older versions of git, we used rfc822 header folding to
      indicate that the original subject line had multiple lines
      in it.  But since a1f6baa5 (format-patch: wrap long header
      lines, 2011-02-23), we now use header folding whenever there
      is a long line.
      
      This means that "git am" cannot trust header folding as a
      sign from format-patch that newlines should be preserved.
      Instead, format-patch needs to signal more explicitly that
      the newlines are significant.  This patch does so by
      rfc2047-encoding the newlines in the subject line. No
      changes are needed on the "git am" end; it already decodes
      the newlines properly.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      9553d2b2
    • J
      clean up calling conventions for pretty.c functions · 6bf13944
      Jeff King 提交于
      We have a pretty_print_context representing the parameters
      for a pretty-print session, but we did not use it uniformly.
      As a result, functions kept growing more and more arguments.
      
      Let's clean this up in a few ways:
      
        1. All pretty-print pp_* functions now take a context.
           This lets us reduce the number of arguments to these
           functions, since we were just passing around the
           context values separately.
      
        2. The context argument now has a cmit_fmt field, which
           was passed around separately. That's one less argument
           per function.
      
        3. The context argument always comes first, which makes
           calling a little more uniform.
      
      This drops lines from some callers, and adds lines in a few
      places (because we need an extra line to set the context's
      fmt field). Overall, we don't save many lines, but the lines
      that are there are a lot simpler and more readable.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      6bf13944
    • J
      pretty: add pp_commit_easy function for simple callers · 8b8a5374
      Jeff King 提交于
      Many callers don't actually care about the pretty print
      context at all; let's just give them a simple way of
      pretty-printing a commit without having to create a context
      struct.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8b8a5374
    • J
      mailinfo: always clean up rfc822 header folding · 5b38456e
      Jeff King 提交于
      Without the "-k" option, mailinfo will convert a folded
      subject header like:
      
        Subject: this is a
          subject that doesn't
          fit on one line
      
      into a single line. With "-k", however, we assumed that
      these newlines were significant and represented something
      that the sending side would want us to preserve.
      
      For messages created by format-patch, this assumption was
      broken by a1f6baa5 (format-patch: wrap long header lines,
      2011-02-23).  For messages sent by arbitrary MUAs, this was
      probably never a good assumption to make, as they may have
      been folding subjects in accordance with rfc822's line
      length recommendations all along.
      
      This patch now joins folded lines with a single whitespace
      character. This treats header folding purely as a syntactic
      feature of the transport mechanism, not as something that
      format-patch is trying to tell us about the original
      subject.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      5b38456e
    • J
      t: test subject handling in format-patch / am pipeline · 00ebc977
      Jeff King 提交于
      Commit a1f6baa5 (format-patch: wrap long header lines,
      2011-02-23) changed format-patch's behavior with respect to
      long header lines, but made no accompanying changes to the
      receiving side. It was thought that "git am" would handle
      these folded subjects fine, but there is a regression when
      using "am -k".
      
      Let's add a test documenting this. While we're at it, let's
      give more complete test coverage to document what should be
      happening in each case. We test three types of subjects:
      a short one, one long enough to require wrapping, and a
      multiline subject. For each, we test these three
      combinations:
      
        format-patch | am
        format-patch -k | am
        format-patch -k | am -k
      
      We don't bother testing "format-patch | am -k", which is
      nonsense (you will be adding in [PATCH] cruft to each
      subject).
      
      This reveals the regression above (long subjects have
      linebreaks introduced via "format-patch -k | am -k"),
      as well as an existing non-optimal behavior (multiline
      subjects are not preserved using "-k").
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      00ebc977
  2. 15 4月, 2011 1 次提交
    • J
      format-patch: wrap email addresses after long names · 990f6e30
      Jeff King 提交于
      We already wrap names in "from" headers, which tend to be
      the long part of an address. But it's also possible for a
      long name to not be wrapped, but to make us want to wrap the
      email address. For example (imagine for the sake of
      readability we want to wrap at 50 characters instead of 78):
      
        From: this is my really long git name <foo@example.com>
      
      The name does not overflow the line, but the name and email
      together do. So we would rather see:
      
        From: this is my really long git name
          <git@example.com>
      
      Because we wrap the name separately during add_rfc2047, we
      neglected this case. Instead, we should see how long the
      final line of the wrapped name ended up, and decide whether
      or not to wrap based on that. We can't break the address
      into multiple parts, so we either leave it with the name, or
      put it by itself on a line.
      
      Test by Erik Faye-Lund.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      990f6e30
  3. 24 2月, 2011 3 次提交
    • J
      format-patch: rfc2047-encode newlines in headers · c22e7de3
      Jeff King 提交于
      These should generally never happen, as we already
      concatenate multiples in subjects into a single line. But
      let's be defensive, since not encoding them means we will
      output malformed headers.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      c22e7de3
    • J
      format-patch: wrap long header lines · a1f6baa5
      Jeff King 提交于
      Subject and identity headers may be arbitrarily long. In the
      past, we just assumed that single-line headers would be
      reasonably short. For multi-line subjects that we squish
      into a single line, we just "pre-folded" the data in
      pp_title_line by adding a newline and indentation.
      
      There were two problems. One is that, although rare,
      single-line messages can actually be longer than the
      recommended line-length limits. The second is that the
      pre-folding interacted badly with rfc2047 encoding, leading
      to malformed headers.
      
      Instead, let's stop pre-folding the subject lines, and just
      fold everything based on length in add_rfc2047, whether
      it is encoded or not.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a1f6baa5
    • J
      strbuf: add fixed-length version of add_wrapped_text · 98acc837
      Jeff King 提交于
      The function strbuf_add_wrapped_text takes a NUL-terminated
      string. This makes it annoying to wrap strings we have as a
      pointer and a length.
      
      Refactoring strbuf_add_wrapped_text and all of its
      sub-functions to handle fixed-length strings turned out to
      be really ugly. So this implementation is lame; it just
      strdups the text and operates on the NUL-terminated version.
      This should be fine as the strings we are wrapping are
      generally pretty short.  If it becomes a problem, we can
      optimize later.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      98acc837
  4. 31 1月, 2011 1 次提交
  5. 28 1月, 2011 6 次提交
    • A
      Don't pass "--xhtml" to hightlight in gitweb.perl script. · d2d434be
      Adam Tkac 提交于
      The "--xhtml" option is supported only in highlight < 3.0. There is no option
      to enforce (X)HTML output format compatible with both highlight < 3.0 and
      highlight >= 3.0. However default output format is HTML so we don't need to
      explicitly specify it.
      Signed-off-by: NAdam Tkac <atkac@redhat.com>
      Helped-by: NJakub Narebski <jnareb@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      d2d434be
    • J
      Merge branch 'maint' · 99e63ef2
      Junio C Hamano 提交于
      * maint:
        rebase -i: clarify in-editor documentation of "exec"
        tests: sanitize more git environment variables
        fast-import: treat filemodify with empty tree as delete
        rebase: give a better error message for bogus branch
        rebase: use explicit "--" with checkout
      
      Conflicts:
      	t/t9300-fast-import.sh
      99e63ef2
    • J
      rebase -i: clarify in-editor documentation of "exec" · 960ac5ff
      Jonathan Nieder 提交于
      The hints in the current "instruction sheet" template look like so:
      
       # Rebase 3f142468..a1d7e01 onto 3f142468
       #
       # Commands:
       #  p, pick = use commit
       #  r, reword = use commit, but edit the commit message
       #  e, edit = use commit, but stop for amending
       #  s, squash = use commit, but meld into previous commit
       #  f, fixup = like "squash", but discard this commit's log message
       #  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
       #
       # If you remove a line here THAT COMMIT WILL BE LOST.
       # However, if you remove everything, the rebase will be aborted.
       #
      
      This does not make it clear that the format of each line is
      
      	<insn> <commit id> <explanatory text that will be printed>
      
      but the reader will probably infer that from the automatically
      generated pick examples above it.
      
      What about the "exec" instruction?  By analogy, I might imagine that
      the format of that line is "exec <command> <explanatory text>", and
      the "x <cmd>" hint does not address that question (at first I read it
      as taking an argument <cmd> that is the name of a shell).  Meanwhile,
      the mention of <cmd> makes the hints harder to scan as a table.
      
      So remove the <cmd> and add some words to remind the reader that
      "exec" runs a command named by the rest of the line.  To make room, it
      is left to the manpage to explain that that command is run using
      $SHELL and that nonzero status from that command will pause the
      rebase.
      
      Wording from Junio.
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      960ac5ff
    • J
      tests: sanitize more git environment variables · a1231de0
      Jeff King 提交于
      These variables should generally not be set in one's
      environment, but they do get set by rebase, which means
      doing an interactive rebase like:
      
        pick abcd1234 foo
        exec make test
      
      will cause false negatives in the test suite.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a1231de0
    • J
      Merge branch 'jn/fast-import-empty-tree-removal' into maint · 5ce32581
      Junio C Hamano 提交于
      * jn/fast-import-empty-tree-removal:
        fast-import: treat filemodify with empty tree as delete
      5ce32581
    • J
      fast-import: treat filemodify with empty tree as delete · 8fe533f6
      Jonathan Nieder 提交于
      Normal git processes do not allow one to build a tree with an empty
      subtree entry without trying hard at it.  This is in keeping with the
      general UI philosophy: git tracks content, not empty directories.
      
      v1.7.3-rc0~75^2 (2010-06-30) changed that by making it easy to include
      an empty subtree in fast-import's active commit:
      
      	M 040000 4b825dc642cb6eb9a060e54bf8d69288fbee4904 subdir
      
      One can trigger this by reading an empty tree (for example, the tree
      corresponding to an empty root commit) and trying to move it to a
      subtree.  It is better and more closely analogous to 'git read-tree
      --prefix' to treat such commands as requests to remove the subtree.
      Noticed-by: NDavid Barr <david.barr@cordelta.com>
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8fe533f6
  6. 27 1月, 2011 2 次提交
    • J
      rebase: give a better error message for bogus branch · 4ac5356c
      Jeff King 提交于
      When you give a non-existent branch to git-rebase, it spits
      out the usage. This can be confusing, since you may
      understand the usage just fine, but simply have made a
      mistake in the branch name.
      
      Before:
      
        $ git rebase origin bogus
        Usage: git rebase ...
      
      After:
      
        $ git rebase origin bogus
        fatal: no such branch: bogus
        Usage: git rebase ...
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4ac5356c
    • J
      rebase: use explicit "--" with checkout · 3b21a438
      Jeff King 提交于
      In the case of a ref/pathname conflict, checkout will
      already do the right thing and checkout the ref. However,
      for a non-existant ref, this has two advantages:
      
        1. If a file with that pathname exists, rebase will
           refresh the file from the index and then rebase the
           current branch instead of producing an error.
      
        2. If no such file exists, the error message using an
           explicit "--" is better:
      
             # before
             $ git rebase -i origin bogus
             error: pathspec 'bogus' did not match any file(s) known to git.
             Could not checkout bogus
      
             # after
             $ git rebase -i origin bogus
             fatal: invalid reference: bogus
             Could not checkout bogus
      
      The problems seem to be trigger-able only through "git
      rebase -i", as regular git-rebase checks the validity of the
      branch parameter as a ref very early on. However, it doesn't
      hurt to be defensive.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      3b21a438
  7. 25 1月, 2011 5 次提交
  8. 22 1月, 2011 2 次提交
    • J
      Subject: setup: officially support --work-tree without --git-dir · 4868b2ea
      Jonathan Nieder 提交于
      The original intention of --work-tree was to allow people to work in a
      subdirectory of their working tree that does not have an embedded .git
      directory.  Because their working tree, which their $cwd was in, did not
      have an embedded .git, they needed to use $GIT_DIR to specify where it is,
      and because this meant there was no way to discover where the root level
      of the working tree was, so we needed to add $GIT_WORK_TREE to tell git
      where it was.
      
      However, this facility has long been (mis)used by people's scripts to
      start git from a working tree _with_ an embedded .git directory, let git
      find .git directory, and then pretend as if an unrelated directory were
      the associated working tree of the .git directory found by the discovery
      process.  It happens to work in simple cases, and is not worth causing
      "regression" to these scripts.
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4868b2ea
    • J
      Documentation: do not treat reset --keep as a special case · 8c0db6fd
      Jonathan Nieder 提交于
      The current treatment of "git reset --keep" emphasizes how it
      differs from --hard (treatment of local changes) and how it breaks
      down into plumbing (git read-tree -m -u HEAD <commit> followed by git
      update-ref HEAD <commit>).  This can discourage people from using
      it, since it might seem to be a complex or niche option.
      
      Better to emphasize what the --keep flag is intended for --- moving
      the index and worktree from one commit to another, like "git checkout"
      would --- so the reader can make a more informed decision about the
      appropriate situations in which to use it.
      Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      8c0db6fd
  9. 21 1月, 2011 1 次提交
    • B
      Correctly report corrupted objects · 25f3af3f
      Björn Steinbrink 提交于
      The errno check added in commit 3ba7a065 "A loose object is not corrupt
      if it cannot be read due to EMFILE" only checked for whether errno is
      not ENOENT and thus incorrectly treated "no error" as an error
      condition.
      
      Because of that, it never reached the code path that would report that
      the object is corrupted and instead caused funny errors like:
      
        fatal: failed to read object 333c4768ce595793fdab1ef3a036413e2a883853: Success
      
      So we have to extend the check to cover the case in which the object
      file was successfully read, but its contents are corrupted.
      Reported-by: NWill Palmer <wmpalmer@gmail.com>
      Signed-off-by: NBjörn Steinbrink <B.Steinbrink@gmx.de>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      25f3af3f
  10. 20 1月, 2011 14 次提交