@@ -26,17 +26,23 @@ const char *unpack_plumbing_errors[NB_UNPACK_TREES_ERROR_TYPES] = {
26
26
/* ERROR_NOT_UPTODATE_DIR */
27
27
"Updating '%s' would lose untracked files in it" ,
28
28
29
- /* ERROR_WOULD_LOSE_UNTRACKED */
30
- "Untracked working tree file '%s' would be %s by merge." ,
29
+ /* ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN */
30
+ "Untracked working tree file '%s' would be overwritten by merge." ,
31
+
32
+ /* ERROR_WOULD_LOSE_UNTRACKED_REMOVED */
33
+ "Untracked working tree file '%s' would be removed by merge." ,
31
34
32
35
/* ERROR_BIND_OVERLAP */
33
36
"Entry '%s' overlaps with '%s'. Cannot bind." ,
34
37
35
38
/* ERROR_SPARSE_NOT_UPTODATE_FILE */
36
39
"Entry '%s' not uptodate. Cannot update sparse checkout." ,
37
40
38
- /* ERROR_WOULD_LOSE_ORPHANED */
39
- "Working tree file '%s' would be %s by sparse checkout update." ,
41
+ /* ERROR_WOULD_LOSE_ORPHANED_OVERWRITTEN */
42
+ "Working tree file '%s' would be overwritten by sparse checkout update." ,
43
+
44
+ /* ERROR_WOULD_LOSE_ORPHANED_REMOVED */
45
+ "Working tree file '%s' would be removed by sparse checkout update." ,
40
46
};
41
47
42
48
#define ERRORMSG (o ,type ) \
@@ -131,7 +137,7 @@ static int check_updates(struct unpack_trees_options *o)
131
137
}
132
138
133
139
static int verify_uptodate_sparse (struct cache_entry * ce , struct unpack_trees_options * o );
134
- static int verify_absent_sparse (struct cache_entry * ce , const char * action , struct unpack_trees_options * o );
140
+ static int verify_absent_sparse (struct cache_entry * ce , enum unpack_trees_error_types , struct unpack_trees_options * o );
135
141
136
142
static int will_have_skip_worktree (const struct cache_entry * ce , struct unpack_trees_options * o )
137
143
{
@@ -174,7 +180,7 @@ static int apply_sparse_checkout(struct cache_entry *ce, struct unpack_trees_opt
174
180
ce -> ce_flags |= CE_WT_REMOVE ;
175
181
}
176
182
if (was_skip_worktree && !ce_skip_worktree (ce )) {
177
- if (verify_absent_sparse (ce , "overwritten" , o ))
183
+ if (verify_absent_sparse (ce , ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN , o ))
178
184
return -1 ;
179
185
ce -> ce_flags |= CE_UPDATE ;
180
186
}
@@ -859,7 +865,7 @@ static int same(struct cache_entry *a, struct cache_entry *b)
859
865
*/
860
866
static int verify_uptodate_1 (struct cache_entry * ce ,
861
867
struct unpack_trees_options * o ,
862
- const char * error_msg )
868
+ enum unpack_trees_error_types error_type )
863
869
{
864
870
struct stat st ;
865
871
@@ -884,21 +890,21 @@ static int verify_uptodate_1(struct cache_entry *ce,
884
890
if (errno == ENOENT )
885
891
return 0 ;
886
892
return o -> gently ? -1 :
887
- error (error_msg , ce -> name );
893
+ error (ERRORMSG ( o , error_type ) , ce -> name );
888
894
}
889
895
890
896
static int verify_uptodate (struct cache_entry * ce ,
891
897
struct unpack_trees_options * o )
892
898
{
893
899
if (!o -> skip_sparse_checkout && will_have_skip_worktree (ce , o ))
894
900
return 0 ;
895
- return verify_uptodate_1 (ce , o , ERRORMSG ( o , ERROR_NOT_UPTODATE_FILE ) );
901
+ return verify_uptodate_1 (ce , o , ERROR_NOT_UPTODATE_FILE );
896
902
}
897
903
898
904
static int verify_uptodate_sparse (struct cache_entry * ce ,
899
905
struct unpack_trees_options * o )
900
906
{
901
- return verify_uptodate_1 (ce , o , ERRORMSG ( o , ERROR_SPARSE_NOT_UPTODATE_FILE ) );
907
+ return verify_uptodate_1 (ce , o , ERROR_SPARSE_NOT_UPTODATE_FILE );
902
908
}
903
909
904
910
static void invalidate_ce_path (struct cache_entry * ce , struct unpack_trees_options * o )
@@ -914,13 +920,15 @@ static void invalidate_ce_path(struct cache_entry *ce, struct unpack_trees_optio
914
920
* Currently, git does not checkout subprojects during a superproject
915
921
* checkout, so it is not going to overwrite anything.
916
922
*/
917
- static int verify_clean_submodule (struct cache_entry * ce , const char * action ,
923
+ static int verify_clean_submodule (struct cache_entry * ce ,
924
+ enum unpack_trees_error_types error_type ,
918
925
struct unpack_trees_options * o )
919
926
{
920
927
return 0 ;
921
928
}
922
929
923
- static int verify_clean_subdirectory (struct cache_entry * ce , const char * action ,
930
+ static int verify_clean_subdirectory (struct cache_entry * ce ,
931
+ enum unpack_trees_error_types error_type ,
924
932
struct unpack_trees_options * o )
925
933
{
926
934
/*
@@ -941,7 +949,7 @@ static int verify_clean_subdirectory(struct cache_entry *ce, const char *action,
941
949
*/
942
950
if (!hashcmp (sha1 , ce -> sha1 ))
943
951
return 0 ;
944
- return verify_clean_submodule (ce , action , o );
952
+ return verify_clean_submodule (ce , error_type , o );
945
953
}
946
954
947
955
/*
@@ -1010,9 +1018,9 @@ static int icase_exists(struct unpack_trees_options *o, struct cache_entry *dst,
1010
1018
* We do not want to remove or overwrite a working tree file that
1011
1019
* is not tracked, unless it is ignored.
1012
1020
*/
1013
- static int verify_absent_1 (struct cache_entry * ce , const char * action ,
1014
- struct unpack_trees_options * o ,
1015
- const char * error_msg )
1021
+ static int verify_absent_1 (struct cache_entry * ce ,
1022
+ enum unpack_trees_error_types error_type ,
1023
+ struct unpack_trees_options * o )
1016
1024
{
1017
1025
struct stat st ;
1018
1026
@@ -1050,7 +1058,7 @@ static int verify_absent_1(struct cache_entry *ce, const char *action,
1050
1058
* files that are in "foo/" we would lose
1051
1059
* them.
1052
1060
*/
1053
- if (verify_clean_subdirectory (ce , action , o ) < 0 )
1061
+ if (verify_clean_subdirectory (ce , error_type , o ) < 0 )
1054
1062
return -1 ;
1055
1063
return 0 ;
1056
1064
}
@@ -1067,22 +1075,28 @@ static int verify_absent_1(struct cache_entry *ce, const char *action,
1067
1075
}
1068
1076
1069
1077
return o -> gently ? -1 :
1070
- error (ERRORMSG (o , ERROR_WOULD_LOSE_UNTRACKED ), ce -> name , action );
1078
+ error (ERRORMSG (o , error_type ), ce -> name );
1071
1079
}
1072
1080
return 0 ;
1073
1081
}
1074
- static int verify_absent (struct cache_entry * ce , const char * action ,
1082
+ static int verify_absent (struct cache_entry * ce ,
1083
+ enum unpack_trees_error_types error_type ,
1075
1084
struct unpack_trees_options * o )
1076
1085
{
1077
1086
if (!o -> skip_sparse_checkout && will_have_skip_worktree (ce , o ))
1078
1087
return 0 ;
1079
- return verify_absent_1 (ce , action , o , ERRORMSG ( o , ERROR_WOULD_LOSE_UNTRACKED ) );
1088
+ return verify_absent_1 (ce , error_type , o );
1080
1089
}
1081
1090
1082
- static int verify_absent_sparse (struct cache_entry * ce , const char * action ,
1091
+ static int verify_absent_sparse (struct cache_entry * ce ,
1092
+ enum unpack_trees_error_types error_type ,
1083
1093
struct unpack_trees_options * o )
1084
1094
{
1085
- return verify_absent_1 (ce , action , o , ERRORMSG (o , ERROR_WOULD_LOSE_ORPHANED ));
1095
+ enum unpack_trees_error_types orphaned_error = error_type ;
1096
+ if (orphaned_error == ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN )
1097
+ orphaned_error = ERROR_WOULD_LOSE_ORPHANED_OVERWRITTEN ;
1098
+
1099
+ return verify_absent_1 (ce , orphaned_error , o );
1086
1100
}
1087
1101
1088
1102
static int merged_entry (struct cache_entry * merge , struct cache_entry * old ,
@@ -1091,7 +1105,7 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
1091
1105
int update = CE_UPDATE ;
1092
1106
1093
1107
if (!old ) {
1094
- if (verify_absent (merge , "overwritten" , o ))
1108
+ if (verify_absent (merge , ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN , o ))
1095
1109
return -1 ;
1096
1110
invalidate_ce_path (merge , o );
1097
1111
} else if (!(old -> ce_flags & CE_CONFLICTED )) {
@@ -1129,7 +1143,7 @@ static int deleted_entry(struct cache_entry *ce, struct cache_entry *old,
1129
1143
{
1130
1144
/* Did it exist in the index? */
1131
1145
if (!old ) {
1132
- if (verify_absent (ce , "removed" , o ))
1146
+ if (verify_absent (ce , ERROR_WOULD_LOSE_UNTRACKED_REMOVED , o ))
1133
1147
return -1 ;
1134
1148
return 0 ;
1135
1149
}
@@ -1278,7 +1292,7 @@ int threeway_merge(struct cache_entry **stages, struct unpack_trees_options *o)
1278
1292
if (index )
1279
1293
return deleted_entry (index , index , o );
1280
1294
if (ce && !head_deleted ) {
1281
- if (verify_absent (ce , "removed" , o ))
1295
+ if (verify_absent (ce , ERROR_WOULD_LOSE_UNTRACKED_REMOVED , o ))
1282
1296
return -1 ;
1283
1297
}
1284
1298
return 0 ;
0 commit comments