Reply to message «Patch 7.3.210», 
sent 22:42:42 12 June 2011, Sunday
by Bram Moolenaar:

I see some typos here:

+ If 'cscoperelative' set, then in absence of a prefix given to cscope (prefx
Missing `is' before `set'. Here should be no commas. Last word should be 
`prefix', not `prefx'.

+ is the argument to -P option of cscope), basename of cscope.out location
(?) the argument *of*
(?) No commas

+ absolute path.The default is off. Note: This option is only effective when
+ cscope (cscopeprg) is initialized without a prefix path (-P). Examples: >
Missing two spaces after the first dot. Missing one space after the second and 
third dots.

+       In the absence of a prefix (-P) for cscope. setting this option enables
Dot should not be here.

Original message:
> Patch 7.3.210
> Problem:    Can't always find the file when using cscope.
> Solution:   Add the 'cscoperelative' option. (Raghavendra D Prabhu)
> Files:      runtime/doc/if_cscop.txt, runtime/doc/options.txt,
>             src/if_cscope.c, src/options.c, src/options.h
> 
> 
> *** ../mercurial/vim73/runtime/doc/if_cscop.txt       2010-09-30
> 21:38:08.000000000 +0200 --- runtime/doc/if_cscop.txt 2011-06-12
> 19:54:26.000000000 +0200
> ***************
> *** 271,276 ****
> --- 271,285 ----
> 
>       :set cst
>       :set nocst
> 
>   <
> +                                                     *cscoperelative* *csre*
> + If 'cscoperelative' set, then in absence of a prefix given to cscope
> (prefx + is the argument to -P option of cscope), basename of cscope.out
> location + (usually the project root directory) will be used as the prefix
> to construt + absolute path.The default is off. Note: This option is only
> effective when + cscope (cscopeprg) is initialized without a prefix path
> (-P). Examples: > +   :set csre
> +     :set nocsre
> + <
>                                                       *cscopetagorder* *csto*
>   The value of 'csto' determines the order in which |:cstag| performs a
> search. If 'csto' is set to zero, cscope database(s) are searched first,
> followed *** ../mercurial/vim73/runtime/doc/options.txt       2011-05-19
> 12:22:41.000000000 +0200 --- runtime/doc/options.txt  2011-06-12
> 20:00:10.000000000 +0200
> ***************
> *** 2209,2214 ****
> --- 2209,2224 ----
>       Specifies whether to use quickfix window to show cscope results.
>       See |cscopequickfix|.
> 
> +                                             *'cscoperelative'* *'csre'*
> + 'cscoperelative' 'csre' boolean (default off)
> +                     global
> +                     {not available when compiled without the |+cscope|
> +                     feature}
> +                     {not in Vi}
> +     In the absence of a prefix (-P) for cscope. setting this option enables
> +     to use the basename of cscope.out path as the prefix.
> +     See |cscoperelative|.
> +
>                               *'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
>   'cscopetag' 'cst'   boolean (default off)
>                       global
> *** ../mercurial/vim73/src/if_cscope.c        2011-05-05 16:41:19.000000000 
+0200
> --- src/if_cscope.c   2011-06-12 20:25:17.000000000 +0200
> ***************
> *** 2471,2512 ****
>    */
>       static char *
>   cs_resolve_file(i, name)
> !     int i;
>       char *name;
>   {
> !     char *fullname;
> !     int len;
> 
>       /*
> !      * ppath is freed when we destroy the cscope connection.
> !      * fullname is freed after cs_make_vim_style_matches, after it's been
> !      * copied into the tag buffer used by vim
>        */
>       len = (int)(strlen(name) + 2);
>       if (csinfo[i].ppath != NULL)
>       len += (int)strlen(csinfo[i].ppath);
> 
>       if ((fullname = (char *)alloc(len)) == NULL)
>       return NULL;
> 
> !     /*
> !      * note/example: this won't work if the cscope output already starts
>        * "../.." and the prefix path is also "../..".  if something like
> this !      * happens, you are screwed up and need to fix how you're using
> cscope. !      */
> !     if (csinfo[i].ppath != NULL &&
> !     (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
> !     (name[0] != '/')
>   #ifdef WIN32
> !     && name[0] != '\\' && name[1] != ':'
>   #endif
> !     )
>       (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
>       else
>       (void)sprintf(fullname, "%s", name);
> 
>       return fullname;
> ! } /* cs_resolve_file */
> 
> 
>   /*
> --- 2471,2531 ----
>    */
>       static char *
>   cs_resolve_file(i, name)
> !     int  i;
>       char *name;
>   {
> !     char    *fullname;
> !     int             len;
> !     char_u  *csdir = NULL;
> 
>       /*
> !      * Ppath is freed when we destroy the cscope connection.
> !      * Fullname is freed after cs_make_vim_style_matches, after it's been
> !      * copied into the tag buffer used by Vim.
>        */
>       len = (int)(strlen(name) + 2);
>       if (csinfo[i].ppath != NULL)
>       len += (int)strlen(csinfo[i].ppath);
> +     else if (p_csre && csinfo[i].fname != NULL)
> +     {
> +     /* If 'cscoperelative' is set and ppath is not set, use cscope.out
> +      * path in path resolution. */
> +     csdir = alloc(MAXPATHL);
> +     if (csdir != NULL)
> +     {
> +         vim_strncpy(csdir, (char_u *)csinfo[i].fname,
> +                 gettail((char_u *)csinfo[i].fname) - 1 - (char_u
> *)csinfo[i].fname); +             len += (int)STRLEN(csdir);
> +     }
> +     }
> 
>       if ((fullname = (char *)alloc(len)) == NULL)
>       return NULL;
> 
> !     /* Note/example: this won't work if the cscope output already starts
>        * "../.." and the prefix path is also "../..".  if something like
> this !      * happens, you are screwed up and need to fix how you're using
> cscope. */ !     if (csinfo[i].ppath != NULL
> !         && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
> !         && (name[0] != '/')
>   #ifdef WIN32
> !         && name[0] != '\\' && name[1] != ':'
>   #endif
> !        )
>       (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
> +     else if (csdir != NULL && csinfo[i].fname != NULL && STRLEN(csdir) >
> 0) +     {
> +     /* Check for csdir to be non empty to avoid empty path concatenated to
> +      * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
> +     vim_free(fullname);
> +     fullname = concat_fnames(csdir, (char_u *)name, TRUE);
> +     }
>       else
>       (void)sprintf(fullname, "%s", name);
> 
> +     vim_free(csdir);
>       return fullname;
> ! }
> 
> 
>   /*
> *** ../vim-7.3.209/src/version.c      2011-06-12 20:36:00.000000000 +0200
> --- src/version.c     2011-06-12 20:37:48.000000000 +0200
> ***************
> *** 711,712 ****
> --- 711,714 ----
>   {   /* Add new patch number below this line */
> + /**/
> +     210,
>   /**/

Attachment: signature.asc
Description: This is a digitally signed message part.

Raspunde prin e-mail lui