Fix sparse warnings
Fix warnings from 'make check'.
- These files don't include 'builtin.h' causing sparse to complain that
cmd_* isn't declared:
builtin/clone.c:364, builtin/fetch-pack.c:797,
builtin/fmt-merge-msg.c:34, builtin/hash-object.c:78,
builtin/merge-index.c:69, builtin/merge-recursive.c:22
builtin/merge-tree.c:341, builtin/mktag.c:156, builtin/notes.c:426
builtin/notes.c:822, builtin/pack-redundant.c:596,
builtin/pack-refs.c:10, builtin/patch-id.c:60, builtin/patch-id.c:149,
builtin/remote.c:1512, builtin/remote-ext.c:240,
builtin/remote-fd.c:53, builtin/reset.c:236, builtin/send-pack.c:384,
builtin/unpack-file.c:25, builtin/var.c:75
- These files have symbols which should be marked static since they're
only file scope:
submodule.c:12, diff.c:631, replace_object.c:92, submodule.c:13,
submodule.c:14, trace.c:78, transport.c:195, transport-helper.c:79,
unpack-trees.c:19, url.c:3, url.c:18, url.c:104, url.c:117, url.c:123,
url.c:129, url.c:136, thread-utils.c:21, thread-utils.c:48
- These files redeclare symbols to be different types:
builtin/index-pack.c:210, parse-options.c:564, parse-options.c:571,
usage.c:49, usage.c:58, usage.c:63, usage.c:72
- These files use a literal integer 0 when they really should use a NULL
pointer:
daemon.c:663, fast-import.c:2942, imap-send.c:1072, notes-merge.c:362
While we're in the area, clean up some unused #includes in builtin files
(mostly exec_cmd.h).
Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2011-03-22 10:51:05 +03:00
|
|
|
#include "builtin.h"
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
#include "commit.h"
|
|
|
|
#include "tag.h"
|
2008-02-07 19:40:05 +03:00
|
|
|
#include "merge-recursive.h"
|
2010-08-26 09:50:45 +04:00
|
|
|
#include "xdiff-interface.h"
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
|
2010-08-30 07:30:22 +04:00
|
|
|
static const char builtin_merge_recursive_usage[] =
|
|
|
|
"git %s <base>... -- <head> <remote> ...";
|
|
|
|
|
2006-12-28 10:35:20 +03:00
|
|
|
static const char *better_branch_name(const char *branch)
|
|
|
|
{
|
2016-06-25 02:09:28 +03:00
|
|
|
static char githead_env[8 + GIT_SHA1_HEXSZ + 1];
|
2006-12-28 10:35:20 +03:00
|
|
|
char *name;
|
|
|
|
|
2016-06-25 02:09:28 +03:00
|
|
|
if (strlen(branch) != GIT_SHA1_HEXSZ)
|
2006-12-28 10:35:20 +03:00
|
|
|
return branch;
|
2015-09-25 00:06:08 +03:00
|
|
|
xsnprintf(githead_env, sizeof(githead_env), "GITHEAD_%s", branch);
|
2006-12-28 10:35:20 +03:00
|
|
|
name = getenv(githead_env);
|
|
|
|
return name ? name : branch;
|
|
|
|
}
|
|
|
|
|
2008-02-07 19:40:05 +03:00
|
|
|
int cmd_merge_recursive(int argc, const char **argv, const char *prefix)
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
{
|
2016-06-25 02:09:28 +03:00
|
|
|
const struct object_id *bases[21];
|
2008-08-13 00:13:59 +04:00
|
|
|
unsigned bases_count = 0;
|
|
|
|
int i, failed;
|
2016-06-25 02:09:28 +03:00
|
|
|
struct object_id h1, h2;
|
2008-08-25 18:25:57 +04:00
|
|
|
struct merge_options o;
|
|
|
|
struct commit *result;
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
|
2008-08-25 18:25:57 +04:00
|
|
|
init_merge_options(&o);
|
2013-12-01 00:55:40 +04:00
|
|
|
if (argv[0] && ends_with(argv[0], "-subtree"))
|
2008-07-01 09:18:57 +04:00
|
|
|
o.subtree_shift = "";
|
2007-02-16 03:32:45 +03:00
|
|
|
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
if (argc < 4)
|
2010-08-30 07:30:22 +04:00
|
|
|
usagef(builtin_merge_recursive_usage, argv[0]);
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
|
|
|
|
for (i = 1; i < argc; ++i) {
|
2009-11-26 05:23:55 +03:00
|
|
|
const char *arg = argv[i];
|
|
|
|
|
2013-12-01 00:55:40 +04:00
|
|
|
if (starts_with(arg, "--")) {
|
2009-11-26 05:23:55 +03:00
|
|
|
if (!arg[2])
|
|
|
|
break;
|
2010-08-26 09:47:58 +04:00
|
|
|
if (parse_merge_opt(&o, arg + 2))
|
2016-09-15 17:59:01 +03:00
|
|
|
die(_("unknown option %s"), arg);
|
2009-11-26 05:23:55 +03:00
|
|
|
continue;
|
|
|
|
}
|
2008-08-25 18:25:57 +04:00
|
|
|
if (bases_count < ARRAY_SIZE(bases)-1) {
|
2016-06-25 02:09:28 +03:00
|
|
|
struct object_id *oid = xmalloc(sizeof(struct object_id));
|
|
|
|
if (get_oid(argv[i], oid))
|
2016-09-15 17:59:01 +03:00
|
|
|
die(_("could not parse object '%s'"), argv[i]);
|
2016-06-25 02:09:28 +03:00
|
|
|
bases[bases_count++] = oid;
|
2008-08-13 00:13:59 +04:00
|
|
|
}
|
|
|
|
else
|
2016-09-15 17:59:01 +03:00
|
|
|
warning(Q_("cannot handle more than %d base. "
|
|
|
|
"Ignoring %s.",
|
|
|
|
"cannot handle more than %d bases. "
|
|
|
|
"Ignoring %s.",
|
|
|
|
(int)ARRAY_SIZE(bases)-1),
|
2009-05-23 12:04:51 +04:00
|
|
|
(int)ARRAY_SIZE(bases)-1, argv[i]);
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
}
|
|
|
|
if (argc - i != 3) /* "--" "<head>" "<remote>" */
|
2016-09-15 17:59:01 +03:00
|
|
|
die(_("not handling anything other than two heads merge."));
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
|
2008-08-25 18:25:57 +04:00
|
|
|
o.branch1 = argv[++i];
|
|
|
|
o.branch2 = argv[++i];
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
|
2016-06-25 02:09:28 +03:00
|
|
|
if (get_oid(o.branch1, &h1))
|
2016-09-15 17:59:01 +03:00
|
|
|
die(_("could not resolve ref '%s'"), o.branch1);
|
2016-06-25 02:09:28 +03:00
|
|
|
if (get_oid(o.branch2, &h2))
|
2016-09-15 17:59:01 +03:00
|
|
|
die(_("could not resolve ref '%s'"), o.branch2);
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
|
2008-08-25 18:25:57 +04:00
|
|
|
o.branch1 = better_branch_name(o.branch1);
|
|
|
|
o.branch2 = better_branch_name(o.branch2);
|
2007-01-14 08:28:58 +03:00
|
|
|
|
2008-08-25 18:25:57 +04:00
|
|
|
if (o.verbosity >= 3)
|
2016-09-15 17:59:02 +03:00
|
|
|
printf(_("Merging %s with %s\n"), o.branch1, o.branch2);
|
2006-12-23 11:44:47 +03:00
|
|
|
|
2016-06-25 02:09:28 +03:00
|
|
|
failed = merge_recursive_generic(&o, &h1, &h2, bases_count, bases, &result);
|
2008-08-13 00:13:59 +04:00
|
|
|
if (failed < 0)
|
|
|
|
return 128; /* die() error code */
|
|
|
|
return failed;
|
Status update on merge-recursive in C
This is just an update for people being interested. Alex and me were
busy with that project for a few days now. While it has progressed nicely,
there are quite a couple TODOs in merge-recursive.c, just search for "TODO".
For impatient people: yes, it passes all the tests, and yes, according
to the evil test Alex did, it is faster than the Python script.
But no, it is not yet finished. Biggest points are:
- there are still three external calls
- in the end, it should not be necessary to write the index more than once
(just before exiting)
- a lot of things can be refactored to make the code easier and shorter
BTW we cannot just plug in git-merge-tree yet, because git-merge-tree
does not handle renames at all.
This patch is meant for testing, and as such,
- it compile the program to git-merge-recur
- it adjusts the scripts and tests to use git-merge-recur instead of
git-merge-recursive
- it provides "TEST", a script to execute the tests regarding -recursive
- it inlines the changes to read-cache.c (read_cache_from(), discard_cache()
and refresh_cache_entry())
Brought to you by Alex Riesen and Dscho
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-07-08 20:42:41 +04:00
|
|
|
}
|