From 2e5a561bce263fee8f1703c5eb821703f8500a2a Mon Sep 17 00:00:00 2001 From: Jerome Reybert <jreybert@gmail.com> Date: Tue, 10 Nov 2015 14:08:06 +0100 Subject: [PATCH] autoload/magit/state.vim: rework g:magit_warning_max_lines (at least it does something useful now) --- autoload/magit/state.vim | 40 ++++++++++++++++++++++++++++++++++++---- plugin/magit.vim | 12 +----------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/autoload/magit/state.vim b/autoload/magit/state.vim index b65276a..1be452b 100644 --- a/autoload/magit/state.vim +++ b/autoload/magit/state.vim @@ -75,6 +75,7 @@ let s:hunk_template = { " s:diff_template: template for diff object (nested in s:file_template) " WARNING: this variable must be deepcopy()'ied let s:diff_template = { +\ 'len': 0, \ 'header': [], \ 'hunks': [s:hunk_template], \} @@ -139,6 +140,23 @@ function! magit#state#file_get_filename_header() dict endif endfunction +function! magit#state#check_max_lines(file) dict + let total_lines = self.nb_diff_lines + a:file.diff.len + if ( total_lines > g:magit_warning_max_lines && b:magit_warning_max_lines_answered == 0 ) + echohl WarningMsg + let ret = input("There are " . total_lines . " diff lines to display. Do you want to display all diffs? y(es) / N(o) : ", "") + echohl None + let b:magit_warning_max_lines_answered = 1 + if ( ret !~? '^y\%(e\%(s\)\?\)\?$' ) + call a:file.set_visible(0) + let a:file.diff.len = 0 + let b:magit_default_show_all_files = 0 + return 1 + endif + endif + return 0 +endfunction + " magit#state#add_file: method to add a file with all its " properties (filename, exists, status, header and hunks) " param[in] mode: can be staged or unstaged @@ -166,9 +184,15 @@ function! magit#state#add_file(mode, status, filename, depth) dict endif let diff_list=magit#git#git_sub_summary(magit#utils#add_quotes(a:filename), \ a:mode) + let file.diff.len = len(diff_list) + + if ( self.check_max_lines(file) != 0 ) + return + endif + let file.diff.hunks[0].header = '' let file.diff.hunks[0].lines = diff_list - let self.nb_diff_lines += len(diff_list) + let self.nb_diff_lines += file.diff.len elseif ( a:status == '?' && isdirectory(a:filename) == 1 ) let file.status = 'N' let file.dir = 1 @@ -193,12 +217,18 @@ function! magit#state#add_file(mode, status, filename, depth) dict " match( let diff_list=magit#git#git_diff(magit#utils#add_quotes(a:filename), \ a:status, a:mode) - while ( line < len(diff_list) && diff_list[line] !~ "^@.*" ) + let file.diff.len = len(diff_list) + + if ( self.check_max_lines(file) != 0 ) + return + endif + + while ( line < file.diff.len && diff_list[line] !~ "^@.*" ) call add(file.diff.header, diff_list[line]) let line += 1 endwhile - if ( line < len(diff_list) ) + if ( line < file.diff.len ) let hunk = file.diff.hunks[0] let hunk.header = diff_list[line] @@ -212,8 +242,9 @@ function! magit#state#add_file(mode, status, filename, depth) dict call add(hunk.lines, diff_line) endfor endif - let self.nb_diff_lines += len(diff_list) + let self.nb_diff_lines += file.diff.len endif + endfunction " magit#state#update: update self.dict @@ -301,6 +332,7 @@ let magit#state#state = { \ 'get_files': function("magit#state#get_files"), \ 'add_file': function("magit#state#add_file"), \ 'set_files_visible': function("magit#state#set_files_visible"), + \ 'check_max_lines': function("magit#state#check_max_lines"), \ 'update': function("magit#state#update"), \ 'dict': { 'staged': {}, 'unstaged': {}}, \ } diff --git a/plugin/magit.vim b/plugin/magit.vim index b4b8f48..3a28cd7 100644 --- a/plugin/magit.vim +++ b/plugin/magit.vim @@ -542,16 +542,6 @@ function! magit#update_buffer() call s:state.update() - if ( s:state.nb_diff_lines > g:magit_warning_max_lines && b:magit_warning_answered_yes == 0 ) - let ret = input("There are " . s:state.nb_diff_lines . " diff lines to display. Do you want to display all diffs? y(es) / N(o) : ", "") - if ( ret !~? '^y\%(e\%(s\)\?\)\?$' ) - let b:magit_default_show_all_files = 0 - call s:state.set_files_visible(0) - else - let b:magit_warning_answered_yes = 1 - endif - endif - for section in g:magit_default_sections try let func = s:mg_display_functions[section] @@ -605,7 +595,7 @@ function! magit#show_magit(display, ...) let b:magit_default_show_all_files = g:magit_default_show_all_files let b:magit_default_fold_level = g:magit_default_fold_level - let b:magit_warning_answered_yes = 0 + let b:magit_warning_max_lines_answered = 0 if ( a:0 > 0 ) let b:magit_default_show_all_files = a:1 -- GitLab