@@ -485,6 +485,10 @@ function! VimProjectAddChangeDetails(job, data, ...)
485
485
if error
486
486
return
487
487
endif
488
+ if &modifiable == 0
489
+ set modifiable
490
+ normal ! ggdG
491
+ endif
488
492
489
493
if has (' nvim' )
490
494
call append (0 , a: data )
@@ -1093,11 +1097,12 @@ endfunction
1093
1097
1094
1098
function ! s: GetChangedFileDisplay (file , prefix = ' ' )
1095
1099
let sign = s: GetFileChangeSign (a: file )
1100
+ " sign_mark is used by s:HighlightFiles
1096
1101
let sign_mark = ' '
1097
- if sign == ' D'
1098
- let sign_mark = ' $'
1099
- elseif sign == ' A' || sign == ' U '
1100
- let sign_mark = ' !'
1102
+ if sign == ' D'
1103
+ let sign_mark = ' $' " $ Deleted - Comment
1104
+ elseif sign == ' A' || sign == ' ? '
1105
+ let sign_mark = ' !' " ! Add or untrack - diffAdded
1101
1106
endif
1102
1107
let splitter = ' |'
1103
1108
@@ -1129,21 +1134,43 @@ endfunction
1129
1134
1130
1135
function ! s: UpdateChangelist (run_git = 0 )
1131
1136
if a: run_git
1132
- let s: unmerged_files = project#RunShellCmd (' git diff --name-status --diff-filter=U' )
1133
- let s: changed_files = project#RunShellCmd (' git diff --name-status --diff-filter=u' )
1134
- let s: staged_files = project#RunShellCmd (' git diff --staged --name-status --diff-filter=u' )
1135
- if ! empty (s: changed_files ) && s: changed_files [0 ] = ~ ' Not a git repository'
1136
- return 0
1137
- endif
1138
- let s: untracked_files = s: AddUntrackedPrefix (
1139
- \p roject#RunShellCmd (' git ls-files --exclude-standard --others' ))
1137
+ call s: ParseGitStatus ()
1140
1138
endif
1141
1139
1142
1140
call s: UpdatePresetChangelist ()
1143
1141
call s: UpdateChangelistDisplay ()
1144
1142
return 1
1145
1143
endfunction
1146
1144
1145
+ function ! s: ParseGitStatus ()
1146
+ let output = project#RunShellCmd (' git status --porcelain' )
1147
+ let s: staged_files = []
1148
+ let s: changed_files = []
1149
+ let s: untracked_files = []
1150
+ let s: unmerged_files = []
1151
+
1152
+ for line in output
1153
+ let status = strpart (line , 0 , 2 )
1154
+ let filepath = strpart (line , 3 )
1155
+
1156
+ if status[0 ] != ' ' && status[0 ] != ' ?' && status[0 ] != ' U' " Staged files
1157
+ call add (s: staged_files , status[0 ].' ' .filepath)
1158
+ endif
1159
+
1160
+ if status[0 ] == ' ' && status[1 ] != ' ' " Changed but unstaged files
1161
+ call add (s: changed_files , status[1 ].' ' .filepath)
1162
+ endif
1163
+
1164
+ if status == ' ??' " Untracked files
1165
+ call add (s: untracked_files , ' ? ' .filepath)
1166
+ endif
1167
+
1168
+ if status == ' UU' " Merge conflicts
1169
+ call add (s: unmerged_files , ' U ' .filepath)
1170
+ endif
1171
+ endfor
1172
+ endfunction
1173
+
1147
1174
function ! s: IsSpecialFolder (folder)
1148
1175
return s: IsStagedFolder (a: folder )
1149
1176
\ || s: IsUntrackedFolder (a: folder )
0 commit comments