Merge branch 'master' into next

* master:
  Optionally do not list empty directories in git-ls-files --others
  Document git-rebase behavior on conflicts.
  Fix error handling for nonexistent names
This commit is contained in:
Junio C Hamano 2006-03-26 23:44:14 -08:00
Родитель f4e96f97e8 b0a3de4231
Коммит d93067d9c7
5 изменённых файлов: 46 добавлений и 12 удалений

Просмотреть файл

@ -52,6 +52,9 @@ OPTIONS
If a whole directory is classified as "other", show just its
name (with a trailing slash) and not its whole contents.
--no-empty-directory::
Do not list empty directories. Has no effect without --directory.
-u|--unmerged::
Show unmerged files in the output (forces --stage)

Просмотреть файл

@ -48,6 +48,18 @@ would be:
/
D---E---F---G master
In case of conflict, git-rebase will stop at the first problematic commit
and leave conflict markers in the tree. After resolving the conflict manually
and updating the index with the desired resolution, you can continue the
rebasing process with
git am --resolved --3way
Alternatively, you can undo the git-rebase with
git reset --hard ORIG_HEAD
rm -r .dotest
OPTIONS
-------
<newbase>::

Просмотреть файл

@ -21,6 +21,7 @@ static int show_unmerged = 0;
static int show_modified = 0;
static int show_killed = 0;
static int show_other_directories = 0;
static int hide_empty_directories = 0;
static int show_valid_bit = 0;
static int line_terminator = '\n';
@ -259,11 +260,12 @@ static int dir_exists(const char *dirname, int len)
* Also, we ignore the name ".git" (even if it is not a directory).
* That likely will not change.
*/
static void read_directory(const char *path, const char *base, int baselen)
static int read_directory(const char *path, const char *base, int baselen)
{
DIR *dir = opendir(path);
DIR *fdir = opendir(path);
int contents = 0;
if (dir) {
if (fdir) {
int exclude_stk;
struct dirent *de;
char fullname[MAXPATHLEN + 1];
@ -271,7 +273,7 @@ static void read_directory(const char *path, const char *base, int baselen)
exclude_stk = push_exclude_per_directory(base, baselen);
while ((de = readdir(dir)) != NULL) {
while ((de = readdir(fdir)) != NULL) {
int len;
if ((de->d_name[0] == '.') &&
@ -289,6 +291,7 @@ static void read_directory(const char *path, const char *base, int baselen)
switch (DTYPE(de)) {
struct stat st;
int subdir, rewind_base;
default:
continue;
case DT_UNKNOWN:
@ -302,22 +305,32 @@ static void read_directory(const char *path, const char *base, int baselen)
case DT_DIR:
memcpy(fullname + baselen + len, "/", 2);
len++;
rewind_base = nr_dir;
subdir = read_directory(fullname, fullname,
baselen + len);
if (show_other_directories &&
!dir_exists(fullname, baselen + len))
(subdir || !hide_empty_directories) &&
!dir_exists(fullname, baselen + len)) {
// Rewind the read subdirectory
while (nr_dir > rewind_base)
free(dir[--nr_dir]);
break;
read_directory(fullname, fullname,
baselen + len);
}
contents += subdir;
continue;
case DT_REG:
case DT_LNK:
break;
}
add_name(fullname, baselen + len);
contents++;
}
closedir(dir);
closedir(fdir);
pop_exclude_per_directory(exclude_stk);
}
return contents;
}
static int cmp_name(const void *p1, const void *p2)
@ -699,6 +712,10 @@ int main(int argc, const char **argv)
show_other_directories = 1;
continue;
}
if (!strcmp(arg, "--no-empty-directory")) {
hide_empty_directories = 1;
continue;
}
if (!strcmp(arg, "-u") || !strcmp(arg, "--unmerged")) {
/* There's no point in showing unmerged unless
* you also show the stage information.

Просмотреть файл

@ -174,7 +174,9 @@ int main(int argc, char **argv)
char *dotdot;
if (as_is) {
show_file(arg);
if (show_file(arg) && as_is < 2)
if (lstat(arg, &st) < 0)
die("'%s': %s", arg, strerror(errno));
continue;
}
if (!strcmp(arg,"-n")) {
@ -194,7 +196,7 @@ int main(int argc, char **argv)
if (*arg == '-') {
if (!strcmp(arg, "--")) {
as_is = 1;
as_is = 2;
/* Pass on the "--" if we show anything but files.. */
if (filter & (DO_FLAGS | DO_REVS))
show_file(arg);

Просмотреть файл

@ -649,7 +649,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
/* If we didn't have a "--", all filenames must exist */
for (j = i; j < argc; j++) {
if (lstat(argv[j], &st) < 0)
die("'%s': %s", arg, strerror(errno));
die("'%s': %s", argv[j], strerror(errno));
}
revs->prune_data = get_pathspec(revs->prefix, argv + i);
break;