diff options
author | Junio C Hamano <gitster@pobox.com> | 2009-05-20 18:59:09 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-05-20 18:59:09 -0700 |
commit | 065b0702f748b50e69d67609ace2632ce04b79a1 (patch) | |
tree | 6a78474d618eb083713429dc064c1c8e07e6382c | |
parent | d00e364de99d51bb76e437820e23cfa820417ec5 (diff) | |
parent | e701fadb9e0e51a6811690d95a53bd1f5b6fad86 (diff) | |
download | git-065b0702f748b50e69d67609ace2632ce04b79a1.tar.gz git-065b0702f748b50e69d67609ace2632ce04b79a1.tar.xz |
Merge branch 'maint'
* maint:
grep: fix word-regexp colouring
completion: use git rev-parse to detect bare repos
Cope better with a _lot_ of packs
for-each-ref: fix segfault in copy_email
-rw-r--r-- | builtin-for-each-ref.c | 7 | ||||
-rwxr-xr-x | contrib/completion/git-completion.bash | 2 | ||||
-rw-r--r-- | grep.c | 5 | ||||
-rw-r--r-- | sha1_file.c | 6 |
4 files changed, 17 insertions, 3 deletions
diff --git a/builtin-for-each-ref.c b/builtin-for-each-ref.c index 91e8f95fd..d091e04af 100644 --- a/builtin-for-each-ref.c +++ b/builtin-for-each-ref.c @@ -339,8 +339,11 @@ static const char *copy_name(const char *buf) static const char *copy_email(const char *buf) { const char *email = strchr(buf, '<'); - const char *eoemail = strchr(email, '>'); - if (!email || !eoemail) + const char *eoemail; + if (!email) + return ""; + eoemail = strchr(email, '>'); + if (!eoemail) return ""; return xmemdupz(email, eoemail + 1 - email); } diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index ba13c4948..0c8bb536c 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -132,7 +132,7 @@ __git_ps1 () local c if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then - if [ "true" = "$(git config --bool core.bare 2>/dev/null)" ]; then + if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then c="BARE:" else b="GIT_DIR!" @@ -305,6 +305,7 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol, { int hit = 0; int saved_ch = 0; + const char *start = bol; if ((p->token != GREP_PATTERN) && ((p->token == GREP_PATTERN_HEAD) != (ctx == GREP_CONTEXT_HEAD))) @@ -365,6 +366,10 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol, } if (p->token == GREP_PATTERN_HEAD && saved_ch) *eol = saved_ch; + if (hit) { + pmatch[0].rm_so += bol - start; + pmatch[0].rm_eo += bol - start; + } return hit; } diff --git a/sha1_file.c b/sha1_file.c index e5dec8d3c..e73cd4fc0 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -720,6 +720,8 @@ static int open_packed_git_1(struct packed_git *p) return error("packfile %s index unavailable", p->pack_name); p->pack_fd = open(p->pack_name, O_RDONLY); + while (p->pack_fd < 0 && errno == EMFILE && unuse_one_window(p, -1)) + p->pack_fd = open(p->pack_name, O_RDONLY); if (p->pack_fd < 0 || fstat(p->pack_fd, &st)) return -1; @@ -937,6 +939,8 @@ static void prepare_packed_git_one(char *objdir, int local) sprintf(path, "%s/pack", objdir); len = strlen(path); dir = opendir(path); + while (!dir && errno == EMFILE && unuse_one_window(packed_git, -1)) + dir = opendir(path); if (!dir) { if (errno != ENOENT) error("unable to open object pack directory: %s: %s", @@ -2339,6 +2343,8 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen, filename = sha1_file_name(sha1); fd = create_tmpfile(tmpfile, sizeof(tmpfile), filename); + while (fd < 0 && errno == EMFILE && unuse_one_window(packed_git, -1)) + fd = create_tmpfile(tmpfile, sizeof(tmpfile), filename); if (fd < 0) { if (errno == EACCES) return error("insufficient permission for adding an object to repository database %s\n", get_object_directory()); |