@@ -156,6 +156,28 @@ static int empty_dir_has_sparse_contents(const char *name)
156
156
return ret ;
157
157
}
158
158
159
+ static void remove_empty_src_dirs (const char * * src_dir , size_t src_dir_nr )
160
+ {
161
+ size_t i ;
162
+ struct strbuf a_src_dir = STRBUF_INIT ;
163
+
164
+ for (i = 0 ; i < src_dir_nr ; i ++ ) {
165
+ int dummy ;
166
+ strbuf_addstr (& a_src_dir , src_dir [i ]);
167
+ /*
168
+ * if entries under a_src_dir are all moved away,
169
+ * recursively remove a_src_dir to cleanup
170
+ */
171
+ if (index_range_of_same_dir (a_src_dir .buf , a_src_dir .len ,
172
+ & dummy , & dummy ) < 1 ) {
173
+ remove_dir_recursively (& a_src_dir , 0 );
174
+ }
175
+ strbuf_reset (& a_src_dir );
176
+ }
177
+
178
+ strbuf_release (& a_src_dir );
179
+ }
180
+
159
181
int cmd_mv (int argc , const char * * argv , const char * prefix )
160
182
{
161
183
int i , flags , gitmodules_modified = 0 ;
@@ -175,9 +197,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
175
197
struct strvec submodule_gitfiles_to_free = STRVEC_INIT ;
176
198
const char * * submodule_gitfiles ;
177
199
char * dst_w_slash = NULL ;
178
- const char * * src_dir = NULL ;
179
- int src_dir_nr = 0 , src_dir_alloc = 0 ;
180
- struct strbuf a_src_dir = STRBUF_INIT ;
200
+ struct strvec src_dir = STRVEC_INIT ;
181
201
enum update_mode * modes , dst_mode = 0 ;
182
202
struct stat st , dest_st ;
183
203
struct string_list src_for_dst = STRING_LIST_INIT_DUP ;
@@ -323,8 +343,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
323
343
/* last - first >= 1 */
324
344
modes [i ] |= WORKING_DIRECTORY ;
325
345
326
- ALLOC_GROW (src_dir , src_dir_nr + 1 , src_dir_alloc );
327
- src_dir [src_dir_nr ++ ] = src ;
346
+ strvec_push (& src_dir , src );
328
347
329
348
n = argc + last - first ;
330
349
REALLOC_ARRAY (modes , n );
@@ -538,25 +557,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
538
557
}
539
558
}
540
559
541
- /*
542
- * cleanup the empty src_dirs
543
- */
544
- for (i = 0 ; i < src_dir_nr ; i ++ ) {
545
- int dummy ;
546
- strbuf_addstr (& a_src_dir , src_dir [i ]);
547
- /*
548
- * if entries under a_src_dir are all moved away,
549
- * recursively remove a_src_dir to cleanup
550
- */
551
- if (index_range_of_same_dir (a_src_dir .buf , a_src_dir .len ,
552
- & dummy , & dummy ) < 1 ) {
553
- remove_dir_recursively (& a_src_dir , 0 );
554
- }
555
- strbuf_reset (& a_src_dir );
556
- }
557
-
558
- strbuf_release (& a_src_dir );
559
- free (src_dir );
560
+ remove_empty_src_dirs (src_dir .v , src_dir .nr );
560
561
561
562
if (dirty_paths .nr )
562
563
advise_on_moving_dirty_path (& dirty_paths );
@@ -571,6 +572,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
571
572
ret = 0 ;
572
573
573
574
out :
575
+ strvec_clear (& src_dir );
574
576
free (dst_w_slash );
575
577
string_list_clear (& src_for_dst , 0 );
576
578
string_list_clear (& dirty_paths , 0 );
0 commit comments