Skip to content

Commit

Permalink
[PATCH] show-diff show deleted files as diff as well.
Browse files Browse the repository at this point in the history
The ideas is that using the show-diff to generate the
patch including deleted and new file (in the next patch).
So we don't have to do the temp new file diff dance on the
script.

The cache index now contain enough information to generate
the whole patch. So the GIT SCM don't need separate command
for check out file to edit or delete. Just do the edit and
remove and GIT will generate the correct patch.

It still require tell GIT to add new files.
  • Loading branch information
Christopher Li authored and Linus Torvalds committed Apr 12, 2005
1 parent 5e76011 commit c0fb976
Showing 1 changed file with 45 additions and 4 deletions.
49 changes: 45 additions & 4 deletions show-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,56 @@
*/
#include "cache.h"

static void show_differences(struct cache_entry *ce, struct stat *cur,
static void show_differences(char *name,
void *old_contents, unsigned long long old_size)
{
static char cmd[1000];
FILE *f;

snprintf(cmd, sizeof(cmd), "diff -u - %s", ce->name);
snprintf(cmd, sizeof(cmd), "diff -L %s -u -N - %s", name, name);
f = popen(cmd, "w");
fwrite(old_contents, old_size, 1, f);
if (old_size)
fwrite(old_contents, old_size, 1, f);
pclose(f);
}

static void show_diff_empty(struct cache_entry *ce)
{
char *old;
unsigned long int size;
int lines=0;
unsigned char type[20], *p, *end;

old = read_sha1_file(ce->sha1, type, &size);
if (size > 0) {
int startline = 1;
int c = 0;

printf("--- %s\n", ce->name);
printf("+++ %s\n", ce->name);
p = old;
end = old + size;
while (p < end)
if (*p++ == '\n')
lines ++;
printf("@@ -1,%d +0,0 @@\n", lines);
p = old;
while (p < end) {
c = *p++;
if (startline) {
putchar('-');
startline = 0;
}
putchar(c);
if (c == '\n')
startline = 1;
}
if (c!='\n')
printf("\n");
fflush(stdout);
}
}

int main(int argc, char **argv)
{
int entries = read_cache();
Expand All @@ -36,6 +74,8 @@ int main(int argc, char **argv)

if (stat(ce->name, &st) < 0) {
printf("%s: %s\n", ce->name, strerror(errno));
if (errno == ENOENT)
show_diff_empty(ce);
continue;
}
changed = cache_match_stat(ce, &st);
Expand All @@ -45,8 +85,9 @@ int main(int argc, char **argv)
for (n = 0; n < 20; n++)
printf("%02x", ce->sha1[n]);
printf("\n");
fflush(stdout);
new = read_sha1_file(ce->sha1, type, &size);
show_differences(ce, &st, new, size);
show_differences(ce->name, new, size);
free(new);
}
return 0;
Expand Down

0 comments on commit c0fb976

Please sign in to comment.