path: root/merge-base.c
AgeCommit message (Collapse)Author
2007-01-10Make merge-base a built-in.Junio C Hamano
Signed-off-by: Junio C Hamano <>
2006-12-20simplify inclusion of system header files.Junio C Hamano
This is a mechanical clean-up of the way *.c files include system header files. (1) sources under compat/, platform sha-1 implementations, and xdelta code are exempt from the following rules; (2) the first #include must be "git-compat-util.h" or one of our own header file that includes it first (e.g. config.h, builtin.h, pkt-line.h); (3) system headers that are included in "git-compat-util.h" need not be included in individual C source files. (4) "git-compat-util.h" does not have to include subsystem specific header files (e.g. expat.h). Signed-off-by: Junio C Hamano <>
2006-08-16remove unnecessary initializationsDavid Rientjes
[jc: I needed to hand merge the changes to the updated codebase, so the result needs to be checked.] Signed-off-by: David Rientjes <> Signed-off-by: Junio C Hamano <>
2006-07-02Fold get_merge_bases_clean() into get_merge_bases()Rene Scharfe
Change get_merge_bases() to be able to clean up after itself if needed by adding a cleanup parameter. We don't need to save the flags and restore them afterwards anymore; that was a leftover from before the flags were moved out of the range used in revision.c. clear_commit_marks() sets them to zero, which is enough. Signed-off-by: Rene Scharfe <> Acked-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
2006-06-29move get_merge_bases() to core lib.Johannes Schindelin
Signed-off-by: Junio C Hamano <>
2006-06-29refactor merge_bases() as preparation to libify merge-baseJohannes Schindelin
Signed-off-by: Junio C Hamano <>
2006-05-17merge-base: Clarify the comments on post processing.Junio C Hamano
The comment fooled myself believing that we still had an unsolved horizon effect. Signed-off-by: Junio C Hamano <>
2006-05-08Separate object name errors from usage errorsDmitry V. Levin
Separate object name errors from usage errors. Signed-off-by: Dmitry V. Levin <> Signed-off-by: Junio C Hamano <>
2006-03-24sha1_name: warning ambiguous refs.Junio C Hamano
This makes sure that many commands that take refs on the command line to honor core.warnambiguousrefs configuration. Earlier, the commands affected by this patch did not read the configuration file. Signed-off-by: Junio C Hamano <>
2005-11-29Make the rest of commands work from a subdirectory.Junio C Hamano
These commands are converted to run from a subdirectory. commit-tree convert-objects merge-base merge-index mktag pack-objects pack-redundant prune-packed read-tree tar-tree unpack-file unpack-objects update-server-info write-tree Signed-off-by: Junio C Hamano <>
2005-11-11merge-base: avoid unnecessary postprocessing.Junio C Hamano
When we have only one merge-base candidates in the result list, there is no point going back to mark the reachable commits again. And that is the most common case, so try not to waste time on it. Suggested by Linus. Signed-off-by: Junio C Hamano <>
2005-11-11merge-base: fully contaminate the well.Junio C Hamano
The discussion on the list demonstrated a pathological case where an ancestor of a merge-base can be left interesting. This commit introduces a postprocessing phase to fix it. Signed-off-by: Junio C Hamano <>
2005-08-24Try to find the optimum merge base while resolving.Junio C Hamano
The merge-base command acquires a new option, '--all', that causes it to output all the common ancestor candidates. The "git resolve" command then uses it to pick the optimum merge base by picking the one that results in the smallest number of nontrivial merges. Signed-off-by: Junio C Hamano <>
2005-08-12merge-base.c: pathological case fix.Junio C Hamano
Also add some illustration requested by Linus. Signed-off-by: Junio C Hamano <>
2005-08-12[PATCH] Speed up git-merge-base a lotLinus Torvalds
In commit 4f7eb2e5a351e0d1f19fd4eab7e92834cc4528c2 I fixed git-merge-base getting confused by datestamps that caused it to traverse things in a non-obvious order. However, my fix was a very brute-force one, and it had some really horrible implications for more complex trees with lots of parallell development. It might end up traversing all the way to the root commit. Now, normally that isn't that horrible: it's used mainly for merging, and the bad cases really tend to happen fairly rarely, so if it takes a few seconds, we're not in too bad shape. However, gitk will also do the git-merge-base for every merge it shows, because it basically re-does the trivial merge in order to show the "interesting" parts. And there we'd really like the result to be instantaneous. This patch does that by walking the tree more completely, and using the same heuristic as git-rev-list to decide "ok, the rest is uninteresting". In one - hopefully fairly extreme - case, it made a git-merge-base go from just under five seconds(!) to a tenth of a second on my machine. Signed-off-by: Linus Torvalds <> Signed-off-by: Junio C Hamano <>
2005-07-31Fix merge-base from getting confused.Linus Torvalds
On Sat, 30 Jul 2005, Linus Torvalds wrote: > > Yup, it's git-merge-base, and it is confused by the same thing that > confused git-rev-list. Hmm.. Here's a tentative fix. I'm not really happy with it, and maybe somebody else can come up with a better one. I think this one ends up being quite a bit more expensive than the old one (it will look up _all_ common parents that have a child that isn't common, and then select the newest one of the bunch), but I haven't really thought it through very much. Signed-off-by: Linus Torvalds <>
2005-05-20sparse cleanupLinus Torvalds
Fix various things that sparse complains about: - use NULL instead of 0 - make sure we declare everything properly, or mark it static - use proper function declarations ("fn(void)" instead of "fn()") Sparse is always right.
2005-05-19[PATCH] cleanup of in-code namesAlexey Nezhdanov
Fixes all in-code names that leaved during "big name change". Signed-off-by: Alexey Nezhdanov <> Signed-off-by: Linus Torvalds <>
2005-05-18merge-base: use the new lookup_commit_reference() helper functionLinus Torvalds
This allows you to use tags for merge bases.
2005-05-01Add "get_sha1()" helper function.Linus Torvalds
This allows the programs to use various simplified versions of the SHA1 names, eg just say "HEAD" for the SHA1 pointed to by the .git/HEAD file etc. For example, this commit has been done with git-commit-tree $(git-write-tree) -p HEAD instead of the traditional "$(cat .git/HEAD)" syntax.
2005-04-24[PATCH] Allow multiple date-ordered listsDaniel Barkalow
Make pop_most_recent_commit() return the same objects multiple times, but only if called with different bits to mark. This is necessary to make merge-base work again. Signed-Off-By: Daniel Barkalow <> Signed-off-by: Linus Torvalds <>
2005-04-24[PATCH] Replace merge-base implementationDaniel Barkalow
The old implementation was a nice algorithm, but, unfortunately, it could be confused in some cases and would not necessarily do the obvious thing if one argument was decended from the other. This version fixes that by changing the criterion to the most recent common ancestor. Signed-Off-By: Daniel Barkalow <> Signed-off-by: Linus Torvalds <>
2005-04-18Merge the new object model thing from Daniel BarkalowLinus Torvalds
This was a real git merge with conflicts. I'll commit the scripts I used to do the merge next. Not pretty, but it's half-way functional.
2005-04-18[PATCH] Switch implementations of merge-base, port to parsingDaniel Barkalow
This switches to my implementation of merge-base, but with the new parsing library. Signed-Off-By: Daniel Barkalow <> Signed-off-by: Linus Torvalds <>
2005-04-17Make "parse_commit" return the "struct revision" for the commit.Linus Torvalds
Also, make it a fatal error to pass in a non-commit object. The callers never checked, so better check here. This simplifies merge-base further. It's now so trivial that it's almost ridiculous.
2005-04-17Do a very simple "merge-base" that finds the most recent commonLinus Torvalds
parent of two commits. The question of "best" commit can probably be tweaked almost arbitrarily. In particular, trying to take things like how big the tree differences are into account migt be a good idea. This one is just very simple.