1. 22 10月, 2007 1 次提交
  2. 21 10月, 2007 14 次提交
    • S
      Use PRIuMAX instead of 'unsigned long long' in show-index · 5be507fc
      Shawn O. Pearce 提交于
      Elsewhere in Git we already use PRIuMAX and cast to uintmax_t when
      we need to display a value that is 'very big' and we're not exactly
      sure what the largest display size is for this platform.
      
      This particular fix is needed so we can do the incredibly crazy
      temporary hack of:
      
          diff --git a/cache.h b/cache.h
          index e0abcd6..6637fd8 100644
          --- a/cache.h
          +++ b/cache.h
          @@ -6,6 +6,7 @@
      
           #include SHA1_HEADER
           #include <zlib.h>
          +#define long long long
      
           #if ZLIB_VERNUM < 0x1200
           #define deflateBound(c,s)  ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11)
      
      allowing us to more easily look for locations where we are passing
      a pointer to an 8 byte value to a function that expects a 4 byte
      value.  This can occur on some platforms where sizeof(long) == 8
      and sizeof(size_t) == 4.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      5be507fc
    • S
      Merge branch 'maint' · 8a37e21d
      Shawn O. Pearce 提交于
      * maint:
        Describe more 1.5.3.5 fixes in release notes
        Fix diffcore-break total breakage
        Fix directory scanner to correctly ignore files without d_type
        Improve receive-pack error message about funny ref creation
        fast-import: Fix argument order to die in file_change_m
        git-gui: Don't display CR within console windows
        git-gui: Handle progress bars from newer gits
        git-gui: Correctly report failures from git-write-tree
        gitk.txt: Fix markup.
        send-pack: respect '+' on wildcard refspecs
        git-gui: accept versions containing text annotations, like 1.5.3.mingw.1
        git-gui: Don't crash when starting gitk from a browser session
        git-gui: Allow gitk to be started on Cygwin with native Tcl/Tk
        git-gui: Ensure .git/info/exclude is honored in Cygwin workdirs
        git-gui: Handle starting on mapped shares under Cygwin
        git-gui: Display message box when we cannot find git in $PATH
        git-gui: Avoid using bold text in entire gui for some fonts
      8a37e21d
    • S
      Describe more 1.5.3.5 fixes in release notes · 2ee52eb1
      Shawn O. Pearce 提交于
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      2ee52eb1
    • L
      Fix diffcore-break total breakage · 6dd4b66f
      Linus Torvalds 提交于
      Ok, so on the kernel list, some people noticed that "git log --follow"
      doesn't work too well with some files in the x86 merge, because a lot of
      files got renamed in very special ways.
      
      In particular, there was a pattern of doing single commits with renames
      that looked basically like
      
       - rename "filename.h" -> "filename_64.h"
       - create new "filename.c" that includes "filename_32.h" or
         "filename_64.h" depending on whether we're 32-bit or 64-bit.
      
      which was preparatory for smushing the two trees together.
      
      Now, there's two issues here:
      
       - "filename.c" *remained*. Yes, it was a rename, but there was a new file
         created with the old name in the same commit. This was important,
         because we wanted each commit to compile properly, so that it was
         bisectable, so splitting the rename into one commit and the "create
         helper file" into another was *not* an option.
      
         So we need to break associations where the contents change too much.
         Fine. We have the -B flag for that. When we break things up, then the
         rename detection will be able to figure out whether there are better
         alternatives.
      
       - "git log --follow" didn't with with -B.
      
      Now, the second case was really simple: we use a different "diffopt"
      structure for the rename detection than the basic one (which we use for
      showing the diffs). So that second case is trivially fixed by a trivial
      one-liner that just copies the break_opt values from the "real" diffopts
      to the one used for rename following. So now "git log -B --follow" works
      fine:
      
      	diff --git a/tree-diff.c b/tree-diff.c
      	index 26bdbdd..7c261fd 100644
      	--- a/tree-diff.c
      	+++ b/tree-diff.c
      	@@ -319,6 +319,7 @@ static void try_to_follow_renames(struct tree_desc *t1, struct tree_desc *t2, co
      	 	diff_opts.detect_rename = DIFF_DETECT_RENAME;
      	 	diff_opts.output_format = DIFF_FORMAT_NO_OUTPUT;
      	 	diff_opts.single_follow = opt->paths[0];
      	+	diff_opts.break_opt = opt->break_opt;
      	 	paths[0] = NULL;
      	 	diff_tree_setup_paths(paths, &diff_opts);
      	 	if (diff_setup_done(&diff_opts) < 0)
      
      however, the end result does *not* work. Because our diffcore-break.c
      logic is totally bogus!
      
      In particular:
      
       - it used to do
      
      	if (base_size < MINIMUM_BREAK_SIZE)
      		return 0; /* we do not break too small filepair */
      
         which basically says "don't bother to break small files". But that
         "base_size" is the *smaller* of the two sizes, which means that if some
         large file was rewritten into one that just includes another file, we
         would look at the (small) result, and decide that it's smaller than the
         break size, so it cannot be worth it to break it up! Even if the other
         side was ten times bigger and looked *nothing* like the samell file!
      
         That's clearly bogus. I replaced "base_size" with "max_size", so that
         we compare the *bigger* of the filepair with the break size.
      
       - It calculated a "merge_score", which was the score needed to merge it
         back together if nothing else wanted it. But even if it was *so*
         different that we would never want to merge it back, we wouldn't
         consider it a break! That makes no sense. So I added
      
      	if (*merge_score_p > break_score)
      		return 1;
      
         to make it clear that if we wouldn't want to merge it at the end, it
         was *definitely* a break.
      
       - It compared the whole "extent of damage", counting all inserts and
         deletes, but it based this score on the "base_size", and generated the
         damage score with
      
      	delta_size = src_removed + literal_added;
      	damage_score = delta_size * MAX_SCORE / base_size;
      
         but that makes no sense either, since quite often, this will result in
         a number that is *bigger* than MAX_SCORE! Why? Because base_size is
         (again) the smaller of the two files we compare, and when you start out
         from a small file and add a lot (or start out from a large file and
         remove a lot), the base_size is going to be much smaller than the
         damage!
      
         Again, the fix was to replace "base_size" with "max_size", at which
         point the damage actually becomes a sane percentage of the whole.
      
      With these changes in place, not only does "git log -B --follow" work for
      the case that triggered this in the first place, ie now
      
      	git log -B --follow arch/x86/kernel/vmlinux_64.lds.S
      
      actually gives reasonable results. But I also wanted to verify it in
      general, by doing a full-history
      
      	git log --stat -B -C
      
      on my kernel tree with the old code and the new code.
      
      There's some tweaking to be done, but generally, the new code generates
      much better results wrt breaking up files (and then finding better rename
      candidates). Here's a few examples of the "--stat" output:
      
       - This:
      	include/asm-x86/Kbuild        |    2 -
      	include/asm-x86/debugreg.h    |   79 +++++++++++++++++++++++++++++++++++------
      	include/asm-x86/debugreg_32.h |   64 ---------------------------------
      	include/asm-x86/debugreg_64.h |   65 ---------------------------------
      	4 files changed, 68 insertions(+), 142 deletions(-)
      
            Becomes:
      
      	include/asm-x86/Kbuild                        |    2 -
      	include/asm-x86/{debugreg_64.h => debugreg.h} |    9 +++-
      	include/asm-x86/debugreg_32.h                 |   64 -------------------------
      	3 files changed, 7 insertions(+), 68 deletions(-)
      
       - This:
      	include/asm-x86/bug.h    |   41 +++++++++++++++++++++++++++++++++++++++--
      	include/asm-x86/bug_32.h |   37 -------------------------------------
      	include/asm-x86/bug_64.h |   34 ----------------------------------
      	3 files changed, 39 insertions(+), 73 deletions(-)
      
            Becomes
      
      	include/asm-x86/{bug_64.h => bug.h} |   20 +++++++++++++-----
      	include/asm-x86/bug_32.h            |   37 -----------------------------------
      	2 files changed, 14 insertions(+), 43 deletions(-)
      
      Now, in some other cases, it does actually turn a rename into a real
      "delete+create" pair, and then the diff is usually bigger, so truth in
      advertizing: it doesn't always generate a nicer diff. But for what -B was
      meant for, I think this is a big improvement, and I suspect those cases
      where it generates a bigger diff are tweakable.
      
      So I think this diff fixes a real bug, but we might still want to tweak
      the default values and perhaps the exact rules for when a break happens.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      6dd4b66f
    • L
      Fix directory scanner to correctly ignore files without d_type · 07134421
      Linus Torvalds 提交于
      On Fri, 19 Oct 2007, Todd T. Fries wrote:
      > If DT_UNKNOWN exists, then we have to do a stat() of some form to
      > find out the right type.
      
      That happened in the case of a pathname that was ignored, and we did
      not ask for "dir->show_ignored". That test used to be *together*
      with the "DTYPE(de) != DT_DIR", but splitting the two tests up
      means that we can do that (common) test before we even bother to
      calculate the real dtype.
      
      Of course, that optimization only matters for systems that don't
      have, or don't fill in DTYPE properly.
      
      I also clarified the real relationship between "exclude" and
      "dir->show_ignored". It used to do
      
      	if (exclude != dir->show_ignored) {
      		..
      
      which wasn't exactly obvious, because it triggers for two different
      cases:
      
       - the path is marked excluded, but we are not interested in ignored
         files: ignore it
      
       - the path is *not* excluded, but we *are* interested in ignored
         files: ignore it unless it's a directory, in which case we might
         have ignored files inside the directory and need to recurse
         into it).
      
      so this splits them into those two cases, since the first case
      doesn't even care about the type.
      
      I also made a the DT_UNKNOWN case a separate helper function,
      and added some commentary to the cases.
      
      		Linus
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      07134421
    • S
      Improved const correctness for strings · 538dfe73
      Shawn O. Pearce 提交于
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      538dfe73
    • S
      Merge git://git.kernel.org/pub/scm/gitk/gitk · 6e863d6d
      Shawn O. Pearce 提交于
      * git://git.kernel.org/pub/scm/gitk/gitk:
        gitk: Fix "can't unset prevlines(...)" Tcl error
        gitk: Avoid an error when cherry-picking if HEAD has moved on
        gitk: Check that we are running on at least Tcl/Tk 8.4
        gitk: Do not pick up file names of "copy from" lines
        gitk: Add support for OS X mouse wheel
        gitk: disable colours when calling git log
      6e863d6d
    • S
      Merge branch 'maint' of git://repo.or.cz/git-gui into maint · 7468c297
      Shawn O. Pearce 提交于
      * 'maint' of git://repo.or.cz/git-gui:
        git-gui: Don't display CR within console windows
        git-gui: Handle progress bars from newer gits
        git-gui: Correctly report failures from git-write-tree
        git-gui: accept versions containing text annotations, like 1.5.3.mingw.1
        git-gui: Don't crash when starting gitk from a browser session
        git-gui: Allow gitk to be started on Cygwin with native Tcl/Tk
        git-gui: Ensure .git/info/exclude is honored in Cygwin workdirs
        git-gui: Handle starting on mapped shares under Cygwin
        git-gui: Display message box when we cannot find git in $PATH
        git-gui: Avoid using bold text in entire gui for some fonts
      7468c297
    • P
      gitk: Fix "can't unset prevlines(...)" Tcl error · e5ef6f95
      Paul Mackerras 提交于
      This fixes the error reported by Michele Ballabio, where gitk will
      throw a Tcl error "can't unset prevlines(...)" when displaying a
      commit that has a parent commit listed more than once, and the commit
      is the first child of that parent.
      
      The problem was basically that we had two variables, prevlines and
      lineends, and were relying on the invariant that prevlines($id) was
      set iff $id was in the lineends($r) list for some $r.  But having
      a duplicate parent breaks that invariant since we end up with the
      parent listed twice in lineends.
      
      This fixes it by simplifying the logic to use only a single variable,
      lineend.  It also rearranges things a little so that we don't try to
      draw the line for the duplicated parent twice.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      e5ef6f95
    • J
      Deduce exec_path also from calls to git with a relative path · 43db492a
      Johannes Schindelin 提交于
      There is already logic in the git wrapper to deduce the exec_path from
      argv[0], when the git wrapper was called with an absolute path.  Extend
      that logic to handle relative paths as well.
      
      For example, when you call "../../hello/world/git", it will not turn
      "../../hello/world" into an absolute path, and use that.
      
      Initial implementation by Scott R Parish.
      Signed-off-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      43db492a
    • J
      Improve receive-pack error message about funny ref creation · 0b8293f6
      Joakim Tjernlund 提交于
      receive-pack is only executed remotely so when
      reporting errors, say so.
      Signed-off-by: NJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      0b8293f6
    • J
      fast-import: Fix argument order to die in file_change_m · 2005dbe2
      Julian Phillips 提交于
      The arguments to the "Not a blob" die call in file_change_m were
      transposed, so that the command was printed as the type, and the type
      as the command.  Switch them around so that the error message comes
      out correctly.
      Signed-off-by: NJulian Phillips <julian@quantumfyre.co.uk>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      2005dbe2
    • S
      git-gui: Don't display CR within console windows · bbbadf6e
      Shawn O. Pearce 提交于
      Git progress bars from tools like git-push and git-fetch use CR
      to skip back to the start of the current line and redraw it with
      an updated progress.  We were doing this in our Tk widget but had
      failed to skip the CR, which Tk doesn't draw well.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      bbbadf6e
    • S
      git-gui: Handle progress bars from newer gits · bea6878b
      Shawn O. Pearce 提交于
      Post Git 1.5.3 a new style progress bar has been introduced that
      uses only one line rather than two.  The formatting of the completed
      and total section is also slightly different so we must adjust our
      regexp to match.  Unfortunately both styles are in active use by
      different versions of Git so we need to look for both.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      bea6878b
  3. 20 10月, 2007 9 次提交
    • C
      git-p4 support for perforce renames. · d9a5f25b
      Chris Pettitt 提交于
      The current git-p4 implementation does support file renames. However, because
      it does not use the "p4 integrate" command, the history for the renamed file is
      not linked to the new file.
      
      This changeset adds support for perforce renames with the integrate command.
      Currently this feature is only enabled when calling git-p4 submit with the -M
      option. This is intended to look and behave similar to the "detect renames"
      feature of other git commands.
      
      The following sequence is used for renamed files:
      
          p4 integrate -Dt x x'
          p4 edit x'
          rm x'
          git apply
          p4 delete x
      
      By default, perforce will not allow an integration with a target file that has
      been deleted. That is, if x' in the example above is the name of a previously
      deleted file then perforce will fail the integrate. The -Dt option tells
      perforce to allow the target of integrate to be a previously deleted file.
      Signed-off-by: NChris Pettitt <cpettitt@gmail.com>
      Signed-off-by: NSimon Hausmann <simon@lst.de>
      d9a5f25b
    • S
      git-p4: When skipping a patch as part of "git-p4 submit" make sure we... · 20947149
      Simon Hausmann 提交于
      git-p4: When skipping a patch as part of "git-p4 submit" make sure we correctly revert to the previous state of the files using "p4 revert".
      Signed-off-by: NSimon Hausmann <simon@lst.de>
      20947149
    • P
      gitk: Avoid an error when cherry-picking if HEAD has moved on · 3ebba3c7
      Paul Mackerras 提交于
      This fixes an error reported by Adam Piątyszek: if the current HEAD
      is not in the graph that gitk knows about when we do a cherry-pick
      using gitk, then gitk hits an error when trying to update its
      internal representation of the topology.  This avoids the error by
      not doing that update if the HEAD before the cherry-pick was a
      commit that gitk doesn't know about.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      3ebba3c7
    • P
      gitk: Check that we are running on at least Tcl/Tk 8.4 · 5d7589d4
      Paul Mackerras 提交于
      This checks that we have Tcl/Tk 8.4 or later, and puts up an error
      message in a window and quits if not.
      
      This was prompted by a patch submitted by Steffen Prohaska, but is
      done a bit differently (this uses package require rather than
      looking at [info tclversion], and uses show_error to display the
      error rather than printing it to stderr).
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      5d7589d4
    • S
      git-gui: Correctly report failures from git-write-tree · 8af52d7a
      Shawn O. Pearce 提交于
      If git-write-tree fails (such as if the index file is currently
      locked and it wants to write to it) we were not getting the error
      message as $tree_id was always the empty string so we shortcut
      through the catch and never got the output from stderr.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      8af52d7a
    • R
      gitk.txt: Fix markup. · 1d5bf7fc
      Ralf Wildenhues 提交于
      For the manpage, avoid generating an em dash in code.
      Signed-off-by: NRalf Wildenhues <Ralf.Wildenhues@gmx.de>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      1d5bf7fc
    • J
      gitk: Do not pick up file names of "copy from" lines · 5e85ec4c
      Johannes Sixt 提交于
      A file copy would be detected only if the original file was modified in the
      same commit. This implies that there will be a patch listed under the
      original file name, and we would expect that clicking the original file
      name in the file list warps the patch window to that file's patch. (If the
      original file was not modified, the copy would not be detected in the first
      place, the copied file would be listed as "new file", and this whole matter
      would not apply.)
      
      However, if the name of the copy is sorted after the original file's patch,
      then the logic introduced by commit d1cb298b (which picks up the link
      information from the "copy from" line) would overwrite the link
      information that is already present for the original file name, which was
      parsed earlier. Hence, this patch reverts part of said commit.
      Signed-off-by: NJohannes Sixt <johannes.sixt@telecom.at>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      5e85ec4c
    • J
      gitk: Add support for OS X mouse wheel · 5dd57d51
      Jonathan del Strother 提交于
      (Väinö Järvelä supplied this patch a while ago for 1.5.2.  It no longer
      applied cleanly, so I'm reposting it.)
      
      MacBook doesn't seem to recognize MouseRelease-4 and -5 events, at all.
      So i added a support for the MouseWheel event, which i limited to Tcl/tk
      aqua, as i couldn't test it neither on Linux or Windows. Tcl/tk needs to
      be updated from the version that is shipped with OS X 10.4 Tiger, for
      this patch to work.
      Signed-off-by: NJonathan del Strother <jon.delStrother@bestbefore.tv>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      5dd57d51
    • J
      send-pack: respect '+' on wildcard refspecs · 5eb73581
      Jeff King 提交于
      When matching source and destination refs, we were failing
      to pull the 'force' parameter from wildcard refspecs (but
      not explicit ones) and attach it to the ref struct.
      
      This adds a test for explicit and wildcard refspecs; the
      latter fails without this patch.
      Signed-off-by: NJeff King <peff@peff.net>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      5eb73581
  4. 19 10月, 2007 12 次提交
  5. 18 10月, 2007 4 次提交