aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* Move code to clean up after a branch change to branch.cDaniel Barkalow2008-02-09
| | | | Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Library function to check for unmerged index entriesDaniel Barkalow2008-02-09
| | | | | | | It's small, but it was in three places already, so it should be in the library. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Use diff -u instead of diff in t7201Daniel Barkalow2008-02-09
| | | | | | | | If the test failed, it was giving really unclear ed script output. Instead, give a diff that sort of suggests the problem. Also replaces the use of "git diff" for this purpose with "diff -u". Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Move create_branch into a library fileDaniel Barkalow2008-02-09
| | | | | | | | | | You can also create branches, in exactly the same way, with checkout -b. This introduces branch.{c,h} library files for doing porcelain-level operations on branches (such as creating them with their appropriate default configuration). Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Build-in merge-recursiveDaniel Barkalow2008-02-09
| | | | | | | | | | | | | | | | | This makes write_tree_from_memory(), which writes the active cache as a tree and returns the struct tree for it, available to other code. It also makes available merge_trees(), which does the internal merge of two trees with a known base, and merge_recursive(), which does the recursive internal merge of two commits with a list of common ancestors. The first two of these will be used by checkout -m, and the third is presumably useful in general, although the implementation of checkout -m which entirely matches the behavior of the shell version does not use it (since it ignores the difference of ancestry between the old branch and the new branch). Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Add "skip_unmerged" option to unpack_trees.Daniel Barkalow2008-02-09
| | | | | | | | | | | | | | This option allows the caller to reset everything that isn't unmerged, leaving the unmerged things to be resolved. If, after a merge of "working" and "HEAD", this is used with "HEAD" (reset, !update), the result will be that all of the changes from "local" are in the working tree but not added to the index (either with the index clean but unchanged, or with the index unmerged, depending on whether there are conflicts). This will be used in checkout -m. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Discard "deleted" cache entries after using them to update the working treeDaniel Barkalow2008-02-09
| | | | | | | | | | | | | | | | | | | | | Way back in read-tree.c, we used a mode 0 cache entry to indicate that an entry had been deleted, so that the update code would remove the working tree file, and we would just skip it when writing out the index file afterward. These days, unpack_trees is a library function, and it is still leaving these entries in the active cache. Furthermore, unpack_trees doesn't correctly ignore those entries, and who knows what other code wouldn't expect them to be there, but just isn't yet called after a call to unpack_trees. To avoid having other code trip over these entries, have check_updates() remove them after it removes the working tree files. While we're at it, simplify the loop in check_updates(), and avoid passing global variables as parameters to check_updates(): there is only one call site anyway. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Send unpack-trees debugging output to stderrDaniel Barkalow2008-02-09
| | | | | | | This is to keep git-stash from getting confused if you're debugging unpack-trees. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Add flag to make unpack_trees() not print errors.Daniel Barkalow2008-02-09
| | | | | | | | | | | | | | | | | | (This applies only to errors where a plausible operation is impossible due to the particular data, not to errors resulting from misuse of the merge functions.) This will allow builtin-checkout to suppress merge errors if it's going to try more merging methods. Additionally, if unpack_trees() returns with an error, but without printing anything, it will roll back any changes to the index (by rereading the index, currently). This obviously could be done by the caller, but chances are that the caller would forget and debugging this is difficult. Also, future implementations may give unpack_trees() a more efficient way of undoing its changes than the caller could. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* Allow callers of unpack_trees() to handle failureDaniel Barkalow2008-02-09
| | | | | | | | | | | Return an error from unpack_trees() instead of calling die(), and exit with an error in read-tree, builtin-commit, and diff-lib. merge-recursive already expected an error return from unpack_trees, so it doesn't need to be changed. The merge function can return negative to abort. This will be used in builtin-checkout -m. Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
* lazy index hashingJunio C Hamano2008-01-22
| | | | | | | This delays the hashing of index names until it becomes necessary for the first time. Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Create pathname-based hash-table lookup into indexLinus Torvalds2008-01-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This creates a hash index of every single file added to the index. Right now that hash index isn't actually used for much: I implemented a "cache_name_exists()" function that uses it to efficiently look up a filename in the index without having to do the O(logn) binary search, but quite frankly, that's not why this patch is interesting. No, the whole and only reason to create the hash of the filenames in the index is that by modifying the hash function, you can fairly easily do things like making it always hash equivalent names into the same bucket. That, in turn, means that suddenly questions like "does this name exist in the index under an _equivalent_ name?" becomes much much cheaper. Guiding principles behind this patch: - it shouldn't be too costly. In fact, my primary goal here was to actually speed up "git commit" with a fully populated kernel tree, by being faster at checking whether a file already existed in the index. I did succeed, but only barely: Best before: [torvalds@woody linux]$ time git commit > /dev/null real 0m0.255s user 0m0.168s sys 0m0.088s Best after: [torvalds@woody linux]$ time ~/git/git commit > /dev/null real 0m0.233s user 0m0.144s sys 0m0.088s so some things are actually faster (~8%). Caveat: that's really the best case. Other things are invariably going to be slightly slower, since we populate that index cache, and quite frankly, few things really use it to look things up. That said, the cost is really quite small. The worst case is probably doing a "git ls-files", which will do very little except puopulate the index, and never actually looks anything up in it, just lists it. Before: [torvalds@woody linux]$ time git ls-files > /dev/null real 0m0.016s user 0m0.016s sys 0m0.000s After: [torvalds@woody linux]$ time ~/git/git ls-files > /dev/null real 0m0.021s user 0m0.012s sys 0m0.008s and while the thing has really gotten relatively much slower, we're still talking about something almost unmeasurable (eg 5ms). And that really should be pretty much the worst case. So we lose 5ms on one "benchmark", but win 22ms on another. Pick your poison - this patch has the advantage that it will _likely_ speed up the cases that are complex and expensive more than it slows down the cases that are already so fast that nobody cares. But if you look at relative speedups/slowdowns, it doesn't look so good. - It should be simple and clean The code may be a bit subtle (the reasons I do hash removal the way I do etc), but it re-uses the existing hash.c files, so it really is fairly small and straightforward apart from a few odd details. Now, this patch on its own doesn't really do much, but I think it's worth looking at, if only because if done correctly, the name hashing really can make an improvement to the whole issue of "do we have a filename that looks like this in the index already". And at least it gets real testing by being used even by default (ie there is a real use-case for it even without any insane filesystems). NOTE NOTE NOTE! The current hash is a joke. I'm ashamed of it, I'm just not ashamed of it enough to really care. I took all the numbers out of my nether regions - I'm sure it's good enough that it works in practice, but the whole point was that you can make a really much fancier hash that hashes characters not directly, but by their upper-case value or something like that, and thus you get a case-insensitive hash, while still keeping the name and the index itself totally case sensitive. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* read-cache.c: introduce is_racy_timestamp() helperJunio C Hamano2008-01-22
| | | | | | | | | | This moves a common boolean expression into a helper function, and makes the comparison between filesystem timestamp and index timestamp done in the function in line with the other places. st.st_mtime should be casted to (unsigned int) when compared to an index timestamp ce_mtime. Signed-off-by: Junio C Hamano <gitster@pobox.com>
* read-cache.c: fix a couple more CE_REMOVE conversionJunio C Hamano2008-01-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | It is a D/F conflict if you want to add "foo/bar" to the index when "foo" already exists. Also it is a conflict if you want to add a file "foo" when "foo/bar" exists. An exception is when the existing entry is there only to mark "I used to be here but I am being removed". This is needed for operations such as "git read-tree -m -u" that update the index and then reflect the result to the work tree --- we need to remember what to remove somewhere, and we use the index for that. In such a case, an existing file "foo" is being removed and we can create "foo/" directory and hang "bar" underneath it without any conflict. We used to use (ce->ce_mode == 0) to mark an entry that is being removed, but (CE_REMOVE & ce->ce_flags) is used for that purpose these days. An earlier commit forgot to convert the logic in the code that checks D/F conflict condition. The old code knew that "to be removed" entries cannot be at higher stage and actively checked that condition, but it was an unnecessary check. This patch removes the extra check as well. Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Also use unpack_trees() in do_diff_cache()Johannes Schindelin2008-01-21
| | | | | | | | | As in run_diff_index(), we call unpack_trees() with the oneway_diff() function in do_diff_cache() now. This makes the function diff_cache() obsolete. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* Make run_diff_index() use unpack_trees(), not read_tree()Linus Torvalds2008-01-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A plain "git commit" would still run lstat() a lot more than necessary, because wt_status_print() would cause the index to be repeatedly flushed and re-read by wt_read_cache(), and that would cause the CE_UPTODATE bit to be lost, resulting in the files in the index being lstat'ed three times each. The reason why wt-status.c ended up invalidating and re-reading the cache multiple times was that it uses "run_diff_index()", which in turn uses "read_tree()" to populate the index with *both* the old index and the tree we want to compare against. So this patch re-writes run_diff_index() to not use read_tree(), but instead use "unpack_trees()" to diff the index to a tree. That, in turn, means that we don't need to modify the index itself, which then means that we don't need to invalidate it and re-read it! This, together with the lstat() optimizations, means that "git commit" on the kernel tree really only needs to lstat() the index entries once. That noticeably cuts down on the cached timings. Best time before: [torvalds@woody linux]$ time git commit > /dev/null real 0m0.399s user 0m0.232s sys 0m0.164s Best time after: [torvalds@woody linux]$ time git commit > /dev/null real 0m0.254s user 0m0.140s sys 0m0.112s so it's a noticeable improvement in addition to being a nice conceptual cleanup (it's really not that pretty that "run_diff_index()" dirties the index!) Doing an "strace -c" on it also shows that as it cuts the number of lstat() calls by two thirds, it goes from being lstat()-limited to being limited by getdents() (which is the readdir system call): Before: % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 60.69 0.000704 0 69230 31 lstat 23.62 0.000274 0 5522 getdents 8.36 0.000097 0 5508 2638 open 2.59 0.000030 0 2869 close 2.50 0.000029 0 274 write 1.47 0.000017 0 2844 fstat After: % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 45.17 0.000276 0 5522 getdents 26.51 0.000162 0 23112 31 lstat 19.80 0.000121 0 5503 2638 open 4.91 0.000030 0 2864 close 1.48 0.000020 0 274 write 1.34 0.000018 0 2844 fstat ... It passes the test-suite for me, but this is another of one of those really core functions, and certainly pretty subtle, so.. NOTE! The Linux lstat() system call is really quite cheap when everything is cached, so the fact that this is quite noticeable on Linux is likely to mean that it is *much* more noticeable on other operating systems. I bet you'll see a much bigger performance improvement from this on Windows in particular. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* Avoid running lstat(2) on the same cache entry.Junio C Hamano2008-01-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Aside from the lstat(2) done for work tree files, there are quite many lstat(2) calls in refname dwimming codepath. This patch is not about reducing them. * It adds a new ce_flag, CE_UPTODATE, that is meant to mark the cache entries that record a regular file blob that is up to date in the work tree. If somebody later walks the index and wants to see if the work tree has changes, they do not have to be checked with lstat(2) again. * fill_stat_cache_info() marks the cache entry it just added with CE_UPTODATE. This has the effect of marking the paths we write out of the index and lstat(2) immediately as "no need to lstat -- we know it is up-to-date", from quite a lot fo callers: - git-apply --index - git-update-index - git-checkout-index - git-add (uses add_file_to_index()) - git-commit (ditto) - git-mv (ditto) * refresh_cache_ent() also marks the cache entry that are clean with CE_UPTODATE. * write_index is changed not to write CE_UPTODATE out to the index file, because CE_UPTODATE is meant to be transient only in core. For the same reason, CE_UPDATE is not written to prevent an accident from happening. Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* index: be careful when handling long namesJunio C Hamano2008-01-21
| | | | | | | | | | | | | | | | | | | | | | | We currently use lower 12-bit (masked with CE_NAMEMASK) in the ce_flags field to store the length of the name in cache_entry, without checking the length parameter given to create_ce_flags(). This can make us store incorrect length. Currently we are mostly protected by the fact that many codepaths first copy the path in a variable of size PATH_MAX, which typically is 4096 that happens to match the limit, but that feels like a bug waiting to happen. Besides, that would not allow us to shorten the width of CE_NAMEMASK to use the bits for new flags. This redefines the meaning of the name length stored in the cache_entry. A name that does not fit is represented by storing CE_NAMEMASK in the field, and the actual length needs to be computed by actually counting the bytes in the name[] field. This way, only the unusually long paths need to suffer. Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* Make on-disk index representation separate from in-core oneLinus Torvalds2008-01-21
| | | | | | | | | | | | | | | | This converts the index explicitly on read and write to its on-disk format, allowing the in-core format to contain more flags, and be simpler. In particular, the in-core format is now host-endian (as opposed to the on-disk one that is network endian in order to be able to be shared across machines) and as a result we can dispense with all the htonl/ntohl on accesses to the cache_entry fields. This will make it easier to make use of various temporary flags that do not exist in the on-disk format. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* GIT 1.5.4-rc4v1.5.4-rc4Junio C Hamano2008-01-20
| | | | Signed-off-by: Junio C Hamano <gitster@pobox.com>
* Merge git://repo.or.cz/git-guiJunio C Hamano2008-01-20
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | * 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"
| * git-gui: Makefile - Handle $DESTDIR on CygwinMark Levedahl2008-01-17
| | | | | | | | | | | | | | | | | | | | 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: Mark Levedahl <mdl123@verizon.net> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: add french glossary: glossary/fr.poChristian Couder2008-01-17
| | | | | | | | | | Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Refresh file status description after hunk applicationShawn O. Pearce2008-01-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we apply a hunk in either direction this may change the file's status. For example if a file is completely unstaged, and has at least two hunks in it and the user stages one hunk the file will change from "Modified, not staged" to "Portions staged for commit". Resetting the file path causes our trace on this variable to fire; that trace is used to update the file header in the diff viewer to the file's current status. Noticed by Johannes Sixt. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Allow 'Create New Repository' on existing directoriesShawn O. Pearce2008-01-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Often users setup a few source files and get a project rolling before they create a Git repository for it. In such cases the core Git tools allow users to initialize a new repository by simply running `git init` at the desired root level directory. We need to allow the same situation in git-gui; if the user is trying to make a new repository we should let them do that to any location they chose. If the directory already exists and already has files contained within it we still should allow the user to create a repository there. However we still need to disallow creating a repository on top of an existing repository. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Initial french translationChristian Couder2008-01-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Here are some of the choices made to translate Git Gui to french: - commit -> "commit" (noun) or "commiter" (verb) - stage (index) -> "pré-commit" (noun) or "pré-commiter" (verb) - (re)scan -> "(re)synchroniser" - reset -> "réinitialiser" - checkout -> "emprunt" (noun) or "emprunter" (verb) - revision expression -> "expression de révison" I am not completely happy with these, but it's a start... [sp: Inserted a missing LF in message on line 466] Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Improve German translation.Christian Stimming2008-01-16
| | | | | | | | | | | | | | Change translation of "clone" back to "klonen" because "kopieren" is a much broader term than this particular git action. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Updated Swedish translation after mailing list review.Peter Karlsson2008-01-16
| | | | | | | | Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Fix broken revert confirmation.Christian Stimming2008-01-16
| | | | | | | | | | | | | | | | I broke this extremely cool feature in 1ac17950, but it is rather easy to fix this. Sorry for that. Signed-off-by: Christian Stimming <stimming@tuhh.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Update German translationChristian Stimming2008-01-16
| | | | | | | | | | | | | | | | | | "revert" translated as "verwerfen". "hunk" translated as "Kontext". Several menu items reworded to be shorter. Signed-off-by: Christian Stimming <stimming@tuhh.de> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
| * git-gui: Update glossary: add term "hunk"Christian Stimming2008-01-16
| | | | | | | | Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
* | Merge git://git.kernel.org/pub/scm/gitk/gitkJunio C Hamano2008-01-20
|\ \ | | | | | | | | | | | | * git://git.kernel.org/pub/scm/gitk/gitk: [PATCH] gitk: make Ctrl "+" really increase the font size
| * | [PATCH] gitk: make Ctrl "+" really increase the font sizeJohannes Schindelin2008-01-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Only Ctrl "=" was bound to increase the font size, probably because English keyboards have the plus on the same key as the equal sign. However, not the whole world is English, and at least with some other keyboard layouts, Ctrl "+" did not work as documented. Noticed by Stephan Hennig. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Paul Mackerras <paulus@samba.org>
* | | http-push and http-fetch: handle URLs without trailing /Grégoire Barbier2008-01-20
| | | | | | | | | | | | | | | | | | | | | | | | 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: Junio C Hamano <gitster@pobox.com>
* | | http-push: clarify the reason of error from the initial PROPFIND requestJunio C Hamano2008-01-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: Junio C Hamano <gitster@pobox.com>
* | | http-push: fail when info/refs exists and is already lockedGrégoire Barbier2008-01-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: Junio C Hamano <gitster@pobox.com>
* | | http-push: fix webdav lock leak.Grégoire Barbier2008-01-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: Gr.ANigoire Barbier <gb@gbarbier.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | parse_commit_buffer: tighten checks while parsingMartin Koegler2008-01-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: Martin Koegler <mkoegler@auto.tuwien.ac.at> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Update git-completion for new 'remote rm' optionDan McGee2008-01-19
| | | | | | | | | | | | | | | Signed-off-by: Dan McGee <dpmcgee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | doc typo: s/prior committing/prior to committing/Jim Meyering2008-01-19
| | | | | | | | | | | | | | | Signed-off-by: Jim Meyering <meyering@redhat.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Include rev-list options in git-log manpage.Miklos Vajna2008-01-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace the "This manual page describes only the most frequently used options." text with the list of rev-list options in git-log manpage. (The git-diff-tree options are already included.) Move these options to a separate file and include it from both git-rev-list.txt and git-log.txt. Signed-off-by: Miklos Vajna <vmiklos@frugalware.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | http-push: disable http-push without USE_CURL_MULTIGrégoire Barbier2008-01-18
| | | | | | | | | | | | | | | | | | | | | | | | Make http-push always fail when not compiled with USE_CURL_MULTI, since otherwise it corrupts the remote repository (and then fails anyway). Signed-off-by: Grégoire Barbier <gb@gbarbier.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | send-email: add no-validate optionJeff King2008-01-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since we are now sanity-checking the contents of patches and refusing to send ones with long lines, this knob provides a way for the user to override the new behavior (if, e.g., he knows his SMTP path will handle it). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | send-email: validate patches before sending anythingJeff King2008-01-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We try to catch errors early so that we don't end up sending half of a broken patch series. Right now the only validation is checking that line-lengths are under the SMTP-mandated limit of 998. The validation parsing is very crude (it just checks each line length without understanding the mailbox format) but should work fine for this simple check. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | send-email: detect invocation errors earlierJeff King2008-01-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We never even look at the command line arguments until after we have prompted the user for some information. So running "git send-email" without arguments would prompt for "from" and "to" headers, only to then die with "No patch files specified." Instead, let's try to do as much error checking as possible before getting user input. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | fast-import: Don't use a maybe-clobbered errno valueJim Meyering2008-01-18
| | | | | | | | | | | | | | | | | | | | | | | | Without this change, each diagnostic could use an errno value clobbered by the close or unlink in rollback_lock_file. Signed-off-by: Jim Meyering <meyering@redhat.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | Move sha1_file_to_archive into libgitLars Hjemli2008-01-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the specfile (export-subst) attribute was introduced, it added a dependency from archive-{tar|zip}.c to builtin-archive.c. This broke the support for archive-operations in libgit.a since builtin-archive.o doesn't belong in libgit.a. This patch moves the functions required by libgit.a from builtin-archive.c to the new file archive.c (which becomes part of libgit.a). Signed-off-by: Lars Hjemli <hjemli@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | color unchanged lines as "plain" in "diff --color-words"Jeff King2008-01-18
| | | | | | | | | | | | | | | | | | These were mistakenly being colored in "meta" color. Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | autoconf: Add checking for unsetenv functionJakub Narebski2008-01-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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: Jakub Narebski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
* | | core-tutorial typofixThomas Zander2008-01-17
| | | | | | | | | | | | | | | Signed-off-by: Thomas Zander <zander@kde.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>