summaryrefslogtreecommitdiff
path: root/update-cache.c
AgeCommit message (Collapse)AuthorFilesLines
2005-09-07Big tool rename.Libravatar Junio C Hamano1-407/+0
As promised, this is the "big tool rename" patch. The primary differences since 0.99.6 are: (1) git-*-script are no more. The commands installed do not have any such suffix so users do not have to remember if something is implemented as a shell script or not. (2) Many command names with 'cache' in them are renamed with 'index' if that is what they mean. There are backward compatibility symblic links so that you and Porcelains can keep using the old names, but the backward compatibility support is expected to be removed in the near future. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-01[PATCH] Explain what went wrong on update-cache of new fileLibravatar Amos Waterland1-2/+6
If somebody tries to run `git update-cache foo', where foo is a new file, git dies with a rather cryptic error message: fatal: Unable to add foo to database This trivial patch makes git explain what probably went wrong. It is not a perfect diagnosis of all error paths, but for 90% of the cases it should provide the user with the clue they need. [jc: I ended up wording slightly differently, and fixed another confusing error message I noticed while reviewing the code.] Signed-off-by: Amos Waterland <apw@rossby.metr.ou.edu> Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-17[PATCH] Make git-update-cache take relative pathnamesLibravatar Linus Torvalds1-0/+2
This also makes "./filename" acceptable as a side effect, since the pathname normalization handles that too. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-07-08[PATCH] Use SHA1 for git-update-cache --refreshLibravatar Bryan Larsen1-26/+5
Change git-update-cache --refresh behaviour to use sha1's rather than comparing byte by byte. [JC demangled whitespace from the posted patch himself because he liked it so much. Also adjusted to the index_fd() interface slightly done differently from the original one.] Signed-off-by: Bryan Larsen <bryan.larsen@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-07-08[PATCH] Add --info-only option to git-update-cache.Libravatar Bryan Larsen1-3/+12
Add --info-only option to git-update-cache. [JC demangled whitespace from the posted patch himself because he liked it so much. Also adjusted to the index_fd() interface slightly done differently from the original one.] Signed-off-by: Bryan Larsen <bryan.larsen@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-07-08[PATCH] Expose object ID computation functions.Libravatar Bryan Larsen1-1/+1
This patch makes the first half of write_sha1_file() and index_fd() externally visible, to allow callers to compute the object ID without actually storing it in the object database. [JC demangled the whitespaces himself because he liked the patch so much, and reworked the interface to index_fd() slightly, taking suggestion from Linus and of his own.] Signed-off-by: Bryan Larsen <bryan.larsen@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-06-20Add "-q" flag to git-update-cacheLibravatar Linus Torvalds1-5/+11
It suppresses the "needs update" message for subsequent "--refresh" cases (but not other errors). Will be useful for "git commit". Stay tuned.
2005-06-05[PATCH] Make git-update-cache --force-remove regularLibravatar Petr Baudis1-5/+7
Make the --force-remove flag behave same as --add, --remove and --replace. This means I can do git-update-cache --force-remove -- file1.c file2.c which is probably saner and also makes it easier to use in cg-rm. Signed-off-by: Petr Baudis <pasky@ucw.cz> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-24git-update-cache: allow dot-filesLibravatar Linus Torvalds1-4/+40
We still refuse to add ".", ".." and ".git". In theory, you could track another git-repository by allowing ".git", but the potential for confusion is just too high.
2005-05-20sparse cleanupLibravatar Linus Torvalds1-1/+1
Fix various things that sparse complains about: - use NULL instead of 0 - make sure we declare everything properly, or mark it static - use proper function declarations ("fn(void)" instead of "fn()") Sparse is always right.
2005-05-19[PATCH] cleanup of in-code namesLibravatar Alexey Nezhdanov1-6/+6
Fixes all in-code names that leaved during "big name change". Signed-off-by: Alexey Nezhdanov <snake@penza-gsm.ru> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-19[PATCH] Implement git-checkout-cache -u to update stat information in the cache.Libravatar Junio C Hamano1-44/+4
With -u flag, git-checkout-cache picks up the stat information from newly created file and updates the cache. This removes the need to run git-update-cache --refresh immediately after running git-checkout-cache. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-15Rename cache_match_stat() to ce_match_stat()Libravatar Brad Roberts1-1/+1
Signed-off-by: Brad Roberts <braddr@puremagic.com> Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-05-11Stick a comment to update-cache.c:refresh_cache() that you can'tLibravatar Petr Baudis1-0/+3
just free(archive_cache[i]) when replacing it there.
2005-05-11[patch] git: fix overflow in update-cache.cLibravatar Ingo Molnar1-1/+1
this patch fixes a 1-byte overflow in update-cache.c (probably not exploitable). A specially crafted db object might trigger this overflow. the bug is that normally the 'type' field is parsed by read_sha1_file(), via: if (sscanf(buffer, "%10s %lu", type, size) != 2) i.e. 0-10 long strings, which take 1-11 bytes of space. Normally the type strings are stored in char [20] arrays, but in update-cache.c that is char [10], so a 1 byte overflow might occur. This should not happen with a 'friendly' DB, as the longest type string ("commit") is 7 bytes long. The fix is to use the customary char [20]. (someone might want to clean those open-coded constants up with a TYPE_LEN define, they do tend to cause problems like this. I'm not against open-coded constants (they make code much more readable), but for fields that get filled in from possibly hostile objects this is playing with fire.) hey, this might be the first true security fix for GIT? ;-) Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-05-11Make update-cache be explicit about failed open() when doingLibravatar Petr Baudis1-1/+1
add_file_to_cache().
2005-05-08Fix git-update-cache --cacheinfo error message.Libravatar Junio C Hamano1-1/+3
The error detection logic was too lazy to distinguish parameter error and unable-to-add case. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-08Allow removal of "path" when "path/file" exists.Libravatar Junio C Hamano1-3/+12
When we used to have "path" as a file or a symlink, but now we have "path/file" (or in general, have "path" as a directory), we would want to remove "path" before adding "path/file". The logic in add_file_to_cache() only runs lstat() and does not detect this case and fails to allow removing it in this case. In the opposite case of having "path/file" in the index and having "path" on the filesystem as a file or a symlink we do allow removal of "path/file", so to be symmetric we should allow it as well, without forcing the user to say --force-remove. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-07Add git-update-cache --replace option.Libravatar Junio C Hamano1-5/+13
When "path" exists as a file or a symlink in the index, an attempt to add "path/file" is refused because it results in file vs directory conflict. Similarly when "path/file1", "path/file2", etc. exist, an attempt to add "path" as a file or a symlink is refused. With git-update-cache --replace, these existing entries that conflict with the entry being added are automatically removed from the cache, with warning messages. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-06Revert bogus optimization that avoids index file writesLibravatar Linus Torvalds1-40/+3
It didn't properly mark all cache updates as being dirty, and causes merge errors due to that. In particular, it didn't notice when a file was force-removed. Besides, it was ugly as hell. I've put in place a slightly cleaner version, but I've not enabled the optimization because I don't want to be burned again.
2005-05-06update-cache: remove compiler warningLibravatar Linus Torvalds1-1/+0
"Unused variable len"
2005-05-06[PATCH] fix compare symlink against readlink not dataLibravatar Kay Sievers1-5/+45
Fix update-cache to compare the blob of a symlink against the link-target and not the file it points to. Also ignore all permissions applied to links. Thanks to Greg for recognizing this while he added our list of symlinks back to the udev repository. Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-05Do not write out new index if nothing has changed.Libravatar Junio C Hamano1-3/+41
The git-update-cache command, especially with --refresh, may not change anything. In such a case, writing 1.6MB of the same thing is a waste. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-05[PATCH] git and symlinks as tracked contentLibravatar Kay Sievers1-12/+23
Allow to store and track symlink in the repository. A symlink is stored the same way as a regular file, only with the appropriate mode bits set. The symlink target is therefore stored in a blob object. This will hopefully make our udev repository fully functional. :) Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-01Implement git-update-cache --force-remove <path>Libravatar Junio C Hamano1-0/+9
This new flag tells git-update-cache to remove the named path even when the work tree still happens to have the file. It is used to update git-merge-one-file-script not to smudge the work tree. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-01Add git-write-blob.Libravatar Junio C Hamano1-51/+0
A new command, git-write-blob, is introduced. This registers the contents of any file on the filesystem as a blob in the object database and reports its SHA1 to the standard output. To implement it, the patch promotes index_fd() from a static function in update-cache.c to extern and moves it to a library source, sha1_file.c. This command is used to update git-merge-one-file-script so that it does not smudge the work tree. Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-01[PATCH] Make git-update-cache --refresh fail if update/merge needed.Libravatar Junio C Hamano1-5/+10
Scripts may find it useful if they do not have to parse the output from the command but just can rely on its exit status. Earlier both Linus and myself thought this would be necessary to make git-prune-script safer but it turns out that the issue was somewhere else and not related to what this patch addresses. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-01[PATCH] Allow removing files in a subdirectory.Libravatar Junio C Hamano1-1/+1
I found this during a conflict merge testing. The original did not have either DF (a file) or DF/DF (a file DF/DF under a directory DF). One side created DF, the other created DF/DF. I first resolved DF as a new file by taking what the first side did. After that, the entry DF/DF cannot be resolved by running git-update-cache --remove although it does not exist on the filesystem. $ /bin/ls -F AN DF MN NM NN SS Z/ $ git-ls-files --stage | grep DF 100644 71420ab81e254145d26d6fc0cddee64c1acd4787 0 DF 100644 68a6d8b91da11045cf4aa3a5ab9f2a781c701249 2 DF/DF $ git-update-cache --remove DF/DF fatal: Unable to add DF/DF to database It turns out that the errno from open() in this case was not ENOENT but ENOTDIR, which the code did not check. Here is a fix. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-26[PATCH] introduce xmalloc and xreallocLibravatar Christopher Li1-5/+5
Introduce xmalloc and xrealloc to die gracefully with a descriptive message when out of memory, rather than taking a SIGSEGV. Signed-off-by: Christopher Li<chrislgit@chrisli.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-26update-cache: remove index lock file on SIGINTLibravatar Linus Torvalds1-0/+7
This makes it a lot more pleasant to use when you interrupt a long-running operation.
2005-04-24[PATCH] update-cache: add "--ignore-missing" optionLibravatar James Bottomley1-6/+27
This adds an --ignore-missing option to update-cache, which makes it ignore missing files. Together with the "-n" option to checkout-cache, it allows me to do checkout-cache -n -f -a && update-cache --ignore-missing --refresh which only updates and refreshes the files I already have checked out. Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-21Add support for a "GIT_INDEX_FILE" environment variable.Libravatar Linus Torvalds1-8/+11
We use that to specify alternative index files, which can be useful if you want to (for example) generate a temporary index file to do some specific operation that you don't want to mess with your main one with. It defaults to the regular ".git/index" if it hasn't been specified.
2005-04-20The recent hash/compression switch-over missed the blob creation.Libravatar Linus Torvalds1-5/+9
Happily, convert-cache just magically fixes all errors.
2005-04-18[PATCH] Fix confusing behaviour of update-cache --refresh on unmerged paths.Libravatar Junio C Hamano1-2/+11
The "update-cache --refresh" command attempts refresh_entry() on unmerged path, which results in as many "needs update" messages as there are unmerged stages for that path. This does not do any harm to the working directory, but it is confusing. Here is a fix. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-17[PATCH] Remove unused arguments from index_fd()Libravatar Junio C Hamano1-9/+6
The function index_fd() in update-cache.c takes 5 arguments, but two is not necessary and one that is a pointer to a structure really needs to be a pointer to one member of that structure. This patch cleans it up. Also it removes printf() apparently left after initial debugging. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16Be much more liberal about the file mode bits.Libravatar Linus Torvalds1-2/+2
We only really care about the difference between a file being executable or not (by its owner). Everything else we leave for the user umask to decide.
2005-04-15Encode a few extra flags per index entry.Libravatar Linus Torvalds1-2/+2
This will allow us to have the same name in different "states" in the index at the same time. Which in turn seems to be a very simple way to merge.
2005-04-15Add "--cacheinfo" option to update-cache.Libravatar Linus Torvalds1-0/+35
This allows scripts to manually add entries to the cache explicitly. Need to do some way to remove them too, even if the path exists.
2005-04-15Convert the index file reading/writing to use network byte order.Libravatar Linus Torvalds1-14/+11
This allows using a git tree over NFS with different byte order, and makes it possible to just copy a fully populated repository and have the end result immediately usable (needing just a refresh to update the stat information).
2005-04-13[PATCH] nsec portabilityLibravatar Petr Baudis1-0/+4
It seems like the nsec portability is limited; in particular, older glibcs (<=2.2.4 at least) don't seem to like it. So access the nsec fields in struct stat only when -DNSEC. Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13[PATCH] Whitespace FixesLibravatar Ingo Molnar1-1/+1
Trivial whitespace fixes. From: Ingo Molnar <mingo@elte.hu> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13[PATCH] Consolidate the error handlingLibravatar Petr Baudis1-5/+5
Now there is error() for "library" errors and die() for fatal "application" errors. usage() is now used strictly only for usage errors. Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-11Allow zero-sized files to be checked in.Libravatar Linus Torvalds1-4/+8
The kernel may not want it, but others probably do. Noted (again) by Junio Hamano.
2005-04-11Rename ".dircache" directory to ".git"Libravatar Linus Torvalds1-4/+4
I started out calling the tool "dircache". That's clearly moronic.
2005-04-11Fix stale index.lock file removal using "atexit()".Libravatar Linus Torvalds1-17/+24
Problem noted by Randy Dunlap.
2005-04-11Fix "update-cache" not fixing up the size field as appropriate.Libravatar Linus Torvalds1-5/+6
The size field isn't in the tree information, so we need to update it if the sha1 matches.
2005-04-11Make "update-cache --refresh" do what it really should do: justLibravatar Linus Torvalds1-19/+99
refresh the "stat" information. We need this after having done a "read-tree", for example, when the stat information does not match the checked-out tree, and we want to start getting efficient cache matching against the parts of the tree that are already up-to-date.
2005-04-10Make "update-cache" a bit friendlier to use (and harder to mis-use).Libravatar Linus Torvalds1-3/+57
It now requires the "--add" flag before you add any new files, and a "--remove" file if you want to mark files for removal. And giving it the "--refresh" flag makes it just update all the files that it already knows about.
2005-04-09Make "write_cache()" and friends available as generic routines.Libravatar Linus Torvalds1-69/+0
This is needed for the change to make "read-tree" just read into the cache (and then you do a "checkout-cache" to update your current dir contents).
2005-04-09Make "cache_name_pos()" available to others.Libravatar Linus Torvalds1-36/+0
It finds the cache entry position for a given name, and is generally useful. Sure, everybody can just scan the active cache array, but since it's sorted, you actually want to search it with a binary search, so let's not duplicate that logic all over the place.