1. 21 1月, 2008 18 次提交
    • S
      Teach fast-import to honor pack.compression and pack.depth · bb23fdfa
      Shawn O. Pearce 提交于
      We now use the configured pack.compression and pack.depth values
      within fast-import, as like builtin-pack-objects fast-import is
      generating a packfile for consumption by the Git tools.
      
      We use the same behavior as builtin-pack-objects does for these
      options, allowing core.compression to supply the default value
      for pack.compression.
      
      The default setting for pack.depth within fast-import is still 10
      as users will generally repack fast-import generated packfiles by
      `repack -f`.  A large delta depth within the fast-import packfile
      can significantly slow down such a later repack.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      bb23fdfa
    • S
      submodule: Document the details of the command line syntax · c4a95c9f
      Steffen Prohaska 提交于
      Only "status" accepts "--cached" and the preferred way of
      passing sub-command specific options is after the sub-command.
      
      The documentation is adapted to reflect this.
      Signed-off-by: NSteffen Prohaska <prohaska@zib.de>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      c4a95c9f
    • J
      git-submodule: add test for the subcommand parser fix · a2d93aea
      Junio C Hamano 提交于
      This modifies the existing t7400 test to use 'init' as the
      pathname that a submodule is bound to.  Without the earlier
      subcommand parser fix, this fails.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      a2d93aea
    • J
      git-submodule: fix subcommand parser · 5c08dbbd
      Junio C Hamano 提交于
      The subcommand parser of "git submodule" made its subcommand
      names reserved words.  As a consequence, a command like this:
      
          $ git submodule add init update
      
      which is meant to add a submodule called 'init' at path 'update'
      was misinterpreted as a request to invoke more than one mutually
      incompatible subcommands and incorrectly rejected.
      
      This patch fixes the issue by stopping the subcommand parsing at
      the first subcommand word, to allow the sample command line
      above to work as expected.
      
      It also introduces the usual -- option disambiguator, so that a
      submodule at path '-foo' can be updated with
      
          $ git submodule update -- -foo
      
      without triggering an "unrecognized option -foo" error.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      5c08dbbd
    • J
      git-submodule: rename shell functions for consistency · 23a485e3
      Junio C Hamano 提交于
      This renames the shell functions used in git-submodule that
      implement top-level subcommands.  The rule is that the
      subcommand $foo is implemented by cmd_$foo function.
      
      A noteworthy change is that modules_list() is now known as
      cmd_status().  There is no "submodule list" command.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      23a485e3
    • J
      Merge git://repo.or.cz/git-gui · 36a189c8
      Junio C Hamano 提交于
      * git://repo.or.cz/git-gui:
        git-gui: Correct encoding of glossary/fr.po to UTF-8
        git-gui: Consolidate hook execution code into a single function
        git-gui: Correct window title for hook failure dialogs
        git-gui: Honor the standard commit-msg hook
      36a189c8
    • S
      git-gui: Correct encoding of glossary/fr.po to UTF-8 · 6caaf2da
      Shawn O. Pearce 提交于
      Junio noticed this was incorrectly added in ISO-8859-1 but it should
      be in UTF-8 (as the headers claim UTF-8, and our convention is to use
      only UTF-8).
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      6caaf2da
    • S
      git-gui: Consolidate hook execution code into a single function · ed76cb70
      Shawn O. Pearce 提交于
      The code we use to test if a hook is executable or not differs on
      Cygwin from the normal POSIX case.  Rather then repeating that for
      all three hooks we call in our commit code path we can place the
      common logic into a global procedure and invoke it when necessary.
      
      This also lets us get rid of the ugly "|& cat" we were using before
      as we can now rely on the Tcl 8.4 feature of "2>@1" or fallback to
      the "|& cat" when necessary.
      
      The post-commit hook is now run through the same API, but its outcome
      does not influence the commit status.  As a result we now show any of
      the errors from the post-commit hook in a dialog window, instead of on
      the user's tty that was used to launch git-gui.  This resolves a long
      standing bug related to not getting errors out of the post-commit hook
      when launched under git-gui.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      ed76cb70
    • S
      git-gui: Correct window title for hook failure dialogs · c87238e1
      Shawn O. Pearce 提交于
      During i18n translation work this message was partially broken
      by using "append" instead of "strcat" to join the two different
      parts of the message together.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      c87238e1
    • S
      git-gui: Honor the standard commit-msg hook · fb0ca475
      Shawn O. Pearce 提交于
      Under core Git the git-commit tool will invoke the commit-msg hook
      if it exists and is executable to the user running git-commit.  As
      a hook it has some limited value as it cannot alter the commit, but
      it can modify the message the user is attempting to commit.  It is
      also able to examine the message to ensure it conforms to some local
      standards/conventions.
      
      Since the hook takes the name of a temporary file holding the message
      as its only parameter we need to move the code that creates the temp
      file up earlier in our commit code path, and then pass through that
      file name to the latest stage (where we call git-commit-tree).  We let
      the hook alter the file as it sees fit and we don't bother to look at
      its content again until the commit succeeded and we need the subject
      for the reflog update.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      fb0ca475
    • J
      GIT 1.5.4-rc4 · ce33288e
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      ce33288e
    • J
      Merge git://repo.or.cz/git-gui · 105c21df
      Junio C Hamano 提交于
      * git://repo.or.cz/git-gui:
        git-gui: Makefile - Handle $DESTDIR on Cygwin
        git-gui: add french glossary: glossary/fr.po
        git-gui: Refresh file status description after hunk application
        git-gui: Allow 'Create New Repository' on existing directories
        git-gui: Initial french translation
        git-gui: Improve German translation.
        git-gui: Updated Swedish translation after mailing list review.
        git-gui: Fix broken revert confirmation.
        git-gui: Update German translation
        git-gui: Update glossary: add term "hunk"
      105c21df
    • J
      Merge git://git.kernel.org/pub/scm/gitk/gitk · a41acc63
      Junio C Hamano 提交于
      * git://git.kernel.org/pub/scm/gitk/gitk:
        [PATCH] gitk: make Ctrl "+" really increase the font size
      a41acc63
    • G
      http-push and http-fetch: handle URLs without trailing / · 3057ded0
      Grégoire Barbier 提交于
      The URL to a repository http-push and http-fetch takes should
      have a trailing slash.  Instead of failing the request, add it
      ourselves before attempting such a request.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      3057ded0
    • J
      http-push: clarify the reason of error from the initial PROPFIND request · 325ce395
      Junio C Hamano 提交于
      The first thing http-push does is a PROPFIND to see if the other
      end supports locking.  The failure message we give is always
      reported as "no DAV locking support at the remote repository",
      regardless of the reason why we ended up not finding the locking
      support on the other end.
      
      This moves the code to report "no DAV locking support" down the
      codepath so that the message is issued only when we successfully
      get a response to PROPFIND and the other end say it does not
      support locking.  Other failures, such as connectivity glitches
      and credential mismatches, have their own error message issued
      and we will not issue "no DAV locking" error (we do not even
      know if the remote end supports it).
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      325ce395
    • G
      http-push: fail when info/refs exists and is already locked · 9bdbabad
      Grégoire Barbier 提交于
      Failing instead of silently not updating remote refs makes the things
      clearer for the user when trying to push on a repository while another
      person do (or while a dandling locks are waiting for a 10 minutes
      timeout).
      
      When silently not updating remote refs, the user does not even know
      that git has pushed the objects but leaved the refs as they were
      before (e.g. a new bunch of commits on branch "master" is uploaded,
      however the branch by itsel still points on the previous head commit).
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      9bdbabad
    • G
      http-push: fix webdav lock leak. · 9116de59
      Grégoire Barbier 提交于
      Releasing webdav lock even if push fails because of bad (or no)
      reference on command line.
      
      To reproduce the issue that this patch fixes, prepare a test repository
      availlable over http+webdav, say at http://myhost/myrepo.git/
      
      Then:
      
        $ git clone http://myhost/myrepo.git/
        $ cd myrepo
        $ git push http
        Fetching remote heads...
          refs/
          refs/heads/
          refs/tags/
        No refs in common and none specified; doing nothing.
        $ git push http
        Fetching remote heads...
          refs/
          refs/heads/
          refs/tags/
        No refs in common and none specified; doing nothing.
        $
      
      Finally, you look at the web server logs, and will find one LOCK query
      and no UNLOCK query, of course the second one will be in 423 return
      code instead of 200:
      
      1.2.3.4 - gb [19/Jan/2008:14:24:56 +0100] "LOCK /myrepo.git/info/refs HTTP/1.1" 200 465
      (...)
      1.2.3.4 - gb [19/Jan/2008:14:25:10 +0100] "LOCK /myrepo.git/info/refs HTTP/1.1" 423 363
      
      With this patch, there would have be two UNLOCKs in addition of the LOCKs
      
      From the user's point of view:
      
      - If you realize that you should have typed e.g. "git push http
        master" instead of "git push http", you will have to wait for 10
        minutes for the lock to expire by its own.
      
      - Furthermore, if somebody else is dumb enough to type "git push http"
        while you need to push "master" branch, then you'll need too to wait
        for 10 minutes too.
      Signed-off-by: NGr.ANigoire Barbier <gb@gbarbier.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      9116de59
    • M
      parse_commit_buffer: tighten checks while parsing · 0a617799
      Martin Koegler 提交于
      This tightens the parsing of a commit object in a couple of ways.
      
       - The "tree " header must end with a LF (earlier we did not
         check this condition).
      
       - Make sure parsing of timestamp on the "committer " header
         does not go beyond the buffer, even when (1) the "author "
         header does not end with a LF (this means that the commit
         object is malformed and lacks the committer information) or
         (2) the "committer " header does not have ">" that is the end
         of the e-mail address, or (3) the "committer " header does
         not end with a LF.
      
      We however still keep the existing behaviour to return a parsed
      commit object even when non-structural headers such as committer
      and author are malformed, so that tools that need to look at
      commits to clean up a history with such broken commits can still
      get at the structural data (i.e. the parents chain and the tree
      object).
      Signed-off-by: NMartin Koegler <mkoegler@auto.tuwien.ac.at>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      0a617799
  2. 20 1月, 2008 2 次提交
  3. 19 1月, 2008 7 次提交
  4. 18 1月, 2008 8 次提交
    • J
      color unchanged lines as "plain" in "diff --color-words" · 472ca780
      Jeff King 提交于
      These were mistakenly being colored in "meta" color.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      472ca780
    • J
      autoconf: Add checking for unsetenv function · bfa8fccf
      Jakub Narebski 提交于
      Update configure.ac (and config.mak.in) by adding test for unsetenv
      (NO_UNSETENV).  Add comment about NO_UNSETENV to Makefile header, as
      original commit 731043fd adding compat/unsetenv.c didn't do that.
      Signed-off-by: NJakub Narebski <jnareb@gmail.com>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      bfa8fccf
    • T
      core-tutorial typofix · 5221ecbc
      Thomas Zander 提交于
      Signed-off-by: NThomas Zander <zander@kde.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      5221ecbc
    • J
      Officially deprecate repo-config. · 5c66d0d4
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      5c66d0d4
    • S
      Fix random fast-import errors when compiled with NO_MMAP · c9ced051
      Shawn O. Pearce 提交于
      fast-import was relying on the fact that on most systems mmap() and
      write() are synchronized by the filesystem's buffer cache.  We were
      relying on the ability to mmap() 20 bytes beyond the current end
      of the file, then later fill in those bytes with a future write()
      call, then read them through the previously obtained mmap() address.
      
      This isn't always true with some implementations of NFS, but it is
      especially not true with our NO_MMAP=YesPlease build time option used
      on some platforms.  If fast-import was built with NO_MMAP=YesPlease
      we used the malloc()+pread() emulation and the subsequent write()
      call does not update the trailing 20 bytes of a previously obtained
      "mmap()" (aka malloc'd) address.
      
      Under NO_MMAP that behavior causes unpack_entry() in sha1_file.c to
      be unable to read an object header (or data) that has been unlucky
      enough to be written to the packfile at a location such that it
      is in the trailing 20 bytes of a window previously opened on that
      same packfile.
      
      This bug has gone unnoticed for a very long time as it is highly data
      dependent.  Not only does the object have to be placed at the right
      position, but it also needs to be positioned behind some other object
      that has been accessed due to a branch cache invalidation.  In other
      words the stars had to align just right, and if you did run into
      this bug you probably should also have purchased a lottery ticket.
      
      Fortunately the workaround is a lot easier than the bug explanation.
      
      Before we allow unpack_entry() to read data from a pack window
      that has also (possibly) been modified through write() we force
      all existing windows on that packfile to be closed.  By closing
      the windows we ensure that any new access via the emulated mmap()
      will reread the packfile, updating to the current file content.
      
      This comes at a slight performance degredation as we cannot reuse
      previously cached windows when we update the packfile.  But it
      is a fairly minor difference as the window closes happen at only
      two points:
      
       - When the packfile is finalized and its .idx is generated:
      
         At this stage we are getting ready to update the refs and any
         data access into the packfile is going to be random, and is
         going after only the branch tips (to ensure they are valid).
         Our existing windows (if any) are not likely to be positioned
         at useful locations to access those final tip commits so we
         probably were closing them before anyway.
      
       - When the branch cache missed and we need to reload:
      
         At this point fast-import is getting change commands for the next
         commit and it needs to go re-read a tree object it previously
         had written out to the packfile.  What windows we had (if any)
         are not likely to cover the tree in question so we probably were
         closing them before anyway.
      
      We do try to avoid unnecessarily closing windows in the second case
      by checking to see if the packfile size has increased since the
      last time we called unpack_entry() on that packfile.  If the size
      has not changed then we have not written additional data, and any
      existing window is still vaild.  This nicely handles the cases where
      fast-import is going through a branch cache reload and needs to read
      many trees at once.  During such an event we are not likely to be
      updating the packfile so we do not cycle the windows between reads.
      
      With this change in place t9301-fast-export.sh (which was broken
      by c3b0dec5) finally works again.
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      c9ced051
    • B
      fast-import.c: don't try to commit marks file if write failed · fb54abd6
      Brandon Casey 提交于
      We also move the assignment of -1 to the lock file descriptor
      up, so that rollback_lock_file() can be called safely after a
      possible attempt to fclose(). This matches the contents of
      the 'if' statement just above testing success of fdopen().
      Signed-off-by: NBrandon Casey <casey@nrlssc.navy.mil>
      Acked-by: NShawn O. Pearce <spearce@spearce.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      fb54abd6
    • M
      git-gui: Makefile - Handle $DESTDIR on Cygwin · a0285571
      Mark Levedahl 提交于
      gg_libdir is converted to an absolute Windows path on Cygwin,
      but a later step attempts to prefix $DESTDIR to install to a
      staging directory. Explicitly separate the uses of gg_libdir for
      these two purposes so installation to $DESTDIR will work.
      Signed-off-by: NMark Levedahl <mdl123@verizon.net>
      Signed-off-by: NShawn O. Pearce <spearce@spearce.org>
      a0285571
    • C
      a1f8f504
  5. 17 1月, 2008 5 次提交
    • B
      refs.c: rework ref_locks by abstracting from underlying struct lock_file · b531394d
      Brandon Casey 提交于
      Instead of calling close_lock_file() and commit_lock_file() directly,
      which take a struct lock_file argument, add two new functions:
      close_ref() and commit_ref(), which handle calling the previous
      lock_file functions and modifying the ref_lock structure.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      b531394d
    • B
      Improve use of lockfile API · 4ed7cd3a
      Brandon Casey 提交于
      Remove remaining double close(2)'s.  i.e. close() before
      commit_locked_index() or commit_lock_file().
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      4ed7cd3a
    • B
      close_lock_file(): new function in the lockfile API · d6cf61bf
      Brandon Casey 提交于
      The lockfile API is a handy way to obtain a file that is cleaned
      up if you die().  But sometimes you would need this sequence to
      work:
      
       1. hold_lock_file_for_update() to get a file descriptor for
          writing;
      
       2. write the contents out, without being able to decide if the
          results should be committed or rolled back;
      
       3. do something else that makes the decision --- and this
          "something else" needs the lockfile not to have an open file
          descriptor for writing (e.g. Windows do not want a open file
          to be renamed);
      
       4. call commit_lock_file() or rollback_lock_file() as
          appropriately.
      
      This adds close_lock_file() you can call between step 2 and 3 in
      the above sequence.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      d6cf61bf
    • J
      Document lockfile API · 0c0478ca
      Junio C Hamano 提交于
      We have nice set of placeholders, but nobody stepped in to fill
      the gap in the API documentation, so I am doing it myself.
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      0c0478ca
    • L
      Be more careful about updating refs · c3b0dec5
      Linus Torvalds 提交于
      This makes write_ref_sha1() more careful: it actually checks the SHA1 of
      the ref it is updating, and refuses to update a ref with an object that it
      cannot find.
      
      Perhaps more importantly, it also refuses to update a branch head with a
      non-commit object. I don't quite know *how* the stable series maintainers
      were able to corrupt their repository to have a HEAD that pointed to a tag
      rather than a commit object, but they did. Which results in a totally
      broken repository that cannot be cloned or committed on.
      
      So make it harder for people to shoot themselves in the foot like that.
      
      The test t1400-update-ref.sh is fixed at the same time, as it
      assumed that the commands involved in the particular test would
      not care about corrupted repositories whose refs point at
      nonexistant bogus objects.  That assumption does not hold true
      anymore.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NJunio C Hamano <gitster@pobox.com>
      c3b0dec5