@@ -61,6 +61,19 @@ const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
6161 return path ;
6262}
6363
64+ int check_filename (const char * prefix , const char * arg )
65+ {
66+ const char * name ;
67+ struct stat st ;
68+
69+ name = prefix ? prefix_filename (prefix , strlen (prefix ), arg ) : arg ;
70+ if (!lstat (name , & st ))
71+ return 1 ; /* file exists */
72+ if (errno == ENOENT || errno == ENOTDIR )
73+ return 0 ; /* file does not exist */
74+ die_errno ("failed to stat '%s'" , arg );
75+ }
76+
6477/*
6578 * Verify a filename that we got as an argument for a pathspec
6679 * entry. Note that a filename that begins with "-" never verifies
@@ -70,18 +83,12 @@ const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
7083 */
7184void verify_filename (const char * prefix , const char * arg )
7285{
73- const char * name ;
74- struct stat st ;
75-
7686 if (* arg == '-' )
7787 die ("bad flag '%s' used after filename" , arg );
78- name = prefix ? prefix_filename (prefix , strlen (prefix ), arg ) : arg ;
79- if (!lstat (name , & st ))
88+ if (check_filename (prefix , arg ))
8089 return ;
81- if (errno == ENOENT )
82- die ("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
83- "Use '--' to separate paths from revisions" , arg );
84- die_errno ("failed to stat '%s'" , arg );
90+ die ("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
91+ "Use '--' to separate paths from revisions" , arg );
8592}
8693
8794/*
@@ -91,19 +98,14 @@ void verify_filename(const char *prefix, const char *arg)
9198 */
9299void verify_non_filename (const char * prefix , const char * arg )
93100{
94- const char * name ;
95- struct stat st ;
96-
97101 if (!is_inside_work_tree () || is_inside_git_dir ())
98102 return ;
99103 if (* arg == '-' )
100104 return ; /* flag */
101- name = prefix ? prefix_filename (prefix , strlen (prefix ), arg ) : arg ;
102- if (!lstat (name , & st ))
103- die ("ambiguous argument '%s': both revision and filename\n"
104- "Use '--' to separate filenames from revisions" , arg );
105- if (errno != ENOENT && errno != ENOTDIR )
106- die_errno ("failed to stat '%s'" , arg );
105+ if (!check_filename (prefix , arg ))
106+ return ;
107+ die ("ambiguous argument '%s': both revision and filename\n"
108+ "Use '--' to separate filenames from revisions" , arg );
107109}
108110
109111const char * * get_pathspec (const char * prefix , const char * * pathspec )
0 commit comments