Add core.mode configuration
[git] / submodule.c
1 #include "cache.h"
2 #include "submodule-config.h"
3 #include "submodule.h"
4 #include "dir.h"
5 #include "diff.h"
6 #include "commit.h"
7 #include "revision.h"
8 #include "run-command.h"
9 #include "diffcore.h"
10 #include "refs.h"
11 #include "string-list.h"
12 #include "sha1-array.h"
13 #include "argv-array.h"
14 #include "blob.h"
15 #include "thread-utils.h"
16
17 static int config_fetch_recurse_submodules = RECURSE_SUBMODULES_ON_DEMAND;
18 static struct string_list changed_submodule_paths;
19 static int initialized_fetch_ref_tips;
20 static struct sha1_array ref_tips_before_fetch;
21 static struct sha1_array ref_tips_after_fetch;
22
23 /*
24  * The following flag is set if the .gitmodules file is unmerged. We then
25  * disable recursion for all submodules where .git/config doesn't have a
26  * matching config entry because we can't guess what might be configured in
27  * .gitmodules unless the user resolves the conflict. When a command line
28  * option is given (which always overrides configuration) this flag will be
29  * ignored.
30  */
31 static int gitmodules_is_unmerged;
32
33 /*
34  * This flag is set if the .gitmodules file had unstaged modifications on
35  * startup. This must be checked before allowing modifications to the
36  * .gitmodules file with the intention to stage them later, because when
37  * continuing we would stage the modifications the user didn't stage herself
38  * too. That might change in a future version when we learn to stage the
39  * changes we do ourselves without staging any previous modifications.
40  */
41 static int gitmodules_is_modified;
42
43 int is_staging_gitmodules_ok(void)
44 {
45         return !gitmodules_is_modified;
46 }
47
48 /*
49  * Try to update the "path" entry in the "submodule.<name>" section of the
50  * .gitmodules file. Return 0 only if a .gitmodules file was found, a section
51  * with the correct path=<oldpath> setting was found and we could update it.
52  */
53 int update_path_in_gitmodules(const char *oldpath, const char *newpath)
54 {
55         struct strbuf entry = STRBUF_INIT;
56         const struct submodule *submodule;
57
58         if (!file_exists(".gitmodules")) /* Do nothing without .gitmodules */
59                 return -1;
60
61         if (gitmodules_is_unmerged)
62                 die(_("Cannot change unmerged .gitmodules, resolve merge conflicts first"));
63
64         submodule = submodule_from_path(null_sha1, oldpath);
65         if (!submodule || !submodule->name) {
66                 warning(_("Could not find section in .gitmodules where path=%s"), oldpath);
67                 return -1;
68         }
69         strbuf_addstr(&entry, "submodule.");
70         strbuf_addstr(&entry, submodule->name);
71         strbuf_addstr(&entry, ".path");
72         if (git_config_set_in_file_gently(".gitmodules", entry.buf, newpath) < 0) {
73                 /* Maybe the user already did that, don't error out here */
74                 warning(_("Could not update .gitmodules entry %s"), entry.buf);
75                 strbuf_release(&entry);
76                 return -1;
77         }
78         strbuf_release(&entry);
79         return 0;
80 }
81
82 /*
83  * Try to remove the "submodule.<name>" section from .gitmodules where the given
84  * path is configured. Return 0 only if a .gitmodules file was found, a section
85  * with the correct path=<path> setting was found and we could remove it.
86  */
87 int remove_path_from_gitmodules(const char *path)
88 {
89         struct strbuf sect = STRBUF_INIT;
90         const struct submodule *submodule;
91
92         if (!file_exists(".gitmodules")) /* Do nothing without .gitmodules */
93                 return -1;
94
95         if (gitmodules_is_unmerged)
96                 die(_("Cannot change unmerged .gitmodules, resolve merge conflicts first"));
97
98         submodule = submodule_from_path(null_sha1, path);
99         if (!submodule || !submodule->name) {
100                 warning(_("Could not find section in .gitmodules where path=%s"), path);
101                 return -1;
102         }
103         strbuf_addstr(&sect, "submodule.");
104         strbuf_addstr(&sect, submodule->name);
105         if (git_config_rename_section_in_file(".gitmodules", sect.buf, NULL) < 0) {
106                 /* Maybe the user already did that, don't error out here */
107                 warning(_("Could not remove .gitmodules entry for %s"), path);
108                 strbuf_release(&sect);
109                 return -1;
110         }
111         strbuf_release(&sect);
112         return 0;
113 }
114
115 void stage_updated_gitmodules(void)
116 {
117         if (add_file_to_cache(".gitmodules", 0))
118                 die(_("staging updated .gitmodules failed"));
119 }
120
121 static int add_submodule_odb(const char *path)
122 {
123         struct strbuf objects_directory = STRBUF_INIT;
124         struct alternate_object_database *alt_odb;
125         int ret = 0;
126         size_t alloc;
127
128         strbuf_git_path_submodule(&objects_directory, path, "objects/");
129         if (!is_directory(objects_directory.buf)) {
130                 ret = -1;
131                 goto done;
132         }
133         /* avoid adding it twice */
134         prepare_alt_odb();
135         for (alt_odb = alt_odb_list; alt_odb; alt_odb = alt_odb->next)
136                 if (alt_odb->name - alt_odb->base == objects_directory.len &&
137                                 !strncmp(alt_odb->base, objects_directory.buf,
138                                         objects_directory.len))
139                         goto done;
140
141         alloc = st_add(objects_directory.len, 42); /* for "12/345..." sha1 */
142         alt_odb = xmalloc(st_add(sizeof(*alt_odb), alloc));
143         alt_odb->next = alt_odb_list;
144         xsnprintf(alt_odb->base, alloc, "%s", objects_directory.buf);
145         alt_odb->name = alt_odb->base + objects_directory.len;
146         alt_odb->name[2] = '/';
147         alt_odb->name[40] = '\0';
148         alt_odb->name[41] = '\0';
149         alt_odb_list = alt_odb;
150
151         /* add possible alternates from the submodule */
152         read_info_alternates(objects_directory.buf, 0);
153 done:
154         strbuf_release(&objects_directory);
155         return ret;
156 }
157
158 void set_diffopt_flags_from_submodule_config(struct diff_options *diffopt,
159                                              const char *path)
160 {
161         const struct submodule *submodule = submodule_from_path(null_sha1, path);
162         if (submodule) {
163                 if (submodule->ignore)
164                         handle_ignore_submodules_arg(diffopt, submodule->ignore);
165                 else if (gitmodules_is_unmerged)
166                         DIFF_OPT_SET(diffopt, IGNORE_SUBMODULES);
167         }
168 }
169
170 int submodule_config(const char *var, const char *value, void *cb)
171 {
172         if (starts_with(var, "submodule."))
173                 return parse_submodule_config_option(var, value);
174         else if (!strcmp(var, "fetch.recursesubmodules")) {
175                 config_fetch_recurse_submodules = parse_fetch_recurse_submodules_arg(var, value);
176                 return 0;
177         }
178         return 0;
179 }
180
181 void gitmodules_config(void)
182 {
183         const char *work_tree = get_git_work_tree();
184         if (work_tree) {
185                 struct strbuf gitmodules_path = STRBUF_INIT;
186                 int pos;
187                 strbuf_addstr(&gitmodules_path, work_tree);
188                 strbuf_addstr(&gitmodules_path, "/.gitmodules");
189                 if (read_cache() < 0)
190                         die("index file corrupt");
191                 pos = cache_name_pos(".gitmodules", 11);
192                 if (pos < 0) { /* .gitmodules not found or isn't merged */
193                         pos = -1 - pos;
194                         if (active_nr > pos) {  /* there is a .gitmodules */
195                                 const struct cache_entry *ce = active_cache[pos];
196                                 if (ce_namelen(ce) == 11 &&
197                                     !memcmp(ce->name, ".gitmodules", 11))
198                                         gitmodules_is_unmerged = 1;
199                         }
200                 } else if (pos < active_nr) {
201                         struct stat st;
202                         if (lstat(".gitmodules", &st) == 0 &&
203                             ce_match_stat(active_cache[pos], &st, 0) & DATA_CHANGED)
204                                 gitmodules_is_modified = 1;
205                 }
206
207                 if (!gitmodules_is_unmerged)
208                         git_config_from_file(submodule_config, gitmodules_path.buf, NULL);
209                 strbuf_release(&gitmodules_path);
210         }
211 }
212
213 void handle_ignore_submodules_arg(struct diff_options *diffopt,
214                                   const char *arg)
215 {
216         DIFF_OPT_CLR(diffopt, IGNORE_SUBMODULES);
217         DIFF_OPT_CLR(diffopt, IGNORE_UNTRACKED_IN_SUBMODULES);
218         DIFF_OPT_CLR(diffopt, IGNORE_DIRTY_SUBMODULES);
219
220         if (!strcmp(arg, "all"))
221                 DIFF_OPT_SET(diffopt, IGNORE_SUBMODULES);
222         else if (!strcmp(arg, "untracked"))
223                 DIFF_OPT_SET(diffopt, IGNORE_UNTRACKED_IN_SUBMODULES);
224         else if (!strcmp(arg, "dirty"))
225                 DIFF_OPT_SET(diffopt, IGNORE_DIRTY_SUBMODULES);
226         else if (strcmp(arg, "none"))
227                 die("bad --ignore-submodules argument: %s", arg);
228 }
229
230 static int prepare_submodule_summary(struct rev_info *rev, const char *path,
231                 struct commit *left, struct commit *right,
232                 int *fast_forward, int *fast_backward)
233 {
234         struct commit_list *merge_bases, *list;
235
236         init_revisions(rev, NULL);
237         setup_revisions(0, NULL, rev, NULL);
238         rev->left_right = 1;
239         rev->first_parent_only = 1;
240         left->object.flags |= SYMMETRIC_LEFT;
241         add_pending_object(rev, &left->object, path);
242         add_pending_object(rev, &right->object, path);
243         merge_bases = get_merge_bases(left, right);
244         if (merge_bases) {
245                 if (merge_bases->item == left)
246                         *fast_forward = 1;
247                 else if (merge_bases->item == right)
248                         *fast_backward = 1;
249         }
250         for (list = merge_bases; list; list = list->next) {
251                 list->item->object.flags |= UNINTERESTING;
252                 add_pending_object(rev, &list->item->object,
253                         oid_to_hex(&list->item->object.oid));
254         }
255         return prepare_revision_walk(rev);
256 }
257
258 static void print_submodule_summary(struct rev_info *rev, FILE *f,
259                 const char *line_prefix,
260                 const char *del, const char *add, const char *reset)
261 {
262         static const char format[] = "  %m %s";
263         struct strbuf sb = STRBUF_INIT;
264         struct commit *commit;
265
266         while ((commit = get_revision(rev))) {
267                 struct pretty_print_context ctx = {0};
268                 ctx.date_mode = rev->date_mode;
269                 ctx.output_encoding = get_log_output_encoding();
270                 strbuf_setlen(&sb, 0);
271                 strbuf_addstr(&sb, line_prefix);
272                 if (commit->object.flags & SYMMETRIC_LEFT) {
273                         if (del)
274                                 strbuf_addstr(&sb, del);
275                 }
276                 else if (add)
277                         strbuf_addstr(&sb, add);
278                 format_commit_message(commit, format, &sb, &ctx);
279                 if (reset)
280                         strbuf_addstr(&sb, reset);
281                 strbuf_addch(&sb, '\n');
282                 fprintf(f, "%s", sb.buf);
283         }
284         strbuf_release(&sb);
285 }
286
287 void show_submodule_summary(FILE *f, const char *path,
288                 const char *line_prefix,
289                 unsigned char one[20], unsigned char two[20],
290                 unsigned dirty_submodule, const char *meta,
291                 const char *del, const char *add, const char *reset)
292 {
293         struct rev_info rev;
294         struct commit *left = NULL, *right = NULL;
295         const char *message = NULL;
296         struct strbuf sb = STRBUF_INIT;
297         int fast_forward = 0, fast_backward = 0;
298
299         if (is_null_sha1(two))
300                 message = "(submodule deleted)";
301         else if (add_submodule_odb(path))
302                 message = "(not checked out)";
303         else if (is_null_sha1(one))
304                 message = "(new submodule)";
305         else if (!(left = lookup_commit_reference(one)) ||
306                  !(right = lookup_commit_reference(two)))
307                 message = "(commits not present)";
308         else if (prepare_submodule_summary(&rev, path, left, right,
309                                            &fast_forward, &fast_backward))
310                 message = "(revision walker failed)";
311
312         if (dirty_submodule & DIRTY_SUBMODULE_UNTRACKED)
313                 fprintf(f, "%sSubmodule %s contains untracked content\n",
314                         line_prefix, path);
315         if (dirty_submodule & DIRTY_SUBMODULE_MODIFIED)
316                 fprintf(f, "%sSubmodule %s contains modified content\n",
317                         line_prefix, path);
318
319         if (!hashcmp(one, two)) {
320                 strbuf_release(&sb);
321                 return;
322         }
323
324         strbuf_addf(&sb, "%s%sSubmodule %s %s..", line_prefix, meta, path,
325                         find_unique_abbrev(one, DEFAULT_ABBREV));
326         if (!fast_backward && !fast_forward)
327                 strbuf_addch(&sb, '.');
328         strbuf_addf(&sb, "%s", find_unique_abbrev(two, DEFAULT_ABBREV));
329         if (message)
330                 strbuf_addf(&sb, " %s%s\n", message, reset);
331         else
332                 strbuf_addf(&sb, "%s:%s\n", fast_backward ? " (rewind)" : "", reset);
333         fwrite(sb.buf, sb.len, 1, f);
334
335         if (!message) /* only NULL if we succeeded in setting up the walk */
336                 print_submodule_summary(&rev, f, line_prefix, del, add, reset);
337         if (left)
338                 clear_commit_marks(left, ~0);
339         if (right)
340                 clear_commit_marks(right, ~0);
341
342         strbuf_release(&sb);
343 }
344
345 void set_config_fetch_recurse_submodules(int value)
346 {
347         config_fetch_recurse_submodules = value;
348 }
349
350 static int has_remote(const char *refname, const struct object_id *oid,
351                       int flags, void *cb_data)
352 {
353         return 1;
354 }
355
356 static int submodule_needs_pushing(const char *path, const unsigned char sha1[20])
357 {
358         if (add_submodule_odb(path) || !lookup_commit_reference(sha1))
359                 return 0;
360
361         if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
362                 struct child_process cp = CHILD_PROCESS_INIT;
363                 const char *argv[] = {"rev-list", NULL, "--not", "--remotes", "-n", "1" , NULL};
364                 struct strbuf buf = STRBUF_INIT;
365                 int needs_pushing = 0;
366
367                 argv[1] = sha1_to_hex(sha1);
368                 cp.argv = argv;
369                 cp.env = local_repo_env;
370                 cp.git_cmd = 1;
371                 cp.no_stdin = 1;
372                 cp.out = -1;
373                 cp.dir = path;
374                 if (start_command(&cp))
375                         die("Could not run 'git rev-list %s --not --remotes -n 1' command in submodule %s",
376                                 sha1_to_hex(sha1), path);
377                 if (strbuf_read(&buf, cp.out, 41))
378                         needs_pushing = 1;
379                 finish_command(&cp);
380                 close(cp.out);
381                 strbuf_release(&buf);
382                 return needs_pushing;
383         }
384
385         return 0;
386 }
387
388 static void collect_submodules_from_diff(struct diff_queue_struct *q,
389                                          struct diff_options *options,
390                                          void *data)
391 {
392         int i;
393         struct string_list *needs_pushing = data;
394
395         for (i = 0; i < q->nr; i++) {
396                 struct diff_filepair *p = q->queue[i];
397                 if (!S_ISGITLINK(p->two->mode))
398                         continue;
399                 if (submodule_needs_pushing(p->two->path, p->two->sha1))
400                         string_list_insert(needs_pushing, p->two->path);
401         }
402 }
403
404 static void find_unpushed_submodule_commits(struct commit *commit,
405                 struct string_list *needs_pushing)
406 {
407         struct rev_info rev;
408
409         init_revisions(&rev, NULL);
410         rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK;
411         rev.diffopt.format_callback = collect_submodules_from_diff;
412         rev.diffopt.format_callback_data = needs_pushing;
413         diff_tree_combined_merge(commit, 1, &rev);
414 }
415
416 int find_unpushed_submodules(unsigned char new_sha1[20],
417                 const char *remotes_name, struct string_list *needs_pushing)
418 {
419         struct rev_info rev;
420         struct commit *commit;
421         const char *argv[] = {NULL, NULL, "--not", "NULL", NULL};
422         int argc = ARRAY_SIZE(argv) - 1;
423         char *sha1_copy;
424
425         struct strbuf remotes_arg = STRBUF_INIT;
426
427         strbuf_addf(&remotes_arg, "--remotes=%s", remotes_name);
428         init_revisions(&rev, NULL);
429         sha1_copy = xstrdup(sha1_to_hex(new_sha1));
430         argv[1] = sha1_copy;
431         argv[3] = remotes_arg.buf;
432         setup_revisions(argc, argv, &rev, NULL);
433         if (prepare_revision_walk(&rev))
434                 die("revision walk setup failed");
435
436         while ((commit = get_revision(&rev)) != NULL)
437                 find_unpushed_submodule_commits(commit, needs_pushing);
438
439         reset_revision_walk();
440         free(sha1_copy);
441         strbuf_release(&remotes_arg);
442
443         return needs_pushing->nr;
444 }
445
446 static int push_submodule(const char *path)
447 {
448         if (add_submodule_odb(path))
449                 return 1;
450
451         if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) {
452                 struct child_process cp = CHILD_PROCESS_INIT;
453                 const char *argv[] = {"push", NULL};
454
455                 cp.argv = argv;
456                 cp.env = local_repo_env;
457                 cp.git_cmd = 1;
458                 cp.no_stdin = 1;
459                 cp.dir = path;
460                 if (run_command(&cp))
461                         return 0;
462                 close(cp.out);
463         }
464
465         return 1;
466 }
467
468 int push_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name)
469 {
470         int i, ret = 1;
471         struct string_list needs_pushing = STRING_LIST_INIT_DUP;
472
473         if (!find_unpushed_submodules(new_sha1, remotes_name, &needs_pushing))
474                 return 1;
475
476         for (i = 0; i < needs_pushing.nr; i++) {
477                 const char *path = needs_pushing.items[i].string;
478                 fprintf(stderr, "Pushing submodule '%s'\n", path);
479                 if (!push_submodule(path)) {
480                         fprintf(stderr, "Unable to push submodule '%s'\n", path);
481                         ret = 0;
482                 }
483         }
484
485         string_list_clear(&needs_pushing, 0);
486
487         return ret;
488 }
489
490 static int is_submodule_commit_present(const char *path, unsigned char sha1[20])
491 {
492         int is_present = 0;
493         if (!add_submodule_odb(path) && lookup_commit_reference(sha1)) {
494                 /* Even if the submodule is checked out and the commit is
495                  * present, make sure it is reachable from a ref. */
496                 struct child_process cp = CHILD_PROCESS_INIT;
497                 const char *argv[] = {"rev-list", "-n", "1", NULL, "--not", "--all", NULL};
498                 struct strbuf buf = STRBUF_INIT;
499
500                 argv[3] = sha1_to_hex(sha1);
501                 cp.argv = argv;
502                 cp.env = local_repo_env;
503                 cp.git_cmd = 1;
504                 cp.no_stdin = 1;
505                 cp.dir = path;
506                 if (!capture_command(&cp, &buf, 1024) && !buf.len)
507                         is_present = 1;
508
509                 strbuf_release(&buf);
510         }
511         return is_present;
512 }
513
514 static void submodule_collect_changed_cb(struct diff_queue_struct *q,
515                                          struct diff_options *options,
516                                          void *data)
517 {
518         int i;
519         for (i = 0; i < q->nr; i++) {
520                 struct diff_filepair *p = q->queue[i];
521                 if (!S_ISGITLINK(p->two->mode))
522                         continue;
523
524                 if (S_ISGITLINK(p->one->mode)) {
525                         /* NEEDSWORK: We should honor the name configured in
526                          * the .gitmodules file of the commit we are examining
527                          * here to be able to correctly follow submodules
528                          * being moved around. */
529                         struct string_list_item *path;
530                         path = unsorted_string_list_lookup(&changed_submodule_paths, p->two->path);
531                         if (!path && !is_submodule_commit_present(p->two->path, p->two->sha1))
532                                 string_list_append(&changed_submodule_paths, xstrdup(p->two->path));
533                 } else {
534                         /* Submodule is new or was moved here */
535                         /* NEEDSWORK: When the .git directories of submodules
536                          * live inside the superprojects .git directory some
537                          * day we should fetch new submodules directly into
538                          * that location too when config or options request
539                          * that so they can be checked out from there. */
540                         continue;
541                 }
542         }
543 }
544
545 static int add_sha1_to_array(const char *ref, const struct object_id *oid,
546                              int flags, void *data)
547 {
548         sha1_array_append(data, oid->hash);
549         return 0;
550 }
551
552 void check_for_new_submodule_commits(unsigned char new_sha1[20])
553 {
554         if (!initialized_fetch_ref_tips) {
555                 for_each_ref(add_sha1_to_array, &ref_tips_before_fetch);
556                 initialized_fetch_ref_tips = 1;
557         }
558
559         sha1_array_append(&ref_tips_after_fetch, new_sha1);
560 }
561
562 static void add_sha1_to_argv(const unsigned char sha1[20], void *data)
563 {
564         argv_array_push(data, sha1_to_hex(sha1));
565 }
566
567 static void calculate_changed_submodule_paths(void)
568 {
569         struct rev_info rev;
570         struct commit *commit;
571         struct argv_array argv = ARGV_ARRAY_INIT;
572
573         /* No need to check if there are no submodules configured */
574         if (!submodule_from_path(NULL, NULL))
575                 return;
576
577         init_revisions(&rev, NULL);
578         argv_array_push(&argv, "--"); /* argv[0] program name */
579         sha1_array_for_each_unique(&ref_tips_after_fetch,
580                                    add_sha1_to_argv, &argv);
581         argv_array_push(&argv, "--not");
582         sha1_array_for_each_unique(&ref_tips_before_fetch,
583                                    add_sha1_to_argv, &argv);
584         setup_revisions(argv.argc, argv.argv, &rev, NULL);
585         if (prepare_revision_walk(&rev))
586                 die("revision walk setup failed");
587
588         /*
589          * Collect all submodules (whether checked out or not) for which new
590          * commits have been recorded upstream in "changed_submodule_paths".
591          */
592         while ((commit = get_revision(&rev))) {
593                 struct commit_list *parent = commit->parents;
594                 while (parent) {
595                         struct diff_options diff_opts;
596                         diff_setup(&diff_opts);
597                         DIFF_OPT_SET(&diff_opts, RECURSIVE);
598                         diff_opts.output_format |= DIFF_FORMAT_CALLBACK;
599                         diff_opts.format_callback = submodule_collect_changed_cb;
600                         diff_setup_done(&diff_opts);
601                         diff_tree_sha1(parent->item->object.oid.hash, commit->object.oid.hash, "", &diff_opts);
602                         diffcore_std(&diff_opts);
603                         diff_flush(&diff_opts);
604                         parent = parent->next;
605                 }
606         }
607
608         argv_array_clear(&argv);
609         sha1_array_clear(&ref_tips_before_fetch);
610         sha1_array_clear(&ref_tips_after_fetch);
611         initialized_fetch_ref_tips = 0;
612 }
613
614 struct submodule_parallel_fetch {
615         int count;
616         struct argv_array args;
617         const char *work_tree;
618         const char *prefix;
619         int command_line_option;
620         int quiet;
621         int result;
622 };
623 #define SPF_INIT {0, ARGV_ARRAY_INIT, NULL, NULL, 0, 0, 0}
624
625 static int get_next_submodule(struct child_process *cp,
626                               struct strbuf *err, void *data, void **task_cb)
627 {
628         int ret = 0;
629         struct submodule_parallel_fetch *spf = data;
630
631         for (; spf->count < active_nr; spf->count++) {
632                 struct strbuf submodule_path = STRBUF_INIT;
633                 struct strbuf submodule_git_dir = STRBUF_INIT;
634                 struct strbuf submodule_prefix = STRBUF_INIT;
635                 const struct cache_entry *ce = active_cache[spf->count];
636                 const char *git_dir, *default_argv;
637                 const struct submodule *submodule;
638
639                 if (!S_ISGITLINK(ce->ce_mode))
640                         continue;
641
642                 submodule = submodule_from_path(null_sha1, ce->name);
643                 if (!submodule)
644                         submodule = submodule_from_name(null_sha1, ce->name);
645
646                 default_argv = "yes";
647                 if (spf->command_line_option == RECURSE_SUBMODULES_DEFAULT) {
648                         if (submodule &&
649                             submodule->fetch_recurse !=
650                                                 RECURSE_SUBMODULES_NONE) {
651                                 if (submodule->fetch_recurse ==
652                                                 RECURSE_SUBMODULES_OFF)
653                                         continue;
654                                 if (submodule->fetch_recurse ==
655                                                 RECURSE_SUBMODULES_ON_DEMAND) {
656                                         if (!unsorted_string_list_lookup(&changed_submodule_paths, ce->name))
657                                                 continue;
658                                         default_argv = "on-demand";
659                                 }
660                         } else {
661                                 if ((config_fetch_recurse_submodules == RECURSE_SUBMODULES_OFF) ||
662                                     gitmodules_is_unmerged)
663                                         continue;
664                                 if (config_fetch_recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND) {
665                                         if (!unsorted_string_list_lookup(&changed_submodule_paths, ce->name))
666                                                 continue;
667                                         default_argv = "on-demand";
668                                 }
669                         }
670                 } else if (spf->command_line_option == RECURSE_SUBMODULES_ON_DEMAND) {
671                         if (!unsorted_string_list_lookup(&changed_submodule_paths, ce->name))
672                                 continue;
673                         default_argv = "on-demand";
674                 }
675
676                 strbuf_addf(&submodule_path, "%s/%s", spf->work_tree, ce->name);
677                 strbuf_addf(&submodule_git_dir, "%s/.git", submodule_path.buf);
678                 strbuf_addf(&submodule_prefix, "%s%s/", spf->prefix, ce->name);
679                 git_dir = read_gitfile(submodule_git_dir.buf);
680                 if (!git_dir)
681                         git_dir = submodule_git_dir.buf;
682                 if (is_directory(git_dir)) {
683                         child_process_init(cp);
684                         cp->dir = strbuf_detach(&submodule_path, NULL);
685                         cp->env = local_repo_env;
686                         cp->git_cmd = 1;
687                         if (!spf->quiet)
688                                 strbuf_addf(err, "Fetching submodule %s%s\n",
689                                             spf->prefix, ce->name);
690                         argv_array_init(&cp->args);
691                         argv_array_pushv(&cp->args, spf->args.argv);
692                         argv_array_push(&cp->args, default_argv);
693                         argv_array_push(&cp->args, "--submodule-prefix");
694                         argv_array_push(&cp->args, submodule_prefix.buf);
695                         ret = 1;
696                 }
697                 strbuf_release(&submodule_path);
698                 strbuf_release(&submodule_git_dir);
699                 strbuf_release(&submodule_prefix);
700                 if (ret) {
701                         spf->count++;
702                         return 1;
703                 }
704         }
705         return 0;
706 }
707
708 static int fetch_start_failure(struct strbuf *err,
709                                void *cb, void *task_cb)
710 {
711         struct submodule_parallel_fetch *spf = cb;
712
713         spf->result = 1;
714
715         return 0;
716 }
717
718 static int fetch_finish(int retvalue, struct strbuf *err,
719                         void *cb, void *task_cb)
720 {
721         struct submodule_parallel_fetch *spf = cb;
722
723         if (retvalue)
724                 spf->result = 1;
725
726         return 0;
727 }
728
729 int fetch_populated_submodules(const struct argv_array *options,
730                                const char *prefix, int command_line_option,
731                                int quiet, int max_parallel_jobs)
732 {
733         int i;
734         struct submodule_parallel_fetch spf = SPF_INIT;
735
736         spf.work_tree = get_git_work_tree();
737         spf.command_line_option = command_line_option;
738         spf.quiet = quiet;
739         spf.prefix = prefix;
740
741         if (!spf.work_tree)
742                 goto out;
743
744         if (read_cache() < 0)
745                 die("index file corrupt");
746
747         argv_array_push(&spf.args, "fetch");
748         for (i = 0; i < options->argc; i++)
749                 argv_array_push(&spf.args, options->argv[i]);
750         argv_array_push(&spf.args, "--recurse-submodules-default");
751         /* default value, "--submodule-prefix" and its value are added later */
752
753         calculate_changed_submodule_paths();
754         run_processes_parallel(max_parallel_jobs,
755                                get_next_submodule,
756                                fetch_start_failure,
757                                fetch_finish,
758                                &spf);
759
760         argv_array_clear(&spf.args);
761 out:
762         string_list_clear(&changed_submodule_paths, 1);
763         return spf.result;
764 }
765
766 unsigned is_submodule_modified(const char *path, int ignore_untracked)
767 {
768         ssize_t len;
769         struct child_process cp = CHILD_PROCESS_INIT;
770         const char *argv[] = {
771                 "status",
772                 "--porcelain",
773                 NULL,
774                 NULL,
775         };
776         struct strbuf buf = STRBUF_INIT;
777         unsigned dirty_submodule = 0;
778         const char *line, *next_line;
779         const char *git_dir;
780
781         strbuf_addf(&buf, "%s/.git", path);
782         git_dir = read_gitfile(buf.buf);
783         if (!git_dir)
784                 git_dir = buf.buf;
785         if (!is_directory(git_dir)) {
786                 strbuf_release(&buf);
787                 /* The submodule is not checked out, so it is not modified */
788                 return 0;
789
790         }
791         strbuf_reset(&buf);
792
793         if (ignore_untracked)
794                 argv[2] = "-uno";
795
796         cp.argv = argv;
797         cp.env = local_repo_env;
798         cp.git_cmd = 1;
799         cp.no_stdin = 1;
800         cp.out = -1;
801         cp.dir = path;
802         if (start_command(&cp))
803                 die("Could not run 'git status --porcelain' in submodule %s", path);
804
805         len = strbuf_read(&buf, cp.out, 1024);
806         line = buf.buf;
807         while (len > 2) {
808                 if ((line[0] == '?') && (line[1] == '?')) {
809                         dirty_submodule |= DIRTY_SUBMODULE_UNTRACKED;
810                         if (dirty_submodule & DIRTY_SUBMODULE_MODIFIED)
811                                 break;
812                 } else {
813                         dirty_submodule |= DIRTY_SUBMODULE_MODIFIED;
814                         if (ignore_untracked ||
815                             (dirty_submodule & DIRTY_SUBMODULE_UNTRACKED))
816                                 break;
817                 }
818                 next_line = strchr(line, '\n');
819                 if (!next_line)
820                         break;
821                 next_line++;
822                 len -= (next_line - line);
823                 line = next_line;
824         }
825         close(cp.out);
826
827         if (finish_command(&cp))
828                 die("'git status --porcelain' failed in submodule %s", path);
829
830         strbuf_release(&buf);
831         return dirty_submodule;
832 }
833
834 int submodule_uses_gitfile(const char *path)
835 {
836         struct child_process cp = CHILD_PROCESS_INIT;
837         const char *argv[] = {
838                 "submodule",
839                 "foreach",
840                 "--quiet",
841                 "--recursive",
842                 "test -f .git",
843                 NULL,
844         };
845         struct strbuf buf = STRBUF_INIT;
846         const char *git_dir;
847
848         strbuf_addf(&buf, "%s/.git", path);
849         git_dir = read_gitfile(buf.buf);
850         if (!git_dir) {
851                 strbuf_release(&buf);
852                 return 0;
853         }
854         strbuf_release(&buf);
855
856         /* Now test that all nested submodules use a gitfile too */
857         cp.argv = argv;
858         cp.env = local_repo_env;
859         cp.git_cmd = 1;
860         cp.no_stdin = 1;
861         cp.no_stderr = 1;
862         cp.no_stdout = 1;
863         cp.dir = path;
864         if (run_command(&cp))
865                 return 0;
866
867         return 1;
868 }
869
870 int ok_to_remove_submodule(const char *path)
871 {
872         ssize_t len;
873         struct child_process cp = CHILD_PROCESS_INIT;
874         const char *argv[] = {
875                 "status",
876                 "--porcelain",
877                 "-u",
878                 "--ignore-submodules=none",
879                 NULL,
880         };
881         struct strbuf buf = STRBUF_INIT;
882         int ok_to_remove = 1;
883
884         if (!file_exists(path) || is_empty_dir(path))
885                 return 1;
886
887         if (!submodule_uses_gitfile(path))
888                 return 0;
889
890         cp.argv = argv;
891         cp.env = local_repo_env;
892         cp.git_cmd = 1;
893         cp.no_stdin = 1;
894         cp.out = -1;
895         cp.dir = path;
896         if (start_command(&cp))
897                 die("Could not run 'git status --porcelain -uall --ignore-submodules=none' in submodule %s", path);
898
899         len = strbuf_read(&buf, cp.out, 1024);
900         if (len > 2)
901                 ok_to_remove = 0;
902         close(cp.out);
903
904         if (finish_command(&cp))
905                 die("'git status --porcelain -uall --ignore-submodules=none' failed in submodule %s", path);
906
907         strbuf_release(&buf);
908         return ok_to_remove;
909 }
910
911 static int find_first_merges(struct object_array *result, const char *path,
912                 struct commit *a, struct commit *b)
913 {
914         int i, j;
915         struct object_array merges = OBJECT_ARRAY_INIT;
916         struct commit *commit;
917         int contains_another;
918
919         char merged_revision[42];
920         const char *rev_args[] = { "rev-list", "--merges", "--ancestry-path",
921                                    "--all", merged_revision, NULL };
922         struct rev_info revs;
923         struct setup_revision_opt rev_opts;
924
925         memset(result, 0, sizeof(struct object_array));
926         memset(&rev_opts, 0, sizeof(rev_opts));
927
928         /* get all revisions that merge commit a */
929         snprintf(merged_revision, sizeof(merged_revision), "^%s",
930                         oid_to_hex(&a->object.oid));
931         init_revisions(&revs, NULL);
932         rev_opts.submodule = path;
933         setup_revisions(ARRAY_SIZE(rev_args)-1, rev_args, &revs, &rev_opts);
934
935         /* save all revisions from the above list that contain b */
936         if (prepare_revision_walk(&revs))
937                 die("revision walk setup failed");
938         while ((commit = get_revision(&revs)) != NULL) {
939                 struct object *o = &(commit->object);
940                 if (in_merge_bases(b, commit))
941                         add_object_array(o, NULL, &merges);
942         }
943         reset_revision_walk();
944
945         /* Now we've got all merges that contain a and b. Prune all
946          * merges that contain another found merge and save them in
947          * result.
948          */
949         for (i = 0; i < merges.nr; i++) {
950                 struct commit *m1 = (struct commit *) merges.objects[i].item;
951
952                 contains_another = 0;
953                 for (j = 0; j < merges.nr; j++) {
954                         struct commit *m2 = (struct commit *) merges.objects[j].item;
955                         if (i != j && in_merge_bases(m2, m1)) {
956                                 contains_another = 1;
957                                 break;
958                         }
959                 }
960
961                 if (!contains_another)
962                         add_object_array(merges.objects[i].item, NULL, result);
963         }
964
965         free(merges.objects);
966         return result->nr;
967 }
968
969 static void print_commit(struct commit *commit)
970 {
971         struct strbuf sb = STRBUF_INIT;
972         struct pretty_print_context ctx = {0};
973         ctx.date_mode.type = DATE_NORMAL;
974         format_commit_message(commit, " %h: %m %s", &sb, &ctx);
975         fprintf(stderr, "%s\n", sb.buf);
976         strbuf_release(&sb);
977 }
978
979 #define MERGE_WARNING(path, msg) \
980         warning("Failed to merge submodule %s (%s)", path, msg);
981
982 int merge_submodule(unsigned char result[20], const char *path,
983                     const unsigned char base[20], const unsigned char a[20],
984                     const unsigned char b[20], int search)
985 {
986         struct commit *commit_base, *commit_a, *commit_b;
987         int parent_count;
988         struct object_array merges;
989
990         int i;
991
992         /* store a in result in case we fail */
993         hashcpy(result, a);
994
995         /* we can not handle deletion conflicts */
996         if (is_null_sha1(base))
997                 return 0;
998         if (is_null_sha1(a))
999                 return 0;
1000         if (is_null_sha1(b))
1001                 return 0;
1002
1003         if (add_submodule_odb(path)) {
1004                 MERGE_WARNING(path, "not checked out");
1005                 return 0;
1006         }
1007
1008         if (!(commit_base = lookup_commit_reference(base)) ||
1009             !(commit_a = lookup_commit_reference(a)) ||
1010             !(commit_b = lookup_commit_reference(b))) {
1011                 MERGE_WARNING(path, "commits not present");
1012                 return 0;
1013         }
1014
1015         /* check whether both changes are forward */
1016         if (!in_merge_bases(commit_base, commit_a) ||
1017             !in_merge_bases(commit_base, commit_b)) {
1018                 MERGE_WARNING(path, "commits don't follow merge-base");
1019                 return 0;
1020         }
1021
1022         /* Case #1: a is contained in b or vice versa */
1023         if (in_merge_bases(commit_a, commit_b)) {
1024                 hashcpy(result, b);
1025                 return 1;
1026         }
1027         if (in_merge_bases(commit_b, commit_a)) {
1028                 hashcpy(result, a);
1029                 return 1;
1030         }
1031
1032         /*
1033          * Case #2: There are one or more merges that contain a and b in
1034          * the submodule. If there is only one, then present it as a
1035          * suggestion to the user, but leave it marked unmerged so the
1036          * user needs to confirm the resolution.
1037          */
1038
1039         /* Skip the search if makes no sense to the calling context.  */
1040         if (!search)
1041                 return 0;
1042
1043         /* find commit which merges them */
1044         parent_count = find_first_merges(&merges, path, commit_a, commit_b);
1045         switch (parent_count) {
1046         case 0:
1047                 MERGE_WARNING(path, "merge following commits not found");
1048                 break;
1049
1050         case 1:
1051                 MERGE_WARNING(path, "not fast-forward");
1052                 fprintf(stderr, "Found a possible merge resolution "
1053                                 "for the submodule:\n");
1054                 print_commit((struct commit *) merges.objects[0].item);
1055                 fprintf(stderr,
1056                         "If this is correct simply add it to the index "
1057                         "for example\n"
1058                         "by using:\n\n"
1059                         "  git update-index --cacheinfo 160000 %s \"%s\"\n\n"
1060                         "which will accept this suggestion.\n",
1061                         oid_to_hex(&merges.objects[0].item->oid), path);
1062                 break;
1063
1064         default:
1065                 MERGE_WARNING(path, "multiple merges found");
1066                 for (i = 0; i < merges.nr; i++)
1067                         print_commit((struct commit *) merges.objects[i].item);
1068         }
1069
1070         free(merges.objects);
1071         return 0;
1072 }
1073
1074 /* Update gitfile and core.worktree setting to connect work tree and git dir */
1075 void connect_work_tree_and_git_dir(const char *work_tree, const char *git_dir)
1076 {
1077         struct strbuf file_name = STRBUF_INIT;
1078         struct strbuf rel_path = STRBUF_INIT;
1079         const char *real_work_tree = xstrdup(real_path(work_tree));
1080
1081         /* Update gitfile */
1082         strbuf_addf(&file_name, "%s/.git", work_tree);
1083         write_file(file_name.buf, "gitdir: %s",
1084                    relative_path(git_dir, real_work_tree, &rel_path));
1085
1086         /* Update core.worktree setting */
1087         strbuf_reset(&file_name);
1088         strbuf_addf(&file_name, "%s/config", git_dir);
1089         git_config_set_in_file(file_name.buf, "core.worktree",
1090                                relative_path(real_work_tree, git_dir,
1091                                              &rel_path));
1092
1093         strbuf_release(&file_name);
1094         strbuf_release(&rel_path);
1095         free((void *)real_work_tree);
1096 }