-
Notifications
You must be signed in to change notification settings - Fork 0
mv from in-cone to out-of-cone #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: mv-v5
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -174,6 +174,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix) | |||||||||||||
| struct lock_file lock_file = LOCK_INIT; | ||||||||||||||
| struct cache_entry *ce; | ||||||||||||||
| struct string_list only_match_skip_worktree = STRING_LIST_INIT_NODUP; | ||||||||||||||
| struct string_list dirty_paths = STRING_LIST_INIT_NODUP; | ||||||||||||||
|
|
||||||||||||||
| git_config(git_default_config, NULL); | ||||||||||||||
|
|
||||||||||||||
|
|
@@ -404,6 +405,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix) | |||||||||||||
| const char *src = source[i], *dst = destination[i]; | ||||||||||||||
| enum update_mode mode = modes[i]; | ||||||||||||||
| int pos; | ||||||||||||||
| int up_to_date = 0; | ||||||||||||||
| struct checkout state = CHECKOUT_INIT; | ||||||||||||||
| state.istate = &the_index; | ||||||||||||||
|
|
||||||||||||||
|
|
@@ -414,6 +416,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix) | |||||||||||||
| if (show_only) | ||||||||||||||
| continue; | ||||||||||||||
| if (!(mode & (INDEX | SPARSE | SKIP_WORKTREE_DIR)) && | ||||||||||||||
| !(dst_mode & SKIP_WORKTREE_DIR) && | ||||||||||||||
| rename(src, dst) < 0) { | ||||||||||||||
| if (ignore_errors) | ||||||||||||||
| continue; | ||||||||||||||
|
|
@@ -433,20 +436,52 @@ int cmd_mv(int argc, const char **argv, const char *prefix) | |||||||||||||
|
|
||||||||||||||
| pos = cache_name_pos(src, strlen(src)); | ||||||||||||||
| assert(pos >= 0); | ||||||||||||||
| if (!(mode & SPARSE) && !lstat(src, &st)) | ||||||||||||||
| up_to_date = !ce_modified(active_cache[pos], &st, 0); | ||||||||||||||
| rename_cache_entry_at(pos, dst); | ||||||||||||||
|
|
||||||||||||||
| if ((mode & SPARSE) && | ||||||||||||||
| (path_in_sparse_checkout(dst, &the_index))) { | ||||||||||||||
| int dst_pos; | ||||||||||||||
| if (ignore_sparse && | ||||||||||||||
| !init_sparse_checkout_patterns(&the_index) && | ||||||||||||||
| the_index.sparse_checkout_patterns->use_cone_patterns) { | ||||||||||||||
|
Comment on lines
+443
to
+445
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure! This looks a lot cheaper, I did not know these two flags. |
||||||||||||||
|
|
||||||||||||||
| dst_pos = cache_name_pos(dst, strlen(dst)); | ||||||||||||||
| active_cache[dst_pos]->ce_flags &= ~CE_SKIP_WORKTREE; | ||||||||||||||
| /* from out-of-cone to in-cone */ | ||||||||||||||
| if ((mode & SPARSE) && | ||||||||||||||
| path_in_sparse_checkout(dst, &the_index)) { | ||||||||||||||
| int dst_pos = cache_name_pos(dst, strlen(dst)); | ||||||||||||||
| struct cache_entry *dst_ce = active_cache[dst_pos]; | ||||||||||||||
|
|
||||||||||||||
| if (checkout_entry(active_cache[dst_pos], &state, NULL, NULL)) | ||||||||||||||
| die(_("cannot checkout %s"), active_cache[dst_pos]->name); | ||||||||||||||
| dst_ce->ce_flags &= ~CE_SKIP_WORKTREE; | ||||||||||||||
|
|
||||||||||||||
| if (checkout_entry(dst_ce, &state, NULL, NULL)) | ||||||||||||||
| die(_("cannot checkout %s"), dst_ce->name); | ||||||||||||||
| continue; | ||||||||||||||
| } | ||||||||||||||
|
|
||||||||||||||
| /* from in-cone to out-of-cone */ | ||||||||||||||
| if ((dst_mode & SKIP_WORKTREE_DIR) && | ||||||||||||||
| !(mode & SPARSE) && | ||||||||||||||
| !path_in_sparse_checkout(dst, &the_index)) { | ||||||||||||||
| int dst_pos = cache_name_pos(dst, strlen(dst)); | ||||||||||||||
| struct cache_entry *dst_ce = active_cache[dst_pos]; | ||||||||||||||
| char *src_dir = dirname(xstrdup(src)); | ||||||||||||||
|
|
||||||||||||||
| if (up_to_date) { | ||||||||||||||
| dst_ce->ce_flags |= CE_SKIP_WORKTREE; | ||||||||||||||
| unlink_or_warn(src); | ||||||||||||||
| } else { | ||||||||||||||
| string_list_append(&dirty_paths, dst); | ||||||||||||||
| safe_create_leading_directories(xstrdup(dst)); | ||||||||||||||
| rename(src, dst); | ||||||||||||||
| } | ||||||||||||||
| if ((mode & INDEX) && is_empty_dir(src_dir)) | ||||||||||||||
| rmdir_or_warn(src_dir); | ||||||||||||||
| } | ||||||||||||||
| } | ||||||||||||||
| } | ||||||||||||||
|
|
||||||||||||||
| if (dirty_paths.nr) | ||||||||||||||
| advise_on_moving_dirty_path(&dirty_paths); | ||||||||||||||
|
|
||||||||||||||
| if (gitmodules_modified) | ||||||||||||||
| stage_updated_gitmodules(&the_index); | ||||||||||||||
|
|
||||||||||||||
|
|
@@ -455,6 +490,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix) | |||||||||||||
| die(_("Unable to write new index file")); | ||||||||||||||
|
|
||||||||||||||
| string_list_clear(&src_for_dst, 0); | ||||||||||||||
| string_list_clear(&dirty_paths, 0); | ||||||||||||||
| UNLEAK(source); | ||||||||||||||
| UNLEAK(dest_path); | ||||||||||||||
| free(submodule_gitfile); | ||||||||||||||
|
|
||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A couple of suggestions to make the advice clearer:
advice.updateSparsePathconfig (seeadvise_on_updating_sparse_paths()).--sparseflag forgit add(since the user would be adding paths outside the sparse checkout definition).advise_on_updating_sparse_paths())You don't need to use my exact wording (below) if you'd rather write something else, but at a high level these suggestions should clarify things for users.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the comments, they are really helpful! I was thinking about adding a new advice config, but you pointed out that I can just use
ADVICE_UPDATE_SPARSE_PATH, which is neat!