1. 29 10月, 2005 6 次提交
    • C
      Remove -r from common diff options documentation in one more place · 1cb7f22e
      c.shoemaker@cox.net 提交于
      Signed-off-by: Chris Shoemaker <c.shoemaker at cox.net>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      1cb7f22e
    • C
      update usage string for git-commit.sh · 0363ecf6
      c.shoemaker@cox.net 提交于
      Signed-off-by: Chris Shoemaker <c.shoemaker at cox.net>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      0363ecf6
    • C
      git-push.sh: Retain cuteness, add helpfulness. · f9362de9
      c.shoemaker@cox.net 提交于
      Signed-off-by: Chris Shoemaker <c.shoemaker at cox.net>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      f9362de9
    • L
      Be more careful about reference parsing · af13cdf2
      Linus Torvalds 提交于
      This does two things:
      
       - we don't allow "." and ".." as components of a refname. Thus get_sha1()
         will not accept "./refname" as being the same as "refname" any more.
      
       - git-rev-parse stops doing revision translation after seeing a pathname,
         to match the brhaviour of all the tools (once we see a pathname,
         everything else will also be parsed as a pathname).
      
      Basically, if you did
      
      	git log *
      
      and "gitk" was somewhere in the "*", we don't want to replace the filename
      "gitk" with the SHA1 of the branch with the same name.
      
      Of course, if there is any change of ambiguity, you should always use "--"
      to make it explicit what are filenames and what are revisions, but this
      makes the normal cases sane. The refname rule also means that instead of
      the "--", you can do the same thing we're used to doing with filenames
      that start with a slash: use "./filename" instead, and now it's a
      filename, not an option (and not a revision).
      
      So "git log ./*.c" is now actually a perfectly valid thing to do, even if
      the first C-file might have the same name as a branch.
      
      Trivial test:
      
      	git-rev-parse gitk ./gitk gitk
      
      should output something like
      
      	9843c307
      	./gitk
      	gitk
      
      where the "./gitk" isn't seen as a revision, and the second "gitk" is a
      filename simply because we've seen filenames already, and thus stopped
      doing revision parsing.
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      af13cdf2
    • L
      Be marginally more careful about removing objects · 41f222e8
      Linus Torvalds 提交于
      The git philosophy when it comes to disk accesses is "Laugh in the face of
      danger".
      
      Notably, since we never modify an existing object, we don't really care
      that deeply about flushing things to disk, since even if the machine
      crashes in the middle of a git operation, you can never really have lost
      any old work. At most, you'd need to figure out the proper heads (which
      git-fsck-objects can do for you) and re-do the operation.
      
      However, there's two exceptions to this: pruning and repacking. Those
      operations will actually _delete_ old objects that they know about in
      other ways (ie that they just repacked, or that they have found in other
      places).
      
      However, since they actually modify old state, we should thus be a bit
      more careful about them. If the machine crashes and the duplicate new
      objects haven't been flushed to disk, you can actually be in trouble.
      
      This is trivially stupid about it by calling "sync" before removing the
      objects. Not very smart, but we're talking about special operations than
      are usually done once a week if that.
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      41f222e8
    • C
      Documentation changes to recursive option for git-diff-tree · 50b8e355
      Chris Shoemaker 提交于
      Update docs and usages regarding '-r' recursive option for git-diff-tree.
      Remove '-r' from common diff options, mention it only for git-diff-tree.
      Remove one extraneous use of '-r' with git-diff-files in get-merge.sh.
      Sync the synopsis and usage string for git-diff-tree.
      
      Signed-off-by: Chris Shoemaker <c.shoemaker at cox.net>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      50b8e355
  2. 28 10月, 2005 5 次提交
  3. 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
  4. 26 10月, 2005 12 次提交
  5. 25 10月, 2005 6 次提交
    • 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