1. 28 10月, 2005 4 次提交
  2. 27 10月, 2005 11 次提交
    • J
      Merge branch 'js-fat' · c1aaa5d9
      Junio C Hamano 提交于
      c1aaa5d9
    • J
      Merge branch 'lt-dense' · 5ef1862a
      Junio C Hamano 提交于
      5ef1862a
    • J
      Merge http://www.kernel.org/pub/scm/gitk/gitk · 1301c6eb
      Junio C Hamano 提交于
      1301c6eb
    • L
      [PATCH] Make "gitk" work better with dense revlists · 8b7e5d76
      Linus Torvalds 提交于
      To generate the diff for a commit, gitk used to do
      
      	git-diff-tree -p -C $p $id
      
      (and same thing to generate filenames, except using just "-r" there) which
      does actually generate the diff from the parent to the $id, exactly like
      it meant to do.
      
      However, that really sucks with --dense, where the "parent" information
      has all been rewritten to point to the previous commit. The diff actually
      works exactly right, but now it's the diff of the _whole_ sequence of
      commits all the way to the previous commit that last changed the file(s)
      that we are looking at.
      
      And that's really not what we want 99.9% of the time, even if it may be
      perfectly sensible. Not only will the diff not actually match the commit
      message, but it will usually be _huge_, and all of it will be totally
      uninteresting to us, since we were only interested in a particular set of
      files.
      
      It also doesn't match what we do when we write the patch to a file.
      
      So this makes gitk just show the diff of _that_ commit.
      
      We might even want to have some way to limit the diff to only the
      filenames we're interested in, but it's often nice to see what else
      changed at the same time, so that's secondary.
      
      The merge diff handling is left alone, although I think that should also
      be changed to only look at what that _particular_ merge did, not what it
      did when compared to the faked-out parents.
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      8b7e5d76
    • L
      git-rev-list: do not forget non-commit refs · 19a7e715
      Linus Torvalds 提交于
      What happens is that the new logic decides that if it can't look up a
      commit reference (ie "get_commit_reference()" returns NULL), the thing
      must be a pathname.
      
      Fair enough.
      
      But wrong.
      
      The thing is, it may be a perfectly fine ref that _isn't_ a commit. In
      git, you have a tag that points to your PGP key, and in the kernel, I have
      a tag that points to a tree (and a direct ref that points to that tree
      too, for that matter).
      
      So the rule is (as for all the other programs that mix revs and pathnames)
      not that we only accept commit references, but _any_ valid object ref.
      
      If the object then isn't a commit ref, git-rev-list will either ignore it,
      or add it to the list of non-commit objects (if using "--objects").
      
      The solution is to move the "get_sha1()" out of get_commit_reference(),
      and into the callers. In fact, we already _have_ the SHA1 in the case of
      the handle_all() loop, since for_each_ref() will have done it for us, so
      this is the correct thing to do anyway.
      
      This patch (on top of the original one) does exactly that.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      19a7e715
    • L
      git-rev-list: make --dense the default (and introduce "--sparse") · 7b34c2fa
      Linus Torvalds 提交于
      This actually does three things:
      
       - make "--dense" the default for git-rev-list. Since dense is a no-op if
         no filenames are given, this doesn't actually change any historical
         behaviour, but it's logically the right default (if we want to prune on
         filenames, do it fully. The sparse "merge-only" thing may be useful,
         but it's not what you'd normally expect)
      
       - make "git-rev-parse" show the default revision control before it shows
         any pathnames.
      
         This was a real bug, but nobody would ever have noticed, because
         the default thing tends to only make sense for git-rev-list, and
         git-rev-list didn't use to take pathnames.
      
       - it changes "git-rev-list" to match the other commands that take a mix
         of revisions and filenames - it no longer requires the "--" before
         filenames (although you still need to do it if a filename could be
         confused with a revision name, eg "gitk" in the git archive)
      
      This all just makes for much more pleasant and obvous usage. Just doing a
      
      	gitk t/
      
      does the obvious thing: it will show the history as it concerns the "t/"
      subdirectory.
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      7b34c2fa
    • J
      Test in git-init-db if the filemode can be trusted · e24317b4
      Johannes Schindelin 提交于
      ... and if not, write an appropriate .git/config. Of course, that happens
      only if no config file was yet created (by a template or a hook).
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      e24317b4
    • J
      Add git-name-rev · bd321bcc
      Johannes Schindelin 提交于
      git-name-rev tries to find nice symbolic names for commits. It does so by
      walking the commits from the refs. When the symbolic name is ambiguous, the
      following heuristic is applied: Try to avoid too many ~'s, and if two ambiguous
      names have the same count of ~'s, take the one whose last number is smaller.
      
      With "--tags", the names are derived only from tags.
      
      With "--stdin", the stdin is parsed, and after every sha1 for which a name
      could be found, the name is appended. (Try "git log | git name-rev --stdin".)
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      bd321bcc
    • J
      pack-objects: Allow use of pre-generated pack. · f3123c4a
      Junio C Hamano 提交于
      git-pack-objects can reuse pack files stored in $GIT_DIR/pack-cache
      directory, when a necessary pack is found.  This is hopefully useful
      when upload-pack (called from git-daemon) is expected to receive
      requests for the same set of objects many times (e.g full cloning
      request of any project, or updates from the set of heads previous day
      to the latest for a slow moving project).
      
      Currently git-pack-objects does *not* keep pack files it creates for
      reusing.  It might be useful to add --update-cache option to it,
      which would allow it store pack files it created in the pack-cache
      directory, and prune rarely used ones from it.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      f3123c4a
    • L
      Fix what to do and how to detect when hardlinking fails · 7ebb6fca
      Linus Torvalds 提交于
      Recent FAT workaround caused compilation trouble on OpenBSD;
      different platforms use different error codes when we try to
      hardlink the temporary file to its final location.  Existing
      Coda hack also checks its own error code, but the thing is,
      the case we care about is if link failed for a reason other
      than that the final file has already existed (which would be
      normal, or it could mean collision).  So just check the error
      code against EEXIST.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      7ebb6fca
    • J
      Fix cloning (memory corruption) · b5c367f7
      Johannes Schindelin 提交于
      upload-pack would set create_full_pack=1 if nr_has==0, but would ask later
      if nr_needs<MAX_NEEDS. If that proves true, it would ignore create_full_pack,
      and arguments would be written into unreserved memory.
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      b5c367f7
  3. 26 10月, 2005 12 次提交
  4. 25 10月, 2005 7 次提交
    • J
      upload-pack: fix thinko in common-commit finder code. · 7efc8e43
      Junio C Hamano 提交于
      The code to check if we have the object the other side has was bogus
      (my fault).
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      7efc8e43
    • J
      git-fetch-pack: Implement client part of the multi_ack extension · 40a10462
      Johannes Schindelin 提交于
      This patch concludes the series, which makes
      git-fetch-pack/git-upload-pack negotiate a potentially better set of
      common revs. It should make a difference when fetching from a repository
      with a few branches.
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      40a10462
    • J
      git-fetch-pack: Do not use git-rev-list · 69779a56
      Johannes Schindelin 提交于
      The code used to call git-rev-list to enumerate the local revisions. A
      disadvantage of that method was that git-rev-list, lacking a control apart
      from the command line, would happily enumerate ancestors of acknowledged
      common commits, which was just taking unnecessary bandwidth.
      
      Therefore, do not use git-rev-list on the fetching side, but rather
      construct the list on the go. Send the revisions starting from the local
      heads, ignoring the revisions known to be common.
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      69779a56
    • J
      git-upload-pack: Support sending multiple ACK messages · 0f8fdc39
      Johannes Schindelin 提交于
      The current fetch/upload protocol works like this:
      
      - client sends revs it wants to have via "want" messages
      - client sends a flush message (message with len 0)
      - client sends revs it has via "have" messages
      - after one window (32 revs), a flush is sent
      - after each subsequent window, a flush is sent, and an ACK/NAK is received.
              (NAK means that server does not have any of the transmitted revs;
               ACK sends also the sha1 of the rev server has)
       - when the first ACK is received, client sends "done", and does not expect
              any further messages
      
      One special case, though:
      
      - if no ACK is received (only NAK's), and client runs out of revs to send,
              "done" is sent, and server sends just one more "NAK"
      
      A smarter scheme, which actually has a chance to detect more than one
      common rev, would be to send more than just one ACK. This patch implements
      the server side of the following extension to the protocol:
      
      - client sends at least one "want" message with "multi_ack" appended, like
      
              "want 1234567890123456789012345678901234567890 multi_ack"
      
      - if the server understands that extension, it will send ACK messages for all
              revs it has, not just the first one
      
      - server appends "continue" to the ACK messages like
      
              "ACK 1234567890123456789012345678901234567890 continue"
      
              until it has MAX_HAS-1 revs. In this manner, client knows when to
              stop sending revs by checking for the substring "continue" (and
              further knows that server understands multi_ack)
      
      In this manner, the protocol stays backwards compatible, since both client
      must send "want ... multi_ack" and server must answer with "ACK ...
      continue" to enable the extension.
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      0f8fdc39
    • J
      git-upload-pack: More efficient usage of the has_sha1 array · 794f9fe7
      Johannes Schindelin 提交于
      This patch is based on Junio's proposal. It marks parents of common revs
      so that they do not clutter up the has_sha1 array.
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      794f9fe7
    • L
      Add git-shell. · 35eb2d36
      Linus Torvalds 提交于
      This adds a very git specific restricted shell, that can be
      added to /etc/shells and set to the pw_shell in the /etc/passwd
      file, to give users ability to push into repositories over ssh
      without giving them full interactive shell acount.
      
      [jc: I updated Linus' patch to match what the current sq_quote()
       does.]
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      35eb2d36
    • J
      Clarify git status output. · 38cc7ab8
      Junio C Hamano 提交于
      What we list as "Ignored files" are not "ignored".  Rather, it
      is the list of "not listed in the to-be-ignored files, but
      exists -- you may be forgetting to add them".
      
      Pointed out by Daniel.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      38cc7ab8
  5. 24 10月, 2005 3 次提交
    • A
      Require zlib >= 1.2 for RPM. · 7744f3b8
      Andreas Ericsson 提交于
      git-update-index requires zlib >= 1.2, which introduced the *Bound
      functions.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      7744f3b8
    • J
      Add git-mv · 1114b26e
      Josef Weidendorfer 提交于
      It supersedes git-rename by adding functionality to move multiple
      files, directories or symlinks into another directory.  It also
      provides according documentation.
      
      The implementation renames multiple files, using the arguments from
      the command line to produce an array of sources and destinations.  In
      a first pass, all requested renames are checked for errors, and
      overwriting of existing files is only allowed with '-f'.  The actual
      renaming is done in a second pass.  This ensures that any error
      condition is checked before anything is changed.
      Signed-off-by: NJosef Weidendorfer <Josef.Weidendorfer@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      1114b26e
    • P
      Silence confusing and false-positive curl error message · e2029eb9
      Petr Baudis 提交于
      git-http-fetch spits out curl 404 error message when unable to fetch an object,
      but that's confusing since no error really happened and the object is usually
      found in a pack it tries right after that. And if the object still cannot be
      retrieved, it will say another error message anyway. OTOH other HTTP errors
      (403 etc) are likely fatal and the user should be still informed about them.
      Signed-off-by: NPetr Baudis <pasky@suse.cz>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      e2029eb9
  6. 23 10月, 2005 3 次提交
    • J
      Merge branch 'fixes' · 8ac3a61f
      Junio C Hamano 提交于
      8ac3a61f
    • J
      git-show-branch: Fix off-by-one error. · 79778e46
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      79778e46
    • L
      git-rev-list: add "--dense" flag · 1b9e059d
      Linus Torvalds 提交于
      This is what the recent git-rev-list changes have all been gearing up for.
      
      When we use a path filter to git-rev-list, the new "--dense" flag asks
      git-rev-list to compress the history so that it _only_ contains commits
      that change files in the path filter.  It also rewrites the parent
      information so that tools like "gitk" will see the result as a dense
      history tree.
      
      For example, on the current kernel archive:
      
      	[torvalds@g5 linux]$ git-rev-list HEAD | wc -l
      	9904
      	[torvalds@g5 linux]$ git-rev-list HEAD -- kernel | wc -l
      	5442
      	[torvalds@g5 linux]$ git-rev-list --dense HEAD -- kernel | wc -l
      	356
      
      which shows that while we have almost ten thousand commits, we can prune
      down the work to slightly more than half by only following the merges
      that are interesting. But further, we can then compress the history to
      just 356 entries that actually make changes to the kernel subdirectory.
      
      To see this in action, try something like
      
      	gitk --dense -- gitk
      
      to see just the history that affects gitk.  Or, to show that true
      parallel development still remains parallel, do
      
      	gitk --dense -- daemon.c
      
      which shows some parallel commits in the current git tree.
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      1b9e059d