path: root/fsck-cache.c
AgeCommit message (Collapse)Author
2005-09-08Big tool rename.Junio C Hamano
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 <>
2005-08-24Replace unsetenv() and setenv() with older putenv().Jason Riedy
Solaris 8 doesn't have the newer unsetenv() and setenv() functions, so replace them with putenv(). The one use of unsetenv() in fsck-cache.c now sets GIT_ALTERNATE_OBJECT_ DIRECTORIES to the empty string. Every place that var is used, NULLs are also replaced with empty strings, so it's ok. Signed-off-by: Jason Riedy <>
2005-08-24Fix ?: statements.Jason Riedy
Omitting the first branch in ?: is a GNU extension. Cute, but not supported by other compilers. Replaced mostly by explicit tests. Calls to getenv() simply are repeated on non-GNU compilers. Signed-off-by: Jason Riedy <>
2005-08-15Alternate object pool mechanism updates.Junio C Hamano
It was a mistake to use GIT_ALTERNATE_OBJECT_DIRECTORIES environment variable to specify what alternate object pools to look for missing objects when working with an object database. It is not a property of the process running the git commands, but a property of the object database that is partial and needs other object pools to complete the set of objects it lacks. This patch allows you to have $GIT_OBJECT_DIRECTORY/info/alternates whose contents is in exactly the same format as the environment variable, to let an object database name alternate object pools it depends on. Signed-off-by: Junio C Hamano <>
2005-07-28Document --strict flag to the fsck-cache command.Junio C Hamano
Signed-off-by: Junio C Hamano <>
2005-07-28git-fsck-cache: be stricter about "tree" objectsLinus Torvalds
In particular, warn about things like zero-padding of the mode bits, which is a big no-no, since it makes otherwise identical trees have different representations (and thus different SHA1 numbers). Also make the warnings more regular. Signed-off-by: Linus Torvalds <>
2005-07-28git-fsck-cache.c: check commit objects more carefullyLinus Torvalds
We historically used to be very careful in fsck-cache, but when it was re-written to use "parse_object()" instead of parsing everything by hand, it lost a bit of the checks. This, together with the previous commit, should make it do more proper commit object syntax checks. Also add a "--strict" flag, which warns about the old-style "0664" file mode bits, which shouldn't exist in modern trees, but that happened early on in git trees and that the default git-fsck-cache thus silently accepts. Signed-off-by: Linus Torvalds <>
2005-07-10[PATCH] alternate object store and fsckv0.99Junio C Hamano
The location alt_odb[j].name[0..] is filled with ??/?{38} to form a sha1 filename to try, but I was too lazy to allocate a copy, so while fsck_object_dir() is running for the directory, the filenames ??/?{38} are filled after NUL (usually and always the location should have '/'), making them "not found". This should fix it. Signed-off-by: Linus Torvalds <>
2005-07-08git-fsck-cache: don't complain about lacking references when they are all in ↵Linus Torvalds
packs. We used to not count them at all, which then made us complain that there were no refs.
2005-07-03Make git-fsck-cache check HEAD integrityLinus Torvalds
In particular, check that it's a symlink, and points to refs/heads/. We depend on that these days not only for "git checkout", but also because fsck and others only check for references in the .git/refs/ subdirectory, not things like HEAD itself.
2005-07-03Fix up "for_each_ref()" to be more usable, and use it in git-fsck-cacheLinus Torvalds
It needed to take the GIT_DIR information into account, something that the original receive-pack usage just never cared about.
2005-07-01[PATCH] verify-pack updates.Junio C Hamano
Nico pointed out that having verify_pack.c and verify-pack.c was confusing. Rename verify_pack.c to pack-check.c as suggested, and enhances the verification done quite a bit. - Built-in sha1_file unpacking knows that a base object of a deltified object _must_ be in the same pack, and takes advantage of that fact. - Earlier verify-pack command only checked the SHA1 sum for the entire pack file and did not look into its contents. It now checks everything idx file claims to have unpacks correctly. - It now has a hook to give more detailed information for objects contained in the pack under -v flag. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
2005-06-29[PATCH] Add git-verify-pack command.Junio C Hamano
Given a list of <pack>.idx files, this command validates the index file and the corresponding .pack file for consistency. This patch also uses the same validation mechanism in fsck-cache when the --full flag is used. During normal operation, sha1_file.c verifies that a given .idx file matches the .pack file by comparing the SHA1 checksum stored in .idx file and .pack file as a minimum sanity check. We may further want to check the pack signature and version when we map the pack, but that would be a separate patch. Earlier, errors to map a pack file was not flagged fatal but led to a random fatal error later. This version explicitly die()s when such an error is detected. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
2005-06-28[PATCH] Update fsck-cache (take 2)Junio C Hamano
The fsck-cache complains if objects referred to by files in .git/refs/ or objects stored in files under .git/objects/??/ are not found as stand-alone SHA1 files (i.e. found in alternate object pools GIT_ALTERNATE_OBJECT_DIRECTORIES or packed archives stored under .git/objects/pack). Although this is a good semantics to maintain consistency of a single .git/objects directory as a self contained set of objects, it sometimes is useful to consider it is OK as long as these "outside" objects are available. This commit introduces a new flag, --standalone, to git-fsck-cache. When it is not specified, connectivity checks and .git/refs pointer checks are taught that it is OK when expected objects do not exist under .git/objects/?? hierarchy but are available from an packed archive or in an alternate object pool. Another new flag, --full, makes git-fsck-cache to check not only the current GIT_OBJECT_DIRECTORY but also objects found in alternate object pools and packed GIT archives.a Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
2005-06-27[PATCH] Remove "delta" object representation.Junio C Hamano
Packed delta files created by git-pack-objects seems to be the way to go, and existing "delta" object handling code has exposed the object representation details to too many places. Remove it while we refactor code to come up with a proper interface in sha1_file.c. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
2005-06-23Don't ignore reachability of tag objects in fsckLinus Torvalds
We used to ignore unreachable tags, which just causes problems: it makes "git prune" leave them around, but since we'll have prune everything that tag points to, the tag object really should be removed too. So remove the code that made us think tags were always reachable.
2005-06-05git-fsck-cache: complain if no default references foundLinus Torvalds
2005-05-26Make "parse_object()" also fill in commit message buffer data.Linus Torvalds
And teach fsck to free it to save memory.
2005-05-20[PATCH] delta checkNicolas Pitre
This adds knowledge of delta objects to fsck-cache and various object parsing code. A new switch to git-fsck-cache is provided to display the maximum delta depth found in a repository. Signed-off-by: Nicolas Pitre <> Signed-off-by: Linus Torvalds <>
2005-05-20fsck-cache: fix segfault on nonexistent referenced objectLinus Torvalds
Noted by Frank Sorenson and Petr Baudis, patch rewritten by me.
2005-05-19[PATCH] cleanup of in-code namesAlexey Nezhdanov
Fixes all in-code names that leaved during "big name change". Signed-off-by: Alexey Nezhdanov <> Signed-off-by: Linus Torvalds <>
2005-05-18fsck-cache: read the default reference information even whenLinus Torvalds
not doing reachability analysis. This avoids the dangling head problem, and means that just a plain "git-fsck-cache" with no parameters will DTRT.
2005-05-18fsck-cache: walk the 'refs' directory if the user doesn't give anyLinus Torvalds
explicit references for reachability analysis. We already had that as separate logic in git-prune-script, so this is not a new special case - it's an old special case moved into fsck, making normal usage be much simpler.
2005-05-07Notice tree objects with duplicate entries.Junio C Hamano
This is a follow-up fix to the earlier "Notice index that has path and path/file and refuse to write such a tree" patch. With this fix, git-fsck-cache complains if a tree object stores more than one entries with the same name. Signed-off-by: Junio C Hamano <>
2005-05-07Introduce SHA1_FILE_DIRECTORIES to support multiple object databases.Junio C Hamano
SHA1_FILE_DIRECTORIES environment variable is a colon separated paths used when looking for SHA1 files not found in the usual place for reading. Creating a new SHA1 file does not use this alternate object database location mechanism. This is useful to archive older, rarely used objects into separate directories. Signed-off-by: Junio C Hamano <>
2005-05-05Be more careful about tree entry modes.Linus Torvalds
The tree object parsing used to get the executable bit wrong, and didn't know about symlinks. Also, fsck really wants the full mode value so that it can verify the other bits for sanity, so save it all in struct tree_entry.
2005-05-05Merge Torvalds
2005-05-05Teach fsck-cache to accept non-commits for reachability analysis.Linus Torvalds
In particular, teach it about tags. Also, to make reachability actually work for tags, we need to add the ref to the tagged object.
2005-05-04Git-prune-script loses blobs referenced from an uncommitted cache.Junio C Hamano
(updated from the version posted to GIT mailing list). When a new blob is registered with update-cache, and before the cache is written as a tree and committed, git-fsck-cache will find the blob unreachable. This patch adds a new flag, "--cache" to git-fsck-cache, with which it keeps such blobs from considered "unreachable". The git-prune-script is updated to use this new flag. At the same time it adds .git/refs/*/* to the set of default locations to look for heads, which should be consistent with expectations from Cogito users. Without this fix, "diff-cache -p --cached" after git-prune-script has pruned the blob object will fail mysteriously and git-write-tree would also fail. Signed-off-by: Junio C Hamano <>
2005-05-03fsck-cache: fix SIGSEGV on bad tag objectLinus Torvalds
fsck_tag() failes to notice that the parsing of the tag may have failed in the parse_object() call on the object that it is tagging. Noticed by Junio. Signed-off-by: Junio C Hamano <> Signed-off-by: Linus Torvalds <>
2005-05-03fsck-cache: report broken links correctlyLinus Torvalds
We reported the type of te missing object incorrectly: we reported it as the type of the referrer object, not the object that was referred to.
2005-05-02Make fsck-cache do better tree checking.Linus Torvalds
We check the ordering of the entries, and we verify that none of the entries has a slash in it (this allows us to remove the hacky "has_full_path" member from the tree structure, since we now just test it by walking the tree entries instead).
2005-05-02fsck-cache: sort entries by inode numberLinus Torvalds
This improves the cold-cache behaviour on most filesystems, since it makes the fsck access patterns more regular on the disk, rather than seeking back and forth. Note the "most". Not all filesystems have any relationship between inode number and location on disk.
2005-05-01Add "get_sha1()" helper function.Linus Torvalds
This allows the programs to use various simplified versions of the SHA1 names, eg just say "HEAD" for the SHA1 pointed to by the .git/HEAD file etc. For example, this commit has been done with git-commit-tree $(git-write-tree) -p HEAD instead of the traditional "$(cat .git/HEAD)" syntax.
2005-04-30Make git-fsck-cache error printouts a bit more informative.Linus Torvalds
Show the types of objects involved in broken links, and don't bother warning about unreachable tag files (if somebody cares about tags, they'll use the --tags flag to see them).
2005-04-30Fix up d_type handling - we need to include <dirent.h> beforeLinus Torvalds
we play with the d_type compatibility macros.
2005-04-30[PATCH] git-fsck-cache: Gracefully handle non-commit IDsJonas Fonseca
Gracefully handle non-commit IDs instead of segfaulting. Signed-off-by: Jonas Fonseca <> Signed-off-by: Linus Torvalds <>
2005-04-28[PATCH] Rework fsck-cache to use parse_object()Daniel Barkalow
With support for parse_object() and tags in the core, fsck_cache can just call them, and can be simplified a bit. Signed-Off-By: Daniel Barkalow <> Signed-off-by: Linus Torvalds <>
2005-04-25fsck-cache: show root objects only with "--root"Linus Torvalds
This makes the default fsck behaviour be quiet for a repository that doesn't have any problems. Which is good.
2005-04-25fsck-cache: only show tags if asked to do so with "--tags"Linus Torvalds
Normally we don't care, we just check them for being valid tag objects.
2005-04-25Make "fsck" also show what the name of the tag object is, not justLinus Torvalds
the name of the object it tags. You need this if you actually want to build up a list of tags.
2005-04-25Add "tag" objects that can be used to sign other objects.Linus Torvalds
You use "git-mktag" to create them, and fsck-cache knows how to parse them.
2005-04-24fsck-cache: warn about missing commit datesLinus Torvalds
Now that we have hopefully converted all old archives, we can consider it an error.
2005-04-24fsck-cache: notice missing "blob" objects.Linus Torvalds
We should _not_ mark a blob object "parsed" just because we looked it up: it gets marked that way only once we've actually seen it. Otherwise we can never notice a missing blob.
2005-04-20Do SHA1 hash _before_ compression.Linus Torvalds
And add a "convert-cache" program to convert from old-style to new-style.
2005-04-19Make fsck-cache print the object type for unreachable objects.Linus Torvalds
This got lost when I updated to Daniel's new object model.
2005-04-18Merge the new object model thing from Daniel BarkalowLinus Torvalds
This was a real git merge with conflicts. I'll commit the scripts I used to do the merge next. Not pretty, but it's half-way functional.
2005-04-18[PATCH] Port fsck-cache to use parsing functionsDaniel Barkalow
This ports fsck-cache to use parsing functions. Note that performance could be improved here by only reading each object once, but this requires somewhat more complicated flow control. Signed-Off-By: Daniel Barkalow <> Signed-off-by: Linus Torvalds <>
2005-04-17Make the revision tracking track the object types too.Linus Torvalds
This allows fsck to verify not just that an object exists, but also that it has the type it was expected to have.
2005-04-17Make "revision.h" slightly better to use.Linus Torvalds
- mark_reachable() can be more generic, marking the reachable revisions with an arbitrary mask. - date parsing will parse to a date of 0 rather than ULONG_MAX for the bad old case, sorting the dates correctly.