Checkout
Julian Foad
committed
on 11 Feb
Re-implement shelving to use a separate WC for the storage of each shelf.

* subversion/include/svn_client.h
(svn_client__shelf_mods_edito… Show more
Re-implement shelving to use a separate WC for the storage of each shelf.

* subversion/include/svn_client.h

 (svn_client__shelf_mods_editor): New.

 (svn_client__shelf_replay): Add a notification callback.

* subversion/libsvn_client/shelf.c

 (shelf_version_files_dir_abspath): Tweak the directory name to end in

   ".wc", for clarity.

 (get_metadata_abspath,

  get_base_file_abspath,

  get_working_file_abspath,

  get_base_props_abspath,

  get_working_props_abspath): Delete.

 (status_create,

  kind_to_char,

  char_to_kind,

  status_to_char,

  char_to_status,

  wc_status_serialize,

  wc_status_unserialize,

  status_write): Delete.

 (status_augment): New.

 (status_read): Read WC status directly from shelf-storage WC.

 (shelf_status_visitor_t,

  shelf_status_baton_t,

  shelf_status_visitor,

  shelf_status_visit_path,

  shelf_status_walk): Adjust to use a WC status walk directly.

 (write_changes_baton_t,

  notify_shelved,

  notify_not_shelved,

  read_props_from_wc,

  write_props_to_shelf,

  read_props_from_shelf,

  store_file,

  write_changes_visitor,

  changelist_filter_baton_t,

  changelist_filter_func,

  wc_walk_status_multi,

  shelf_write_changes): Delete.

 (get_shelves_dir): New.

 (shelf_construct): Use a different storage dir.

 (paths_changed_walk_baton_t,

  paths_changed_visitor,

  shelf_paths_changed,

  svn_client__shelf_paths_changed): Remove unneeded 'as abspath' option.

 (send_notification,

  apply_prop_mods,

  apply_file_mods,

  path_driver_cb_baton_t,

  path_driver_cb_func,

  shelf_replay_path_baton_t,

  shelf_replay_path_visitor): Delete.

 (svn_client__shelf_replay): Use the WC replay API instead of a shelf-

   specific implementation.

 (test_apply_file_visitor): Tweak constness.

 (file_changed,

  file_deleted,

  file_added,

  diff_baton_t,

  diff_visitor): Delete.

 (wc_mods_editor): Add explicit notification callback and result pool.

 (svn_client__shelf_mods_editor): Expose in the semi-public API.

 (svn_client__shelf_apply): Adjust calls.

 (unapply_walk_baton_t,

  unapply_visitor): New.

 (svn_client__shelf_unapply): Rewrite, using a shelf status walk that

   reverts each visited path.

 (svn_client__shelf_diff): Rewrite, using a WC diff instead of a

   shelf-specific implementation.

 (shelf_copy_base): New.

 (shelf_save_notifer_baton_t,

  shelf_save_notifier): New.

 (svn_client__shelf_save_new_version3): Rewrite, using a WC replay piped

   into a shelf mods editor.

 (svn_client__shelf_list): Adjust the shelf storage dir.

* subversion/tests/cmdline/shelf_tests.py

 (shelve_mkdir,

  shelve_replace_dir): Don't expect "cannot shelve". Do expect failure, for

   now.

 (shelve_rmdir,

  shelve_file_copy,

  shelve_dir_copy): Don't expect "cannot shelve".

 (refuse_to_shelve_conflict): Change the test case to avoid a known,

   unrelated bug.

* subversion/tests/cmdline/svntest/sandbox.py

 (Sandbox.build): Expect each sandbox to use an additional WC directory

   "<wc-dir-basename>.shelves".

* notes/shelving/shelf-structure.txt

 Update to this version.

Show less