Merge fixes up to GIT 1.2.3
authorJunio C Hamano <junkio@cox.net>
Thu, 23 Feb 2006 00:15:42 +0000 (16:15 -0800)
committerJunio C Hamano <junkio@cox.net>
Thu, 23 Feb 2006 00:15:42 +0000 (16:15 -0800)
1  2 
sha1_file.c

diff --combined sha1_file.c
@@@ -247,6 -247,7 +247,7 @@@ static void link_alt_odb_entries(const 
                for ( ; cp < ep && *cp != sep; cp++)
                        ;
                if (last != cp) {
+                       struct stat st;
                        struct alternate_object_database *alt;
                        /* 43 = 40-byte + 2 '/' + terminating NUL */
                        int pfxlen = cp - last;
                        }
                        else
                                memcpy(ent->base, last, pfxlen);
                        ent->name = ent->base + pfxlen + 1;
-                       ent->base[pfxlen] = ent->base[pfxlen + 3] = '/';
-                       ent->base[entlen-1] = 0;
+                       ent->base[pfxlen + 3] = '/';
+                       ent->base[pfxlen] = ent->base[entlen-1] = 0;
+                       /* Detect cases where alternate disappeared */
+                       if (stat(ent->base, &st) || !S_ISDIR(st.st_mode)) {
+                               error("object directory %s does not exist; "
+                                     "check .git/objects/info/alternates.",
+                                     ent->base);
+                               goto bad;
+                       }
+                       ent->base[pfxlen] = '/';
  
                        /* Prevent the common mistake of listing the same
                         * thing twice, or object directory itself.
@@@ -552,7 -563,9 +563,9 @@@ static void prepare_packed_git_one(cha
        len = strlen(path);
        dir = opendir(path);
        if (!dir) {
-               fprintf(stderr, "unable to open object pack directory: %s: %s\n", path, strerror(errno));
+               if (errno != ENOENT)
+                       error("unable to open object pack directory: %s: %s\n",
+                             path, strerror(errno));
                return;
        }
        path[len++] = '/';
@@@ -851,7 -864,7 +864,7 @@@ void packed_object_info_detail(struct p
                               char *type,
                               unsigned long *size,
                               unsigned long *store_size,
 -                             int *delta_chain_length,
 +                             unsigned int *delta_chain_length,
                               unsigned char *base_sha1)
  {
        struct packed_git *p = e->p;
        if (kind != OBJ_DELTA)
                *delta_chain_length = 0;
        else {
 -              int chain_length = 0;
 +              unsigned int chain_length = 0;
                memcpy(base_sha1, pack, 20);
                do {
                        struct pack_entry base_ent;