Skip to content

Commit

Permalink
Merge branch 'master' into jc/diff
Browse files Browse the repository at this point in the history
* master:
  Make "--parents" logs also be incremental
  Retire diffcore-pathspec.
  Improve the git-diff-tree -c/-cc documentation
  • Loading branch information
Junio C Hamano committed Apr 10, 2006
2 parents 52b70d5 + 5910e99 commit 6d46a23
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 108 deletions.
25 changes: 16 additions & 9 deletions Documentation/git-diff-tree.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ separated with a single space are given.
-m::
By default, "git-diff-tree --stdin" does not show
differences for merge commits. With this flag, it shows
differences to that commit from all of its parents.
differences to that commit from all of its parents. See
also '-c'.

-s::
By default, "git-diff-tree --stdin" shows differences,
Expand All @@ -81,19 +82,25 @@ separated with a single space are given.
git-diff-tree outputs a line with the commit ID when
applicable. This flag suppressed the commit ID output.

-c,--cc::
These flags change the way a merge commit is displayed
-c::
This flag changes the way a merge commit is displayed
(which means it is useful only when the command is given
one <tree-ish>, or '--stdin'). It shows the differences
from each of the parents to the merge result
simultaneously, instead of showing pairwise diff between
a parent and the result one at a time, which '-m' option
output does. '--cc' further compresses the output by
omiting hunks that show differences from only one
from each of the parents to the merge result simultaneously
instead of showing pairwise diff between a parent and the
result one at a time (which is what the '-m' option does).
Furthermore, it lists only files which were modified
from all parents.

-cc::
This flag changes the way a merge commit patch is displayed,
in a similar way to the '-c' option. It implies the '-c'
and '-p' options and further compresses the patch output
by omitting hunks that show differences from only one
parent, or show the same change from all but one parent
for an Octopus merge. When this optimization makes all
hunks disappear, the commit itself and the commit log
message is not shown, just like any other "empty diff" cases.
message is not shown, just like in any other "empty diff" case.

--always::
Show the commit itself and the commit log message even
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ LIB_H = \
tree-walk.h log-tree.h

DIFF_OBJS = \
diff.o diffcore-break.o diffcore-order.o diffcore-pathspec.o \
diff.o diffcore-break.o diffcore-order.o \
diffcore-pickaxe.o diffcore-rename.o tree-diff.o combine-diff.o \
diffcore-delta.o log-tree.o

Expand Down
17 changes: 10 additions & 7 deletions diff-stages.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,17 @@ static const char diff_stages_usage[] =
"git-diff-stages [<common diff options>] <stage1> <stage2> [<path>...]"
COMMON_DIFF_OPTIONS_HELP;

static void diff_stages(int stage1, int stage2)
static void diff_stages(int stage1, int stage2, const char **pathspec)
{
int i = 0;
while (i < active_nr) {
struct cache_entry *ce, *stages[4] = { NULL, };
struct cache_entry *one, *two;
const char *name;
int len;
int len, skip;

ce = active_cache[i];
skip = !ce_path_match(ce, pathspec);
len = ce_namelen(ce);
name = ce->name;
for (;;) {
Expand All @@ -34,7 +36,8 @@ static void diff_stages(int stage1, int stage2)
}
one = stages[stage1];
two = stages[stage2];
if (!one && !two)

if (skip || (!one && !two))
continue;
if (!one)
diff_addremove(&diff_options, '+', ntohl(two->ce_mode),
Expand All @@ -54,8 +57,8 @@ static void diff_stages(int stage1, int stage2)
int main(int ac, const char **av)
{
int stage1, stage2;

setup_git_directory();
const char *prefix = setup_git_directory();
const char **pathspec = NULL;

git_config(git_diff_config);
read_cache();
Expand Down Expand Up @@ -89,12 +92,12 @@ int main(int ac, const char **av)
usage(diff_stages_usage);

av += 3; /* The rest from av[0] are for paths restriction. */
diff_options.paths = av;
pathspec = get_pathspec(prefix, av);

if (diff_setup_done(&diff_options) < 0)
usage(diff_stages_usage);

diff_stages(stage1, stage2);
diff_stages(stage1, stage2, pathspec);
diffcore_std(&diff_options);
diff_flush(&diff_options);
return 0;
Expand Down
2 changes: 0 additions & 2 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -1375,8 +1375,6 @@ static void diffcore_apply_filter(const char *filter)

void diffcore_std(struct diff_options *options)
{
if (options->paths && options->paths[0])
diffcore_pathspec(options->paths);
if (options->break_opt != -1)
diffcore_break(options->break_opt);
if (options->detect_rename)
Expand Down
1 change: 0 additions & 1 deletion diff.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ typedef void (*add_remove_fn_t)(struct diff_options *options,
const char *base, const char *path);

struct diff_options {
const char **paths;
const char *filter;
const char *orderfile;
const char *pickaxe;
Expand Down
70 changes: 0 additions & 70 deletions diffcore-pathspec.c

This file was deleted.

10 changes: 5 additions & 5 deletions http-push.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ enum XML_Status {
#define LOCK_TIME 600
#define LOCK_REFRESH 30

/* bits #0-4 in revision.h */
/* bits #0-6 in revision.h */

#define LOCAL (1u << 5)
#define REMOTE (1u << 6)
#define FETCHING (1u << 7)
#define PUSHING (1u << 8)
#define LOCAL (1u << 7)
#define REMOTE (1u << 8)
#define FETCHING (1u << 9)
#define PUSHING (1u << 10)

/* We allow "recursive" symbolic refs. Only within reason, though */
#define MAXDEPTH 5
Expand Down
4 changes: 2 additions & 2 deletions rev-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
#include "tree-walk.h"
#include "revision.h"

/* bits #0-5 in revision.h */
/* bits #0-6 in revision.h */

#define COUNTED (1u<<6)
#define COUNTED (1u<<7)

static const char rev_list_usage[] =
"git-rev-list [OPTION] <commit-id>... [ -- paths... ]\n"
Expand Down
21 changes: 10 additions & 11 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,10 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st
{
struct commit_list *parent = commit->parents;

if (commit->object.flags & ADDED)
return;
commit->object.flags |= ADDED;

/*
* If the commit is uninteresting, don't try to
* prune parents - we want the maximal uninteresting
Expand Down Expand Up @@ -705,13 +709,6 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
if (revs->prune_data) {
diff_tree_setup_paths(revs->prune_data);
revs->prune_fn = try_to_simplify_commit;

/*
* If we fix up parent data, we currently cannot
* do that on-the-fly.
*/
if (revs->parents)
revs->limited = 1;
}

return left;
Expand All @@ -728,10 +725,12 @@ void prepare_revision_walk(struct rev_info *revs)
revs->topo_getter);
}

static int rewrite_one(struct commit **pp)
static int rewrite_one(struct rev_info *revs, struct commit **pp)
{
for (;;) {
struct commit *p = *pp;
if (!revs->limited)
add_parents_to_list(revs, p, &revs->commits);
if (p->object.flags & (TREECHANGE | UNINTERESTING))
return 0;
if (!p->parents)
Expand All @@ -740,12 +739,12 @@ static int rewrite_one(struct commit **pp)
}
}

static void rewrite_parents(struct commit *commit)
static void rewrite_parents(struct rev_info *revs, struct commit *commit)
{
struct commit_list **pp = &commit->parents;
while (*pp) {
struct commit_list *parent = *pp;
if (rewrite_one(&parent->item) < 0) {
if (rewrite_one(revs, &parent->item) < 0) {
*pp = parent->next;
continue;
}
Expand Down Expand Up @@ -802,7 +801,7 @@ struct commit *get_revision(struct rev_info *revs)
if (!(commit->object.flags & TREECHANGE))
continue;
if (revs->parents)
rewrite_parents(commit);
rewrite_parents(revs, commit);
}
commit->object.flags |= SHOWN;
return commit;
Expand Down
1 change: 1 addition & 0 deletions revision.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#define SHOWN (1u<<3)
#define TMP_MARK (1u<<4) /* for isolated cases; clean after use */
#define BOUNDARY (1u<<5)
#define ADDED (1u<<6) /* Parents already parsed and added? */

struct rev_info;

Expand Down

0 comments on commit 6d46a23

Please sign in to comment.