The second batch
[git] / entry.c
1 #include "cache.h"
2 #include "blob.h"
3 #include "object-store.h"
4 #include "dir.h"
5 #include "streaming.h"
6 #include "submodule.h"
7 #include "progress.h"
8 #include "fsmonitor.h"
9 #include "entry.h"
10 #include "parallel-checkout.h"
11
12 static void create_directories(const char *path, int path_len,
13                                const struct checkout *state)
14 {
15         char *buf = xmallocz(path_len);
16         int len = 0;
17
18         while (len < path_len) {
19                 do {
20                         buf[len] = path[len];
21                         len++;
22                 } while (len < path_len && path[len] != '/');
23                 if (len >= path_len)
24                         break;
25                 buf[len] = 0;
26
27                 /*
28                  * For 'checkout-index --prefix=<dir>', <dir> is
29                  * allowed to be a symlink to an existing directory,
30                  * and we set 'state->base_dir_len' below, such that
31                  * we test the path components of the prefix with the
32                  * stat() function instead of the lstat() function.
33                  */
34                 if (has_dirs_only_path(buf, len, state->base_dir_len))
35                         continue; /* ok, it is already a directory. */
36
37                 /*
38                  * If this mkdir() would fail, it could be that there
39                  * is already a symlink or something else exists
40                  * there, therefore we then try to unlink it and try
41                  * one more time to create the directory.
42                  */
43                 if (mkdir(buf, 0777)) {
44                         if (errno == EEXIST && state->force &&
45                             !unlink_or_warn(buf) && !mkdir(buf, 0777))
46                                 continue;
47                         die_errno("cannot create directory at '%s'", buf);
48                 }
49         }
50         free(buf);
51 }
52
53 static void remove_subtree(struct strbuf *path)
54 {
55         DIR *dir = opendir(path->buf);
56         struct dirent *de;
57         int origlen = path->len;
58
59         if (!dir)
60                 die_errno("cannot opendir '%s'", path->buf);
61         while ((de = readdir_skip_dot_and_dotdot(dir)) != NULL) {
62                 struct stat st;
63
64                 strbuf_addch(path, '/');
65                 strbuf_addstr(path, de->d_name);
66                 if (lstat(path->buf, &st))
67                         die_errno("cannot lstat '%s'", path->buf);
68                 if (S_ISDIR(st.st_mode))
69                         remove_subtree(path);
70                 else if (unlink(path->buf))
71                         die_errno("cannot unlink '%s'", path->buf);
72                 strbuf_setlen(path, origlen);
73         }
74         closedir(dir);
75         if (rmdir(path->buf))
76                 die_errno("cannot rmdir '%s'", path->buf);
77 }
78
79 static int create_file(const char *path, unsigned int mode)
80 {
81         mode = (mode & 0100) ? 0777 : 0666;
82         return open(path, O_WRONLY | O_CREAT | O_EXCL, mode);
83 }
84
85 void *read_blob_entry(const struct cache_entry *ce, unsigned long *size)
86 {
87         enum object_type type;
88         void *blob_data = read_object_file(&ce->oid, &type, size);
89
90         if (blob_data) {
91                 if (type == OBJ_BLOB)
92                         return blob_data;
93                 free(blob_data);
94         }
95         return NULL;
96 }
97
98 static int open_output_fd(char *path, const struct cache_entry *ce, int to_tempfile)
99 {
100         int symlink = (ce->ce_mode & S_IFMT) != S_IFREG;
101         if (to_tempfile) {
102                 xsnprintf(path, TEMPORARY_FILENAME_LENGTH, "%s",
103                           symlink ? ".merge_link_XXXXXX" : ".merge_file_XXXXXX");
104                 return mkstemp(path);
105         } else {
106                 return create_file(path, !symlink ? ce->ce_mode : 0666);
107         }
108 }
109
110 int fstat_checkout_output(int fd, const struct checkout *state, struct stat *st)
111 {
112         /* use fstat() only when path == ce->name */
113         if (fstat_is_reliable() &&
114             state->refresh_cache && !state->base_dir_len) {
115                 return !fstat(fd, st);
116         }
117         return 0;
118 }
119
120 static int streaming_write_entry(const struct cache_entry *ce, char *path,
121                                  struct stream_filter *filter,
122                                  const struct checkout *state, int to_tempfile,
123                                  int *fstat_done, struct stat *statbuf)
124 {
125         int result = 0;
126         int fd;
127
128         fd = open_output_fd(path, ce, to_tempfile);
129         if (fd < 0)
130                 return -1;
131
132         result |= stream_blob_to_fd(fd, &ce->oid, filter, 1);
133         *fstat_done = fstat_checkout_output(fd, state, statbuf);
134         result |= close(fd);
135
136         if (result)
137                 unlink(path);
138         return result;
139 }
140
141 void enable_delayed_checkout(struct checkout *state)
142 {
143         if (!state->delayed_checkout) {
144                 state->delayed_checkout = xmalloc(sizeof(*state->delayed_checkout));
145                 state->delayed_checkout->state = CE_CAN_DELAY;
146                 string_list_init(&state->delayed_checkout->filters, 0);
147                 string_list_init(&state->delayed_checkout->paths, 0);
148         }
149 }
150
151 static int remove_available_paths(struct string_list_item *item, void *cb_data)
152 {
153         struct string_list *available_paths = cb_data;
154         struct string_list_item *available;
155
156         available = string_list_lookup(available_paths, item->string);
157         if (available)
158                 available->util = (void *)item->string;
159         return !available;
160 }
161
162 int finish_delayed_checkout(struct checkout *state, int *nr_checkouts)
163 {
164         int errs = 0;
165         unsigned delayed_object_count;
166         off_t filtered_bytes = 0;
167         struct string_list_item *filter, *path;
168         struct progress *progress;
169         struct delayed_checkout *dco = state->delayed_checkout;
170
171         if (!state->delayed_checkout)
172                 return errs;
173
174         dco->state = CE_RETRY;
175         delayed_object_count = dco->paths.nr;
176         progress = start_delayed_progress(_("Filtering content"), delayed_object_count);
177         while (dco->filters.nr > 0) {
178                 for_each_string_list_item(filter, &dco->filters) {
179                         struct string_list available_paths = STRING_LIST_INIT_NODUP;
180                         display_progress(progress, delayed_object_count - dco->paths.nr);
181
182                         if (!async_query_available_blobs(filter->string, &available_paths)) {
183                                 /* Filter reported an error */
184                                 errs = 1;
185                                 filter->string = "";
186                                 continue;
187                         }
188                         if (available_paths.nr <= 0) {
189                                 /*
190                                  * Filter responded with no entries. That means
191                                  * the filter is done and we can remove the
192                                  * filter from the list (see
193                                  * "string_list_remove_empty_items" call below).
194                                  */
195                                 filter->string = "";
196                                 continue;
197                         }
198
199                         /*
200                          * In dco->paths we store a list of all delayed paths.
201                          * The filter just send us a list of available paths.
202                          * Remove them from the list.
203                          */
204                         filter_string_list(&dco->paths, 0,
205                                 &remove_available_paths, &available_paths);
206
207                         for_each_string_list_item(path, &available_paths) {
208                                 struct cache_entry* ce;
209
210                                 if (!path->util) {
211                                         error("external filter '%s' signaled that '%s' "
212                                               "is now available although it has not been "
213                                               "delayed earlier",
214                                               filter->string, path->string);
215                                         errs |= 1;
216
217                                         /*
218                                          * Do not ask the filter for available blobs,
219                                          * again, as the filter is likely buggy.
220                                          */
221                                         filter->string = "";
222                                         continue;
223                                 }
224                                 ce = index_file_exists(state->istate, path->string,
225                                                        strlen(path->string), 0);
226                                 if (ce) {
227                                         errs |= checkout_entry(ce, state, NULL, nr_checkouts);
228                                         filtered_bytes += ce->ce_stat_data.sd_size;
229                                         display_throughput(progress, filtered_bytes);
230                                 } else
231                                         errs = 1;
232                         }
233                 }
234                 string_list_remove_empty_items(&dco->filters, 0);
235         }
236         stop_progress(&progress);
237         string_list_clear(&dco->filters, 0);
238
239         /* At this point we should not have any delayed paths anymore. */
240         errs |= dco->paths.nr;
241         for_each_string_list_item(path, &dco->paths) {
242                 error("'%s' was not filtered properly", path->string);
243         }
244         string_list_clear(&dco->paths, 0);
245
246         free(dco);
247         state->delayed_checkout = NULL;
248
249         return errs;
250 }
251
252 void update_ce_after_write(const struct checkout *state, struct cache_entry *ce,
253                            struct stat *st)
254 {
255         if (state->refresh_cache) {
256                 assert(state->istate);
257                 fill_stat_cache_info(state->istate, ce, st);
258                 ce->ce_flags |= CE_UPDATE_IN_BASE;
259                 mark_fsmonitor_invalid(state->istate, ce);
260                 state->istate->cache_changed |= CE_ENTRY_CHANGED;
261         }
262 }
263
264 /* Note: ca is used (and required) iff the entry refers to a regular file. */
265 static int write_entry(struct cache_entry *ce, char *path, struct conv_attrs *ca,
266                        const struct checkout *state, int to_tempfile)
267 {
268         unsigned int ce_mode_s_ifmt = ce->ce_mode & S_IFMT;
269         struct delayed_checkout *dco = state->delayed_checkout;
270         int fd, ret, fstat_done = 0;
271         char *new_blob;
272         struct strbuf buf = STRBUF_INIT;
273         unsigned long size;
274         ssize_t wrote;
275         size_t newsize = 0;
276         struct stat st;
277         const struct submodule *sub;
278         struct checkout_metadata meta;
279
280         clone_checkout_metadata(&meta, &state->meta, &ce->oid);
281
282         if (ce_mode_s_ifmt == S_IFREG) {
283                 struct stream_filter *filter = get_stream_filter_ca(ca, &ce->oid);
284                 if (filter &&
285                     !streaming_write_entry(ce, path, filter,
286                                            state, to_tempfile,
287                                            &fstat_done, &st))
288                         goto finish;
289         }
290
291         switch (ce_mode_s_ifmt) {
292         case S_IFLNK:
293                 new_blob = read_blob_entry(ce, &size);
294                 if (!new_blob)
295                         return error("unable to read sha1 file of %s (%s)",
296                                      ce->name, oid_to_hex(&ce->oid));
297
298                 /*
299                  * We can't make a real symlink; write out a regular file entry
300                  * with the symlink destination as its contents.
301                  */
302                 if (!has_symlinks || to_tempfile)
303                         goto write_file_entry;
304
305                 ret = symlink(new_blob, path);
306                 free(new_blob);
307                 if (ret)
308                         return error_errno("unable to create symlink %s", path);
309                 break;
310
311         case S_IFREG:
312                 /*
313                  * We do not send the blob in case of a retry, so do not
314                  * bother reading it at all.
315                  */
316                 if (dco && dco->state == CE_RETRY) {
317                         new_blob = NULL;
318                         size = 0;
319                 } else {
320                         new_blob = read_blob_entry(ce, &size);
321                         if (!new_blob)
322                                 return error("unable to read sha1 file of %s (%s)",
323                                              ce->name, oid_to_hex(&ce->oid));
324                 }
325
326                 /*
327                  * Convert from git internal format to working tree format
328                  */
329                 if (dco && dco->state != CE_NO_DELAY) {
330                         ret = async_convert_to_working_tree_ca(ca, ce->name,
331                                                                new_blob, size,
332                                                                &buf, &meta, dco);
333                         if (ret && string_list_has_string(&dco->paths, ce->name)) {
334                                 free(new_blob);
335                                 goto delayed;
336                         }
337                 } else {
338                         ret = convert_to_working_tree_ca(ca, ce->name, new_blob,
339                                                          size, &buf, &meta);
340                 }
341
342                 if (ret) {
343                         free(new_blob);
344                         new_blob = strbuf_detach(&buf, &newsize);
345                         size = newsize;
346                 }
347                 /*
348                  * No "else" here as errors from convert are OK at this
349                  * point. If the error would have been fatal (e.g.
350                  * filter is required), then we would have died already.
351                  */
352
353         write_file_entry:
354                 fd = open_output_fd(path, ce, to_tempfile);
355                 if (fd < 0) {
356                         free(new_blob);
357                         return error_errno("unable to create file %s", path);
358                 }
359
360                 wrote = write_in_full(fd, new_blob, size);
361                 if (!to_tempfile)
362                         fstat_done = fstat_checkout_output(fd, state, &st);
363                 close(fd);
364                 free(new_blob);
365                 if (wrote < 0)
366                         return error("unable to write file %s", path);
367                 break;
368
369         case S_IFGITLINK:
370                 if (to_tempfile)
371                         return error("cannot create temporary submodule %s", ce->name);
372                 if (mkdir(path, 0777) < 0)
373                         return error("cannot create submodule directory %s", path);
374                 sub = submodule_from_ce(ce);
375                 if (sub)
376                         return submodule_move_head(ce->name,
377                                 NULL, oid_to_hex(&ce->oid),
378                                 state->force ? SUBMODULE_MOVE_HEAD_FORCE : 0);
379                 break;
380
381         default:
382                 return error("unknown file mode for %s in index", ce->name);
383         }
384
385 finish:
386         if (state->refresh_cache) {
387                 if (!fstat_done && lstat(ce->name, &st) < 0)
388                         return error_errno("unable to stat just-written file %s",
389                                            ce->name);
390                 update_ce_after_write(state, ce , &st);
391         }
392 delayed:
393         return 0;
394 }
395
396 /*
397  * This is like 'lstat()', except it refuses to follow symlinks
398  * in the path, after skipping "skiplen".
399  */
400 static int check_path(const char *path, int len, struct stat *st, int skiplen)
401 {
402         const char *slash = path + len;
403
404         while (path < slash && *slash != '/')
405                 slash--;
406         if (!has_dirs_only_path(path, slash - path, skiplen)) {
407                 errno = ENOENT;
408                 return -1;
409         }
410         return lstat(path, st);
411 }
412
413 static void mark_colliding_entries(const struct checkout *state,
414                                    struct cache_entry *ce, struct stat *st)
415 {
416         int i, trust_ino = check_stat;
417
418 #if defined(GIT_WINDOWS_NATIVE) || defined(__CYGWIN__)
419         trust_ino = 0;
420 #endif
421
422         ce->ce_flags |= CE_MATCHED;
423
424         /* TODO: audit for interaction with sparse-index. */
425         ensure_full_index(state->istate);
426         for (i = 0; i < state->istate->cache_nr; i++) {
427                 struct cache_entry *dup = state->istate->cache[i];
428
429                 if (dup == ce) {
430                         /*
431                          * Parallel checkout doesn't create the files in index
432                          * order. So the other side of the collision may appear
433                          * after the given cache_entry in the array.
434                          */
435                         if (parallel_checkout_status() == PC_RUNNING)
436                                 continue;
437                         else
438                                 break;
439                 }
440
441                 if (dup->ce_flags & (CE_MATCHED | CE_VALID | CE_SKIP_WORKTREE))
442                         continue;
443
444                 if ((trust_ino && !match_stat_data(&dup->ce_stat_data, st)) ||
445                     (!trust_ino && !fspathcmp(ce->name, dup->name))) {
446                         dup->ce_flags |= CE_MATCHED;
447                         break;
448                 }
449         }
450 }
451
452 int checkout_entry_ca(struct cache_entry *ce, struct conv_attrs *ca,
453                       const struct checkout *state, char *topath,
454                       int *nr_checkouts)
455 {
456         static struct strbuf path = STRBUF_INIT;
457         struct stat st;
458         struct conv_attrs ca_buf;
459
460         if (ce->ce_flags & CE_WT_REMOVE) {
461                 if (topath)
462                         /*
463                          * No content and thus no path to create, so we have
464                          * no pathname to return.
465                          */
466                         BUG("Can't remove entry to a path");
467                 unlink_entry(ce);
468                 return 0;
469         }
470
471         if (topath) {
472                 if (S_ISREG(ce->ce_mode) && !ca) {
473                         convert_attrs(state->istate, &ca_buf, ce->name);
474                         ca = &ca_buf;
475                 }
476                 return write_entry(ce, topath, ca, state, 1);
477         }
478
479         strbuf_reset(&path);
480         strbuf_add(&path, state->base_dir, state->base_dir_len);
481         strbuf_add(&path, ce->name, ce_namelen(ce));
482
483         if (!check_path(path.buf, path.len, &st, state->base_dir_len)) {
484                 const struct submodule *sub;
485                 unsigned changed = ie_match_stat(state->istate, ce, &st,
486                                                  CE_MATCH_IGNORE_VALID | CE_MATCH_IGNORE_SKIP_WORKTREE);
487                 /*
488                  * Needs to be checked before !changed returns early,
489                  * as the possibly empty directory was not changed
490                  */
491                 sub = submodule_from_ce(ce);
492                 if (sub) {
493                         int err;
494                         if (!is_submodule_populated_gently(ce->name, &err)) {
495                                 struct stat sb;
496                                 if (lstat(ce->name, &sb))
497                                         die(_("could not stat file '%s'"), ce->name);
498                                 if (!(st.st_mode & S_IFDIR))
499                                         unlink_or_warn(ce->name);
500
501                                 return submodule_move_head(ce->name,
502                                         NULL, oid_to_hex(&ce->oid), 0);
503                         } else
504                                 return submodule_move_head(ce->name,
505                                         "HEAD", oid_to_hex(&ce->oid),
506                                         state->force ? SUBMODULE_MOVE_HEAD_FORCE : 0);
507                 }
508
509                 if (!changed)
510                         return 0;
511                 if (!state->force) {
512                         if (!state->quiet)
513                                 fprintf(stderr,
514                                         "%s already exists, no checkout\n",
515                                         path.buf);
516                         return -1;
517                 }
518
519                 if (state->clone)
520                         mark_colliding_entries(state, ce, &st);
521
522                 /*
523                  * We unlink the old file, to get the new one with the
524                  * right permissions (including umask, which is nasty
525                  * to emulate by hand - much easier to let the system
526                  * just do the right thing)
527                  */
528                 if (S_ISDIR(st.st_mode)) {
529                         /* If it is a gitlink, leave it alone! */
530                         if (S_ISGITLINK(ce->ce_mode))
531                                 return 0;
532                         remove_subtree(&path);
533                 } else if (unlink(path.buf))
534                         return error_errno("unable to unlink old '%s'", path.buf);
535         } else if (state->not_new)
536                 return 0;
537
538         create_directories(path.buf, path.len, state);
539
540         if (nr_checkouts)
541                 (*nr_checkouts)++;
542
543         if (S_ISREG(ce->ce_mode) && !ca) {
544                 convert_attrs(state->istate, &ca_buf, ce->name);
545                 ca = &ca_buf;
546         }
547
548         if (!enqueue_checkout(ce, ca))
549                 return 0;
550
551         return write_entry(ce, path.buf, ca, state, 0);
552 }
553
554 void unlink_entry(const struct cache_entry *ce)
555 {
556         const struct submodule *sub = submodule_from_ce(ce);
557         if (sub) {
558                 /* state.force is set at the caller. */
559                 submodule_move_head(ce->name, "HEAD", NULL,
560                                     SUBMODULE_MOVE_HEAD_FORCE);
561         }
562         if (check_leading_path(ce->name, ce_namelen(ce), 1) >= 0)
563                 return;
564         if (remove_or_warn(ce->ce_mode, ce->name))
565                 return;
566         schedule_dir_for_removal(ce->name, ce_namelen(ce));
567 }