Patch 9.0.0270
Problem: Some values of 'path' and 'tags' do not work in the tiny version.
Solution: Graduate the +path_extra feature.
Files: runtime/doc/editing.txt, runtime/doc/options.txt,
runtime/doc/various.txt, src/evalfunc.c, src/findfile.c,
src/tag.c, src/version.c, src/errors.h, src/feature.h
*** ../vim-9.0.0269/runtime/doc/editing.txt 2022-08-25 16:02:09.669816438
+0100
--- runtime/doc/editing.txt 2022-08-25 18:00:38.258783212 +0100
***************
*** 1703,1710 ****
==============================================================================
11. File Searching *file-searching*
- {not available when compiled without the |+path_extra| feature}
-
The file searching is currently used for the 'path', 'cdpath' and 'tags'
options, for |finddir()| and |findfile()|. Other commands use |wildcards|
which is slightly different.
--- 1703,1708 ----
*** ../vim-9.0.0269/runtime/doc/options.txt 2022-08-25 16:02:09.673816447
+0100
--- runtime/doc/options.txt 2022-08-25 18:01:25.310727197 +0100
***************
*** 5921,5927 ****
"http://www.vim.org" will make ":find index.html" work.
- Search upwards and downwards in a directory tree using "*", "**" and
";". See |file-searching| for info and syntax.
- {not available when compiled without the |+path_extra| feature}
- Careful with '\' characters, type two to get one in the option: >
:set path=.,c:\\include
< Or just use '/' instead: >
--- 5949,5954 ----
***************
*** 7972,7979 ****
a directory tree. See |file-searching|. E.g., "/lib/**/tags" will
find all files named "tags" below "/lib". The filename itself cannot
contain wildcards, it is used as-is. E.g., "/lib/**/tags?" will find
! files called "tags?". {not available when compiled without the
! |+path_extra| feature}
The |tagfiles()| function can be used to get a list of the file names
actually used.
If Vim was compiled with the |+emacs_tags| feature, Emacs-style tag
--- 8000,8006 ----
a directory tree. See |file-searching|. E.g., "/lib/**/tags" will
find all files named "tags" below "/lib". The filename itself cannot
contain wildcards, it is used as-is. E.g., "/lib/**/tags?" will find
! files called "tags?".
The |tagfiles()| function can be used to get a list of the file names
actually used.
If Vim was compiled with the |+emacs_tags| feature, Emacs-style tag
*** ../vim-9.0.0269/runtime/doc/various.txt 2022-08-25 16:02:09.673816447
+0100
--- runtime/doc/various.txt 2022-08-25 18:01:59.862684191 +0100
***************
*** 433,439 ****
check the actual size of a Number.
m *+ole* Win32 GUI only: |ole-interface|
N *+packages* Loading |packages|
! N *+path_extra* Up/downwards search in 'path' and 'tags'
m *+perl* Perl interface |perl|
m *+perl/dyn* Perl interface |perl-dynamic| |/dyn|
N *+persistent_undo* Persistent undo |undo-persistence|
--- 433,440 ----
check the actual size of a Number.
m *+ole* Win32 GUI only: |ole-interface|
N *+packages* Loading |packages|
! T *+path_extra* Up/downwards search in 'path' and 'tags' Always
! enabled since 9.0.0270
m *+perl* Perl interface |perl|
m *+perl/dyn* Perl interface |perl-dynamic| |/dyn|
N *+persistent_undo* Persistent undo |undo-persistence|
*** ../vim-9.0.0269/src/evalfunc.c 2022-08-25 17:39:26.805017714 +0100
--- src/evalfunc.c 2022-08-25 18:03:21.926576288 +0100
***************
*** 5954,5966 ****
0
#endif
},
! {"path_extra",
! #ifdef FEAT_PATH_EXTRA
! 1
! #else
! 0
! #endif
! },
{"perl",
#if defined(FEAT_PERL) && !defined(DYNAMIC_PERL)
1
--- 5954,5960 ----
0
#endif
},
! {"path_extra", 1},
{"perl",
#if defined(FEAT_PERL) && !defined(DYNAMIC_PERL)
1
*** ../vim-9.0.0269/src/findfile.c 2022-08-25 16:02:09.677816456 +0100
--- src/findfile.c 2022-08-25 18:07:22.870222209 +0100
***************
*** 67,75 ****
// the fix part (no wildcards) and the part containing the wildcards
// of the search path
char_u *ffs_fix_path;
- #ifdef FEAT_PATH_EXTRA
char_u *ffs_wc_path;
- #endif
// files/dirs found in the above directory, matched by the first wildcard
// of wc_part
--- 67,73 ----
***************
*** 97,107 ****
{
struct ff_visited *ffv_next;
- #ifdef FEAT_PATH_EXTRA
// Visited directories are different if the wildcard string are
// different. So we have to save it.
char_u *ffv_wc_path;
! #endif
// for unix use inode etc for comparison (needed because of links), else
// use filename.
#ifdef UNIX
--- 95,104 ----
{
struct ff_visited *ffv_next;
// Visited directories are different if the wildcard string are
// different. So we have to save it.
char_u *ffv_wc_path;
!
// for unix use inode etc for comparison (needed because of links), else
// use filename.
#ifdef UNIX
***************
*** 173,193 ****
char_u *ffsc_file_to_search;
char_u *ffsc_start_dir;
char_u *ffsc_fix_path;
- #ifdef FEAT_PATH_EXTRA
char_u *ffsc_wc_path;
int ffsc_level;
char_u **ffsc_stopdirs_v;
- #endif
int ffsc_find_what;
int ffsc_tagfile;
} ff_search_ctx_T;
// locally needed functions
- #ifdef FEAT_PATH_EXTRA
static int ff_check_visited(ff_visited_T **, char_u *, char_u *);
- #else
- static int ff_check_visited(ff_visited_T **, char_u *);
- #endif
static void vim_findfile_free_visited(void *search_ctx_arg);
static void vim_findfile_free_visited_list(ff_visited_list_hdr_T
**list_headp);
static void ff_free_visited_list(ff_visited_T *vl);
--- 170,184 ----
***************
*** 197,210 ****
static ff_stack_T *ff_pop(ff_search_ctx_T *search_ctx);
static void ff_clear(ff_search_ctx_T *search_ctx);
static void ff_free_stack_element(ff_stack_T *stack_ptr);
- #ifdef FEAT_PATH_EXTRA
static ff_stack_T *ff_create_stack_element(char_u *, char_u *, int, int);
- #else
- static ff_stack_T *ff_create_stack_element(char_u *, int, int);
- #endif
- #ifdef FEAT_PATH_EXTRA
static int ff_path_in_stoplist(char_u *, int, char_u **);
- #endif
static char_u *ff_expand_buffer = NULL; // used for expanding filenames
--- 188,195 ----
***************
*** 306,314 ****
int tagfile, // expanding names of tags files
char_u *rel_fname) // file name to use for "."
{
- #ifdef FEAT_PATH_EXTRA
char_u *wc_part;
- #endif
ff_stack_T *sptr;
ff_search_ctx_T *search_ctx;
--- 291,297 ----
***************
*** 409,415 ****
#endif
}
- #ifdef FEAT_PATH_EXTRA
/*
* If stopdirs are given, split them into an array of pointers.
* If this fails (mem allocation), there is no upward search at all or a
--- 392,397 ----
***************
*** 464,472 ****
search_ctx->ffsc_stopdirs_v[dircount-1] = NULL;
}
}
- #endif
- #ifdef FEAT_PATH_EXTRA
search_ctx->ffsc_level = level;
/*
--- 446,452 ----
***************
*** 531,537 ****
goto error_return;
}
else
- #endif
search_ctx->ffsc_fix_path = vim_strsave(path);
if (search_ctx->ffsc_start_dir == NULL)
--- 511,516 ----
***************
*** 565,571 ****
STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
add_pathsep(ff_expand_buffer);
}
- #ifdef FEAT_PATH_EXTRA
else
{
char_u *p = gettail(search_ctx->ffsc_fix_path);
--- 544,549 ----
***************
*** 612,626 ****
search_ctx->ffsc_wc_path = temp;
}
}
- #endif
vim_free(buf);
}
sptr = ff_create_stack_element(ff_expand_buffer,
! #ifdef FEAT_PATH_EXTRA
! search_ctx->ffsc_wc_path,
! #endif
! level, 0);
if (sptr == NULL)
goto error_return;
--- 590,600 ----
search_ctx->ffsc_wc_path = temp;
}
}
vim_free(buf);
}
sptr = ff_create_stack_element(ff_expand_buffer,
! search_ctx->ffsc_wc_path, level, 0);
if (sptr == NULL)
goto error_return;
***************
*** 643,649 ****
return NULL;
}
- #if defined(FEAT_PATH_EXTRA) || defined(PROTO)
/*
* Get the stopdir string. Check that ';' is not escaped.
*/
--- 617,622 ----
***************
*** 672,678 ****
r_ptr = NULL;
return r_ptr;
}
- #endif
/*
* Clean up the given search context. Can handle a NULL pointer.
--- 645,650 ----
***************
*** 704,713 ****
vim_findfile(void *search_ctx_arg)
{
char_u *file_path;
- #ifdef FEAT_PATH_EXTRA
char_u *rest_of_wildcards;
char_u *path_end = NULL;
- #endif
ff_stack_T *stackp;
int len;
int i;
--- 676,683 ----
***************
*** 727,744 ****
if ((file_path = alloc(MAXPATHL)) == NULL)
return NULL;
- #ifdef FEAT_PATH_EXTRA
// store the end of the start dir -- needed for upward search
if (search_ctx->ffsc_start_dir != NULL)
path_end = &search_ctx->ffsc_start_dir[
STRLEN(search_ctx->ffsc_start_dir)];
- #endif
- #ifdef FEAT_PATH_EXTRA
// upward search loop
for (;;)
{
- #endif
// downward search loop
for (;;)
{
--- 697,710 ----
***************
*** 774,784 ****
if (stackp->ffs_filearray == NULL
&& ff_check_visited(&search_ctx->ffsc_dir_visited_list
->ffvl_visited_list,
! stackp->ffs_fix_path
! #ifdef FEAT_PATH_EXTRA
! , stackp->ffs_wc_path
! #endif
! ) == FAIL)
{
#ifdef FF_VERBOSE
if (p_verbose >= 5)
--- 740,746 ----
if (stackp->ffs_filearray == NULL
&& ff_check_visited(&search_ctx->ffsc_dir_visited_list
->ffvl_visited_list,
! stackp->ffs_fix_path, stackp->ffs_wc_path) == FAIL)
{
#ifdef FF_VERBOSE
if (p_verbose >= 5)
***************
*** 859,865 ****
goto fail;
}
- #ifdef FEAT_PATH_EXTRA
rest_of_wildcards = stackp->ffs_wc_path;
if (*rest_of_wildcards != NUL)
{
--- 821,826 ----
***************
*** 919,925 ****
if (vim_ispathsep(*rest_of_wildcards))
rest_of_wildcards++;
}
- #endif
/*
* Expand wildcards like "*" and "$VAR".
--- 880,885 ----
***************
*** 947,964 ****
stackp->ffs_filearray_cur = 0;
stackp->ffs_stage = 0;
}
- #ifdef FEAT_PATH_EXTRA
else
rest_of_wildcards = &stackp->ffs_wc_path[
STRLEN(stackp->ffs_wc_path)];
- #endif
if (stackp->ffs_stage == 0)
{
// this is the first time we work on this directory
- #ifdef FEAT_PATH_EXTRA
if (*rest_of_wildcards == NUL)
- #endif
{
/*
* We don't have further wildcards to expand, so we have to
--- 907,920 ----
***************
*** 1008,1030 ****
== mch_isdir(file_path)))))
#ifndef FF_VERBOSE
&& (ff_check_visited(
!
&search_ctx->ffsc_visited_list->ffvl_visited_list,
! file_path
! #ifdef FEAT_PATH_EXTRA
! , (char_u *)""
! #endif
! ) == OK)
#endif
)
{
#ifdef FF_VERBOSE
if (ff_check_visited(
!
&search_ctx->ffsc_visited_list->ffvl_visited_list,
! file_path
! #ifdef FEAT_PATH_EXTRA
! , (char_u *)""
! #endif
! ) == FAIL)
{
if (p_verbose >= 5)
{
--- 964,980 ----
== mch_isdir(file_path)))))
#ifndef FF_VERBOSE
&& (ff_check_visited(
! &search_ctx->ffsc_visited_list
! ->ffvl_visited_list,
! file_path, (char_u *)"") == OK)
#endif
)
{
#ifdef FF_VERBOSE
if (ff_check_visited(
! &search_ctx->ffsc_visited_list
! ->ffvl_visited_list,
! file_path, (char_u *)"") == FAIL)
{
if (p_verbose >= 5)
{
***************
*** 1074,1080 ****
}
}
}
- #ifdef FEAT_PATH_EXTRA
else
{
/*
--- 1024,1029 ----
***************
*** 1094,1105 ****
stackp->ffs_level - 1, 0));
}
}
- #endif
stackp->ffs_filearray_cur = 0;
stackp->ffs_stage = 1;
}
- #ifdef FEAT_PATH_EXTRA
/*
* if wildcards contains '**' we have to descent till we reach the
* leaves of the directory tree.
--- 1043,1052 ----
***************
*** 1119,1132 ****
stackp->ffs_wc_path, stackp->ffs_level - 1, 1));
}
}
- #endif
// we are done with the current directory
ff_free_stack_element(stackp);
}
- #ifdef FEAT_PATH_EXTRA
// If we reached this, we didn't find anything downwards.
// Let's check if we should do an upward search.
if (search_ctx->ffsc_start_dir
--- 1066,1077 ----
***************
*** 1173,1179 ****
else
break;
}
- #endif
fail:
vim_free(file_path);
--- 1118,1123 ----
***************
*** 1222,1230 ****
while (vl != NULL)
{
vp = vl->ffv_next;
- #ifdef FEAT_PATH_EXTRA
vim_free(vl->ffv_wc_path);
- #endif
vim_free(vl);
vl = vp;
}
--- 1166,1172 ----
***************
*** 1298,1304 ****
return retptr;
}
- #ifdef FEAT_PATH_EXTRA
/*
* check if two wildcard paths are equal. Returns TRUE or FALSE.
* They are equal if:
--- 1240,1245 ----
***************
*** 1339,1345 ****
}
return s1[i] == s2[j];
}
- #endif
/*
* maintains the list of already visited files and dirs
--- 1280,1285 ----
***************
*** 1353,1363 ****
static int
ff_check_visited(
ff_visited_T **visited_list,
! char_u *fname
! #ifdef FEAT_PATH_EXTRA
! , char_u *wc_path
! #endif
! )
{
ff_visited_T *vp;
#ifdef UNIX
--- 1293,1300 ----
static int
ff_check_visited(
ff_visited_T **visited_list,
! char_u *fname,
! char_u *wc_path)
{
ff_visited_T *vp;
#ifdef UNIX
***************
*** 1397,1406 ****
fnamecmp(vp->ffv_fname, ff_expand_buffer) == 0
)
{
- #ifdef FEAT_PATH_EXTRA
// are the wildcard parts equal
if (ff_wc_equal(vp->ffv_wc_path, wc_path) == TRUE)
- #endif
// already visited
return FAIL;
}
--- 1334,1341 ----
***************
*** 1429,1440 ****
#ifdef UNIX
}
#endif
- #ifdef FEAT_PATH_EXTRA
if (wc_path != NULL)
vp->ffv_wc_path = vim_strsave(wc_path);
else
vp->ffv_wc_path = NULL;
- #endif
vp->ffv_next = *visited_list;
*visited_list = vp;
--- 1364,1373 ----
***************
*** 1449,1457 ****
static ff_stack_T *
ff_create_stack_element(
char_u *fix_part,
- #ifdef FEAT_PATH_EXTRA
char_u *wc_part,
- #endif
int level,
int star_star_empty)
{
--- 1382,1388 ----
***************
*** 1474,1490 ****
fix_part = (char_u *)"";
new->ffs_fix_path = vim_strsave(fix_part);
- #ifdef FEAT_PATH_EXTRA
if (wc_part == NULL)
wc_part = (char_u *)"";
new->ffs_wc_path = vim_strsave(wc_part);
- #endif
! if (new->ffs_fix_path == NULL
! #ifdef FEAT_PATH_EXTRA
! || new->ffs_wc_path == NULL
! #endif
! )
{
ff_free_stack_element(new);
new = NULL;
--- 1405,1415 ----
fix_part = (char_u *)"";
new->ffs_fix_path = vim_strsave(fix_part);
if (wc_part == NULL)
wc_part = (char_u *)"";
new->ffs_wc_path = vim_strsave(wc_part);
! if (new->ffs_fix_path == NULL || new->ffs_wc_path == NULL)
{
ff_free_stack_element(new);
new = NULL;
***************
*** 1532,1540 ****
{
// vim_free handles possible NULL pointers
vim_free(stack_ptr->ffs_fix_path);
- #ifdef FEAT_PATH_EXTRA
vim_free(stack_ptr->ffs_wc_path);
- #endif
if (stack_ptr->ffs_filearray != NULL)
FreeWild(stack_ptr->ffs_filearray_size, stack_ptr->ffs_filearray);
--- 1457,1463 ----
***************
*** 1557,1567 ****
vim_free(search_ctx->ffsc_file_to_search);
vim_free(search_ctx->ffsc_start_dir);
vim_free(search_ctx->ffsc_fix_path);
- #ifdef FEAT_PATH_EXTRA
vim_free(search_ctx->ffsc_wc_path);
- #endif
- #ifdef FEAT_PATH_EXTRA
if (search_ctx->ffsc_stopdirs_v != NULL)
{
int i = 0;
--- 1480,1487 ----
***************
*** 1574,1592 ****
vim_free(search_ctx->ffsc_stopdirs_v);
}
search_ctx->ffsc_stopdirs_v = NULL;
- #endif
// reset everything
search_ctx->ffsc_file_to_search = NULL;
search_ctx->ffsc_start_dir = NULL;
search_ctx->ffsc_fix_path = NULL;
- #ifdef FEAT_PATH_EXTRA
search_ctx->ffsc_wc_path = NULL;
search_ctx->ffsc_level = 0;
- #endif
}
- #ifdef FEAT_PATH_EXTRA
/*
* check if the given path is in the stopdirs
* returns TRUE if yes else FALSE
--- 1494,1508 ----
***************
*** 1623,1629 ****
}
return FALSE;
}
- #endif
/*
* Find the file name "ptr[len]" in the path. Also finds directory names.
--- 1539,1544 ----
***************
*** 1873,1884 ****
buf[0] = 0;
copy_option_part(&dir, buf, MAXPATHL, " ,");
- # ifdef FEAT_PATH_EXTRA
// get the stopdir string
r_ptr = vim_findfile_stopdir(buf);
- # else
- r_ptr = NULL;
- # endif
fdip_search_ctx = vim_findfile_init(buf, ff_file_to_find,
r_ptr, 100, FALSE, find_what,
fdip_search_ctx, FALSE, rel_fname);
--- 1788,1795 ----
*** ../vim-9.0.0269/src/tag.c 2022-08-22 16:35:41.698700428 +0100
--- src/tag.c 2022-08-25 18:07:57.154168275 +0100
***************
*** 3398,3408 ****
buf[0] = NUL;
(void)copy_option_part(&tnp->tn_np, buf, MAXPATHL - 1, " ,");
- #ifdef FEAT_PATH_EXTRA
r_ptr = vim_findfile_stopdir(buf);
- #else
- r_ptr = NULL;
- #endif
// move the filename one char forward and truncate the
// filepath with a NUL
filename = gettail(buf);
--- 3398,3404 ----
*** ../vim-9.0.0269/src/version.c 2022-08-25 17:39:26.805017714 +0100
--- src/version.c 2022-08-25 18:09:53.646164617 +0100
***************
*** 448,458 ****
#else
"-packages",
#endif
- #ifdef FEAT_PATH_EXTRA
"+path_extra",
- #else
- "-path_extra",
- #endif
#ifdef FEAT_PERL
# ifdef DYNAMIC_PERL
"+perl/dyn",
--- 448,454 ----
*** ../vim-9.0.0269/src/errors.h 2022-08-25 16:02:09.677816456 +0100
--- src/errors.h 2022-08-25 18:08:15.526139046 +0100
***************
*** 849,858 ****
INIT(= N_("E341: Internal error: lalloc(0, )"));
EXTERN char e_out_of_memory_allocating_nr_bytes[]
INIT(= N_("E342: Out of memory! (allocating %lu bytes)"));
- #ifdef FEAT_PATH_EXTRA
EXTERN char
e_invalid_path_number_must_be_at_end_of_path_or_be_followed_by_str[]
INIT(= N_("E343: Invalid path: '**[number]' must be at the end of the
path or be followed by '%s'."));
- #endif
EXTERN char e_cant_find_directory_str_in_cdpath[]
INIT(= N_("E344: Can't find directory \"%s\" in cdpath"));
EXTERN char e_cant_find_file_str_in_path[]
--- 849,856 ----
*** ../vim-9.0.0269/src/feature.h 2022-08-25 16:02:09.677816456 +0100
--- src/feature.h 2022-08-25 18:08:22.106128536 +0100
***************
*** 117,122 ****
--- 117,123 ----
* +smartindent smart C code indenting when the 'si' option is
set.
* +textobjects Text objects: "vaw", "das", etc.
* +file_in_path "gf" and "<cfile>" commands.
+ * +path_extra up/downwards searching in 'path' and 'tags'.
*
* Obsolete:
* +tag_old_static Old style static tags: "file:tag file ..".
***************
*** 211,223 ****
#endif
/*
- * +path_extra up/downwards searching in 'path' and 'tags'.
- */
- #ifdef FEAT_NORMAL
- # define FEAT_PATH_EXTRA
- #endif
-
- /*
* +rightleft Right-to-left editing/typing support.
*/
#if defined(FEAT_BIG) && !defined(DISABLE_RIGHTLEFT)
--- 212,217 ----
*** ../vim-9.0.0269/src/version.c 2022-08-25 17:39:26.805017714 +0100
--- src/version.c 2022-08-25 18:09:53.646164617 +0100
***************
*** 729,730 ****
--- 725,728 ----
{ /* Add new patch number below this line */
+ /**/
+ 270,
/**/
--
Men may not be seen publicly in any kind of strapless gown.
[real standing law in Florida, United States of America]
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20220825171239.EE3191C090E%40moolenaar.net.