chiark
/
gitweb
/
~mdw
/
tig
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5699e0c
)
Grab path to the git directory; use it when listing untracked files
author
Jonas Fonseca
<fonseca@diku.dk>
Sat, 2 Jun 2007 16:49:24 +0000
(18:49 +0200)
committer
Jonas Fonseca
<fonseca@diku.dk>
Sat, 2 Jun 2007 17:25:28 +0000
(19:25 +0200)
tig.c
patch
|
blob
|
blame
|
history
diff --git
a/tig.c
b/tig.c
index 371377af2fed91235113ecac4cf945e8f85ca569..4150696800462c9bb442864b664b1d06931aa46c 100644
(file)
--- a/
tig.c
+++ b/
tig.c
@@
-27,10
+27,11
@@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <unistd.h>
#include <time.h>
-#include <sys/types.h>
#include <regex.h>
#include <locale.h>
#include <regex.h>
#include <locale.h>
@@
-421,6
+422,7
@@
static char opt_codeset[20] = "UTF-8";
static iconv_t opt_iconv = ICONV_NONE;
static char opt_search[SIZEOF_STR] = "";
static char opt_cdup[SIZEOF_STR] = "";
static iconv_t opt_iconv = ICONV_NONE;
static char opt_search[SIZEOF_STR] = "";
static char opt_cdup[SIZEOF_STR] = "";
+static char opt_git_dir[SIZEOF_STR] = "";
enum option_type {
OPT_NONE,
enum option_type {
OPT_NONE,
@@
-2903,9
+2905,7
@@
error_out:
#define STATUS_DIFF_INDEX_CMD "git diff-index -z --cached HEAD"
#define STATUS_DIFF_FILES_CMD "git diff-files -z"
#define STATUS_LIST_OTHER_CMD \
#define STATUS_DIFF_INDEX_CMD "git diff-index -z --cached HEAD"
#define STATUS_DIFF_FILES_CMD "git diff-files -z"
#define STATUS_LIST_OTHER_CMD \
- "_git_exclude=$(git rev-parse --git-dir)/info/exclude;" \
- "test -f \"$_git_exclude\" && exclude=\"--exclude-from=$_git_exclude\";" \
- "git ls-files -z --others --exclude-per-directory=.gitignore \"$exclude\"" \
+ "git ls-files -z --others --exclude-per-directory=.gitignore"
/* First parse staged info using git-diff-index(1), then parse unstaged
* info using git-diff-files(1), and finally untracked files using
/* First parse staged info using git-diff-index(1), then parse unstaged
* info using git-diff-files(1), and finally untracked files using
@@
-2913,6
+2913,9
@@
error_out:
static bool
status_open(struct view *view)
{
static bool
status_open(struct view *view)
{
+ struct stat statbuf;
+ char exclude[SIZEOF_STR];
+ char cmd[SIZEOF_STR];
size_t i;
for (i = 0; i < view->lines; i++)
size_t i;
for (i = 0; i < view->lines; i++)
@@
-2924,9
+2927,22
@@
status_open(struct view *view)
if (!realloc_lines(view, view->line_size + 6))
return FALSE;
if (!realloc_lines(view, view->line_size + 6))
return FALSE;
+ if (!string_format(exclude, "%s/info/exclude", opt_git_dir))
+ return FALSE;
+
+ string_copy(cmd, STATUS_LIST_OTHER_CMD);
+
+ if (stat(exclude, &statbuf) >= 0) {
+ size_t cmdsize = strlen(cmd);
+
+ if (!string_format_from(cmd, &cmdsize, " %s", "--exclude-from=") ||
+ sq_quote(cmd, cmdsize, exclude) >= sizeof(cmd))
+ return FALSE;
+ }
+
if (!status_run(view, STATUS_DIFF_INDEX_CMD, TRUE, LINE_STAT_STAGED) ||
!status_run(view, STATUS_DIFF_FILES_CMD, TRUE, LINE_STAT_UNSTAGED) ||
if (!status_run(view, STATUS_DIFF_INDEX_CMD, TRUE, LINE_STAT_STAGED) ||
!status_run(view, STATUS_DIFF_FILES_CMD, TRUE, LINE_STAT_UNSTAGED) ||
- !status_run(view,
STATUS_LIST_OTHER_CMD
, FALSE, LINE_STAT_UNTRACKED))
+ !status_run(view,
cmd
, FALSE, LINE_STAT_UNTRACKED))
return FALSE;
return TRUE;
return FALSE;
return TRUE;
@@
-4061,15
+4077,19
@@
load_repo_config(void)
static int
read_repo_info(char *name, size_t namelen, char *value, size_t valuelen)
{
static int
read_repo_info(char *name, size_t namelen, char *value, size_t valuelen)
{
- if (!opt_cdup[0])
+ if (!opt_git_dir[0])
+ string_ncopy(opt_git_dir, name, namelen);
+ else
string_ncopy(opt_cdup, name, namelen);
return OK;
}
string_ncopy(opt_cdup, name, namelen);
return OK;
}
+/* XXX: The line outputted by "--show-cdup" can be empty so the option
+ * must be the last one! */
static int
load_repo_info(void)
{
static int
load_repo_info(void)
{
- return read_properties(popen("git rev-parse --show-cdup", "r"),
+ return read_properties(popen("git rev-parse --
git-dir --
show-cdup", "r"),
"=", read_repo_info);
}
"=", read_repo_info);
}