]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.3843: dep3patch files are not recognized v8.2.3843
authorJames McCoy <jamessan@jamessan.com>
Fri, 17 Dec 2021 20:52:57 +0000 (20:52 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 17 Dec 2021 20:52:57 +0000 (20:52 +0000)
Problem:    Dep3patch files are not recognized.
Solution:   Recognize dep3patch files by their location and content. (James
            McCoy, closes #9367)

runtime/autoload/dist/ft.vim
runtime/filetype.vim
src/testdir/test_filetype.vim
src/version.c

index a3db4ae87a895b6f431495ef715c65577e1dc3a4..366d7b009d8832759eadea59e85590894e03a890 100644 (file)
@@ -811,6 +811,23 @@ func dist#ft#Redif()
   endwhile
 endfunc
 
+" This function is called for all files under */debian/patches/*, make sure not
+" to non-dep3patch files, such as README and other text files.
+func dist#ft#Dep3patch()
+  if expand('%:t') ==# 'series'
+    return
+  endif
+
+  for ln in getline(1, 100)
+    if ln =~# '^\%(Description\|Subject\|Origin\|Bug\|Forwarded\|Author\|From\|Reviewed-by\|Acked-by\|Last-Updated\|Applied-Upstream\):'
+      setf dep3patch
+      return
+    elseif ln =~# '^---'
+      " end of headers found. stop processing
+      return
+    endif
+  endfor
+endfunc
 
 " Restore 'cpoptions'
 let &cpo = s:cpo_save
index d99527f17b87d8243a3bf5d23fc2d0ced3facf86..7740d8faa418919b27f51c0296080ab43315cf17 100644 (file)
@@ -490,6 +490,9 @@ au BufNewFile,BufRead dict.conf,.dictrc             setf dictconf
 " Dictd config
 au BufNewFile,BufRead dictd*.conf              setf dictdconf
 
+" DEP3 formatted patch files
+au BufNewFile,BufRead */debian/patches/*       call dist#ft#Dep3patch()
+
 " Diff files
 au BufNewFile,BufRead *.diff,*.rej             setf diff
 au BufNewFile,BufRead *.patch
index f4204f7e817a981d77b88d6da16a08880391c20f..cd82e3814d6d98aa99677c5b0ff3bc86aa7049bb 100644 (file)
@@ -1029,4 +1029,44 @@ func Test_fs_file()
   filetype off
 endfunc
 
+func Test_dep3patch_file()
+  filetype on
+
+  call assert_true(mkdir('debian/patches', 'p'))
+
+  " series files are not patches
+  call writefile(['Description: some awesome patch'], 'debian/patches/series')
+  split debian/patches/series
+  call assert_notequal('dep3patch', &filetype)
+  bwipe!
+
+  " diff/patch files without the right headers should still show up as ft=diff
+  call writefile([], 'debian/patches/foo.diff')
+  split debian/patches/foo.diff
+  call assert_equal('diff', &filetype)
+  bwipe!
+
+  " Files with the right headers are detected as dep3patch, even if they don't
+  " have a diff/patch extension
+  call writefile(['Subject: dep3patches'], 'debian/patches/bar')
+  split debian/patches/bar
+  call assert_equal('dep3patch', &filetype)
+  bwipe!
+
+  " Files in sub-directories are detected
+  call assert_true(mkdir('debian/patches/s390x', 'p'))
+  call writefile(['Subject: dep3patches'], 'debian/patches/s390x/bar')
+  split debian/patches/s390x/bar
+  call assert_equal('dep3patch', &filetype)
+  bwipe!
+
+  " The detection stops when seeing the "header end" marker
+  call writefile(['---', 'Origin: the cloud'], 'debian/patches/baz')
+  split debian/patches/baz
+  call assert_notequal('dep3patch', &filetype)
+  bwipe!
+
+  call delete('debian/patches', 'rf')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index d90560f9b1b518599de6226f4064465a280e5dcb..0e2a2298f324bc672de8553ad6c30d5d5d04a1d9 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3843,
 /**/
     3842,
 /**/