gitignore: Ignore some more boring things.
[gitweb.git] / update-index.c
index 767fd49721b26eb6c48d8dc77e5f83d2364eae28..797245ab276543edc5d7605b57f5175278436234 100644 (file)
@@ -161,8 +161,13 @@ static struct cache_entry *refresh_entry(struct cache_entry *ce, int really)
                return ERR_PTR(-errno);
 
        changed = ce_match_stat(ce, &st, really);
-       if (!changed)
-               return NULL;
+       if (!changed) {
+               if (really && assume_unchanged &&
+                   !(ce->ce_flags & htons(CE_VALID)))
+                       ; /* mark this one VALID again */
+               else
+                       return NULL;
+       }
 
        if (ce_modified(ce, &st, really))
                return ERR_PTR(-EINVAL);
@@ -172,6 +177,15 @@ static struct cache_entry *refresh_entry(struct cache_entry *ce, int really)
        memcpy(updated, ce, size);
        fill_stat_cache_info(updated, &st);
 
+       /* In this case, if really is not set, we should leave
+        * CE_VALID bit alone.  Otherwise, paths marked with
+        * --no-assume-unchanged (i.e. things to be edited) will
+        * reacquire CE_VALID bit automatically, which is not
+        * really what we want.
+        */
+       if (!really && assume_unchanged && !(ce->ce_flags & htons(CE_VALID)))
+               updated->ce_flags &= ~htons(CE_VALID);
+
        return updated;
 }
 
@@ -563,9 +577,11 @@ int main(int argc, const char **argv)
                                break;
                        }
                        if (!strcmp(path, "--index-info")) {
+                               if (i != argc - 1)
+                                       die("--index-info must be at the end");
                                allow_add = allow_replace = allow_remove = 1;
                                read_index_info(line_termination);
-                               continue;
+                               break;
                        }
                        if (!strcmp(path, "--ignore-missing")) {
                                not_new = 1;