From 0717e57ff46201ff04e7d62cda8677e174a83be6 Mon Sep 17 00:00:00 2001 From: Roman Perepelitsa Date: Sun, 14 Jun 2020 10:29:29 +0200 Subject: [PATCH] Squashed 'gitstatus/' changes from 1c74c8db..0d23fbd1 0d23fbd1 comments 9c19c9c4 fix a typo in install that prevents the locally built gitstatusd from being used 92fd143f doc cleanup git-subtree-dir: gitstatus git-subtree-split: 0d23fbd117ad6afe52fdbd96d08cf38f941be4d3 --- README.md | 12 ++++++------ gitstatus.prompt.sh | 2 +- install | 2 +- src/dir.cc | 12 +++++++----- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 291f89bf..cbf29c3a 100644 --- a/README.md +++ b/README.md @@ -103,9 +103,9 @@ function my_set_prompt() { if gitstatus_query MY && [[ $VCS_STATUS_RESULT == ok-sync ]]; then RPROMPT=${${VCS_STATUS_LOCAL_BRANCH:-@${VCS_STATUS_COMMIT}}//\%/%%} # escape % - (( $VCS_STATUS_NUM_STAGED )) && RPROMPT+='+' - (( $VCS_STATUS_NUM_UNSTAGED )) && RPROMPT+='!' - (( $VCS_STATUS_NUM_UNTRACKED )) && RPROMPT+='?' + (( VCS_STATUS_NUM_STAGED )) && RPROMPT+='+' + (( VCS_STATUS_NUM_UNSTAGED )) && RPROMPT+='!' + (( VCS_STATUS_NUM_UNTRACKED )) && RPROMPT+='?' fi setopt no_prompt_{bang,subst} prompt_percent # enable/disable correct prompt expansions @@ -204,9 +204,9 @@ function my_set_prompt() { else PS1+=" @${VCS_STATUS_COMMIT//\\/\\\\}" # escape backslash fi - [[ "$VCS_STATUS_HAS_STAGED" == 1 ]] && PS1+='+' - [[ "$VCS_STATUS_HAS_UNSTAGED" == 1 ]] && PS1+='!' - [[ "$VCS_STATUS_HAS_UNTRACKED" == 1 ]] && PS1+='?' + (( VCS_STATUS_HAS_STAGED" )) && PS1+='+' + (( VCS_STATUS_HAS_UNSTAGED" )) && PS1+='!' + (( VCS_STATUS_HAS_UNTRACKED" )) && PS1+='?' fi PS1+='\n\$ ' diff --git a/gitstatus.prompt.sh b/gitstatus.prompt.sh index b2c67c8d..9c1a2138 100644 --- a/gitstatus.prompt.sh +++ b/gitstatus.prompt.sh @@ -94,7 +94,7 @@ shopt -s promptvars # # Example: # -# user@host ~/projects/skynet master+! +# user@host ~/projects/skynet master ⇡42 # $ █ PS1='\[\033[01;32m\]\u@\h\[\033[00m\] ' # green user@host PS1+='\[\033[01;34m\]\w\[\033[00m\]' # blue current working directory diff --git a/install b/install index 4303129b..ec442ed9 100755 --- a/install +++ b/install @@ -131,7 +131,7 @@ END >&2 echo "[gitstatus] error: GITSTATUS_DAEMON is not absolute path: $daemon" return 1 fi - if [ -z "$daemon" && -e "$gitstatus_dir"/usrbin/gitstatusd ]; then + if [ -z "$daemon" -a -e "$gitstatus_dir"/usrbin/gitstatusd ]; then daemon="$gitstatus_dir"/usrbin/gitstatusd fi if [ -n "$daemon" ]; then diff --git a/src/dir.cc b/src/dir.cc index 14bc6ac4..1817e1d3 100644 --- a/src/dir.cc +++ b/src/dir.cc @@ -116,16 +116,18 @@ bool ListDir(int dir_fd, Arena& arena, std::vector& entries, bool precomp entries.clear(); return false; } - if (n == 0) break; for (int pos = 0; pos < n;) { auto* ent = reinterpret_cast(buf + pos); if (!Dots(ent->d_name)) entries.push_back(ent->d_name); pos += ent->d_reclen; - // It's tempting to bail here if n + sizeof(linux_dirent64) + 512 <= n. After all, there - // was enough space for another entry but SYS_getdents64 didn't write it, so this must be - // the end of the directory listing, right? Unfortuatenly, no. SYS_getdents64 is finicky. - // It sometimes writes a partial list of entries even if the full list would fit. } + if (n == 0) break; + // The following optimization relies on SYS_getdents64 always returning as many + // entries as would fit. This is not guaranteed by the specification and I don't + // know if this is true in practice. The optimization has no measurable effect on + // gitstatus performance, so it's turned off. + // + // if (n + sizeof(linux_dirent64) + 512 <= kBufSize) break; } if (case_sensitive) {