Commit Graph

39 Commits

Author SHA1 Message Date
Linus Torvalds
42ea9cb286 Be more careful about tree entry modes.
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-05 16:18:48 -07:00
Linus Torvalds
d0d0d0bd3c Merge http://members.cox.net/junkio/git-jc.git/ 2005-05-04 18:18:40 -07:00
Linus Torvalds
770896e548 Teach fsck-cache to accept non-commits for reachability analysis.
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-04 17:03:09 -07:00
Junio C Hamano
ae7c0c92c0 Git-prune-script loses blobs referenced from an uncommitted cache.
(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 <junkio@cox.net>
2005-05-04 01:33:33 -07:00
Linus Torvalds
92d4c85d24 fsck-cache: fix SIGSEGV on bad tag object
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 <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-03 07:57:56 -07:00
Linus Torvalds
aa03413467 fsck-cache: report broken links correctly
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-02 21:10:54 -07:00
Linus Torvalds
8500349208 Make fsck-cache do better tree checking.
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-02 16:13:18 -07:00
Linus Torvalds
7e8c174a97 fsck-cache: sort entries by inode number
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-02 09:06:33 -07:00
Linus Torvalds
3c249c9506 Add "get_sha1()" helper function.
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-05-01 16:36:56 -07:00
Linus Torvalds
3a6a23e67d Make git-fsck-cache error printouts a bit more informative.
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-30 11:22:26 -07:00
Linus Torvalds
4b18242190 Fix up d_type handling - we need to include <dirent.h> before
we play with the d_type compatibility macros.
2005-04-30 09:59:31 -07:00
Jonas Fonseca
e1a1388d85 [PATCH] git-fsck-cache: Gracefully handle non-commit IDs
Gracefully handle non-commit IDs instead of segfaulting.

Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-29 20:00:40 -07:00
Daniel Barkalow
c418eda493 [PATCH] Rework fsck-cache to use parse_object()
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 <barkalow@iabervon.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-28 07:46:33 -07:00
Linus Torvalds
ab7df1874d fsck-cache: show root objects only with "--root"
This makes the default fsck behaviour be quiet for a repository
that doesn't have any problems. Which is good.
2005-04-25 16:34:13 -07:00
Linus Torvalds
889262eacf fsck-cache: only show tags if asked to do so with "--tags"
Normally we don't care, we just check them for being valid tag
objects.
2005-04-25 16:31:13 -07:00
Linus Torvalds
56ce69f7af Make "fsck" also show what the name of the tag object is, not just
the name of the object it tags.

You need this if you actually want to build up a list of tags.
2005-04-25 15:21:49 -07:00
Linus Torvalds
ec4465adb3 Add "tag" objects that can be used to sign other objects.
You use "git-mktag" to create them, and fsck-cache knows how to parse them.
2005-04-25 12:07:44 -07:00
Linus Torvalds
e6948b6d88 fsck-cache: warn about missing commit dates
Now that we have hopefully converted all old archives, we
can consider it an error.
2005-04-24 16:20:53 -07:00
Linus Torvalds
4728b861ac fsck-cache: notice missing "blob" objects.
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-24 14:10:55 -07:00
Linus Torvalds
d98b46f8d9 Do SHA1 hash _before_ compression.
And add a "convert-cache" program to convert from old-style
to new-style.
2005-04-20 01:10:46 -07:00
Linus Torvalds
f43b8abc6f Make fsck-cache print the object type for unreachable objects.
This got lost when I updated to Daniel's new object model.
2005-04-18 17:35:31 -07:00
Linus Torvalds
b51ad43140 Merge the new object model thing from Daniel Barkalow
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 12:12:00 -07:00
Daniel Barkalow
ff5ebe39b0 [PATCH] Port fsck-cache to use parsing functions
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 <barkalow@iabervon.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-18 11:39:48 -07:00
Linus Torvalds
08ca0b04ba Make the revision tracking track the object types too.
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-17 16:19:32 -07:00
Linus Torvalds
01796b0e91 Make "revision.h" slightly better to use.
- 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.
2005-04-17 12:07:00 -07:00
Linus Torvalds
458754a9fe Use common "revision.h" header for both fsck and rev-tree.
It's really a very generic thing: the notion of one sha1 revision
referring to another one. "fsck" uses it for all nodes, and "rev-tree"
only tracks commit-node relationships, but the code was already
the same - now we just make that explicit by moving it to a common
header file.
2005-04-13 21:37:59 -07:00
Linus Torvalds
bcee6fd8e7 Make 'fsck' able to take an arbitrary number of parents on the
command line.

"arbitrary" is a bit wrong, since it is limited by the argument
size limit (128kB or so), but let's see if anybody ever cares.
Arguably you should prune your tree before you have a few thousand
dangling heads in your archive.

We can fix it by passing in a file listing if we ever care.
2005-04-13 16:42:09 -07:00
Linus Torvalds
2845dbe4a4 Make fsck reachability avoid doing unnecessary work for
parents that we reach multiple ways.

This doesn't matter right now. It _will_ matter once we have
complex revision graphs.
2005-04-13 12:35:08 -07:00
Linus Torvalds
d9839e0305 Make "fsck-cache" use the same revision tracking structure as "rev-tree".
This makes things a lot more efficient, and makes it trivial to do things
like reachability analysis.

Add command line flags to tell what the head is, and whether to warn
about unreachable objects.
2005-04-13 09:57:30 -07:00
Petr Baudis
2de381f919 [PATCH] Consolidate the error handling
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-13 02:28:48 -07:00
Linus Torvalds
91af81a98e Oops. Fix bad initialization of the "seen" array, causing us to not
properly clear the reference count at init time. It happened to work
for me by pure luck.

Until it broke, and my unreferenced commit suddenly looked referenced
again. Fixed.
2005-04-10 23:33:52 -07:00
Linus Torvalds
f1257f3a33 Oops, the actual 'printf' for missing objects was missing.
Which made fsck very quiet about objects it hadn't found. So add
it. 

We'll need to make things like these optional, because it's
perfectly ok to have partial history if you don't want it,
and don't want to go backwards. But for development, it's best
to always complain about missing sha1 object files that are
referenced from somewhere else.
2005-04-10 23:22:59 -07:00
Linus Torvalds
8ba0bbb237 Add connectivity tracking to fsck.
This shows that I've lost track of one commit already. Most likely
because I forgot to update the .dircache/HEAD file when doing a
commit, so that the next commit referenced not the top-of-tree, but
the one older commit.

Having dangling commits is fine (in fact, you should always have
at least _one_ dangling commit in the top-of-tree). But it's
good to know about them.
2005-04-10 23:13:09 -07:00
Linus Torvalds
4e6616ab77 Make fsck-cache warn about old-style tree objects that have full
pathnames in them. We're migrating away from that.

This will cause tons of warnings for the current "sparse" archive,
but hell, better now than later.
2005-04-09 15:47:03 -07:00
Linus Torvalds
f768846e34 Teach "fsck" and "read-tree" about recursive tree-nodes.
This is totally untested, since we can't actually _write_ things that
way yet, but I'll get to that next, I hope. That should fix the
huge wasted space for kernel-sized tree objects.
2005-04-09 15:36:41 -07:00
Linus Torvalds
16d4d1ba6c Make "fsck-cache" print out all the root commits it finds.
Once I do the reference tracking, I'll also make it print out all the
HEAD commits it finds, which is even more interesting.
2005-04-09 13:02:30 -07:00
Linus Torvalds
59c1e24980 Fix missing return values and some error tests for empty index files
Patches from Dave Jones and Ingo Molnar, but since I don't have any
infrastructure in place to use the old patch applicator scripts I
am trying to build up, I ended up fixing the thing by hand instead.

Credit where credit is due, though. Nice to see that people are
taking a look at the project even in this early stage.
2005-04-09 00:25:22 -07:00
Linus Torvalds
1ea34e365b Make fsck-cache start parsing the object types, and checking their
internal format.

This doesn't yet check the reachability information, but we're getting
there.. Slowly.
2005-04-08 17:11:14 -07:00
Linus Torvalds
20222118ae Add first cut at "fsck-cache" that validates the SHA1 object store.
It doesn't complain about mine. But it also doesn't yet check for
inter-object reachability etc.
2005-04-08 15:02:42 -07:00