@@ -61,6 +61,19 @@ const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
61
61
return path ;
62
62
}
63
63
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
+
64
77
/*
65
78
* Verify a filename that we got as an argument for a pathspec
66
79
* 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)
70
83
*/
71
84
void verify_filename (const char * prefix , const char * arg )
72
85
{
73
- const char * name ;
74
- struct stat st ;
75
-
76
86
if (* arg == '-' )
77
87
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 ))
80
89
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 );
85
92
}
86
93
87
94
/*
@@ -91,19 +98,14 @@ void verify_filename(const char *prefix, const char *arg)
91
98
*/
92
99
void verify_non_filename (const char * prefix , const char * arg )
93
100
{
94
- const char * name ;
95
- struct stat st ;
96
-
97
101
if (!is_inside_work_tree () || is_inside_git_dir ())
98
102
return ;
99
103
if (* arg == '-' )
100
104
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 );
107
109
}
108
110
109
111
const char * * get_pathspec (const char * prefix , const char * * pathspec )
0 commit comments