Author: kotkov Date: Mon Nov 21 16:25:24 2022 New Revision: 1905441 URL: http://svn.apache.org/viewvc?rev=1905441&view=rev Log: On the 'pristines-on-demand-on-mwf' branch: Teach `svn info` to report the state of the `--store-pristine` option for a working copy.
* subversion/include/svn_wc.h (svn_wc_info_t): Add new `store_pristine` field. * subversion/libsvn_wc/info.c (build_info_for_node): Fill in the new field. * subversion/svn/info-cmd.c (info_item_t, info_item_map): Add `info_item_store_pristine`. (print_info_xml, print_info, print_info_item): Output the new `store_pristine` state. * subversion/svn/svn.c (svn_cl__cmd_table_main): Update help for `svn info`. * subversion/tests/cmdline/store_pristine_tests.py (simple_checkout_with_pristine, simple_checkout_without_pristine, simple_commit_with_pristine, simple_commit_without_pristine, simple_update_with_pristine, simple_update_without_pristine, simple_status_with_pristine, simple_status_without_pristine, simple_diff_with_pristine, simple_diff_without_pristine, simple_revert_with_pristine, simple_revert_without_pristine, update_modified_file_with_pristine, update_modified_file_without_pristine): Check the output of svn info --show-item=store-pristine. * subversion/svn/schema/info.rnc: Update schema for `svn info --xml`. Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/info.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/info-cmd.c subversion/branches/pristines-on-demand-on-mwf/subversion/svn/schema/info.rnc subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/store_pristine_tests.py Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h?rev=1905441&r1=1905440&r2=1905441&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/include/svn_wc.h Mon Nov 21 16:25:24 2022 @@ -3314,6 +3314,12 @@ typedef struct svn_wc_info_t * @since New in 1.15. */ int wc_format; + + /** + * Whether pristine content is stored locally or is being fetched on-demand. + * @since New in 1.15. + */ + svn_boolean_t store_pristine; } svn_wc_info_t; /** Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/info.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/info.c?rev=1905441&r1=1905440&r2=1905441&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/info.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/info.c Mon Nov 21 16:25:24 2022 @@ -106,7 +106,8 @@ build_info_for_node(svn_wc__info2_t **in wc_info->copyfrom_rev = SVN_INVALID_REVNUM; - SVN_ERR(svn_wc__db_get_settings(&wc_info->wc_format, NULL, + SVN_ERR(svn_wc__db_get_settings(&wc_info->wc_format, + &wc_info->store_pristine, db, local_abspath, scratch_pool)); SVN_ERR(svn_wc__db_read_info(&status, &db_kind, &tmpinfo->rev, Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/info-cmd.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/svn/info-cmd.c?rev=1905441&r1=1905440&r2=1905441&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/svn/info-cmd.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/svn/info-cmd.c Mon Nov 21 16:25:24 2022 @@ -371,7 +371,8 @@ typedef enum info_item_depth, info_item_changelist, info_item_wc_format, - info_item_wc_compatible_version + info_item_wc_compatible_version, + info_item_store_pristine, } info_item_t; /* Mapping between option keywords and info_item_t. */ @@ -401,6 +402,7 @@ static const info_item_map_t info_item_m { SVN__STATIC_STRING("wc-format"), info_item_wc_format }, { SVN__STATIC_STRING("wc-compatible-version"), info_item_wc_compatible_version }, + { SVN__STATIC_STRING("store-pristine"), info_item_store_pristine }, }; static const apr_size_t info_item_map_len = @@ -607,6 +609,10 @@ print_info_xml(void *baton, info->wc_info->wc_format)); } + /* "<store-pristine> xx </store-pristine>" */ + svn_cl__xml_tagged_cdata(&sb, pool, "store-pristine", + info->wc_info->store_pristine ? "yes" : "no"); + /* "<schedule> xx </schedule>" */ svn_cl__xml_tagged_cdata(&sb, pool, "schedule", schedule_str(info->wc_info->schedule)); @@ -763,6 +769,15 @@ print_info(void *baton, info->wc_info->wc_format)); } + if (info->wc_info) + { + if (info->wc_info->store_pristine) + SVN_ERR(svn_cmdline_fputs(_("Working Copy Store Pristine: yes\n"), + stdout, pool)); + else + SVN_ERR(svn_cmdline_fputs(_("Working Copy Store Pristine: no\n"), + stdout, pool)); + } if (info->URL) SVN_ERR(svn_cmdline_printf(pool, _("URL: %s\n"), info->URL)); @@ -1296,6 +1311,19 @@ print_info_item(void *baton, target_path, pool)); break; + case info_item_store_pristine: + { + const char *text; + + if (info->wc_info) + text = info->wc_info->store_pristine ? "yes" : "no"; + else + text = NULL; + + SVN_ERR(print_info_item_string(text, target_path, pool)); + } + break; + default: SVN_ERR_MALFUNCTION(); } Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/schema/info.rnc URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/svn/schema/info.rnc?rev=1905441&r1=1905440&r2=1905441&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/svn/schema/info.rnc (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/svn/schema/info.rnc Mon Nov 21 16:25:24 2022 @@ -59,6 +59,7 @@ wc-info = wcroot-abspath?, wc-compatible-version?, wc-format?, + store-pristine?, schedule?, changelist?, copy-from-url?, @@ -74,6 +75,7 @@ wc-info = wcroot-abspath = element wcroot-abspath { string } wc-compatible-version = element wc-compatible-version { string } wc-format = element wc-format { xsd:nonNegativeInteger } +store-pristine = element store-pristine { "yes" | "no" } schedule = element schedule { "normal" | "add" | "delete" | "replace" | "none" } Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c?rev=1905441&r1=1905440&r2=1905441&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/svn/svn.c Mon Nov 21 16:25:24 2022 @@ -811,7 +811,11 @@ svn_cl__cmd_table_main[] = " " " first version supporting TARGET WC\n" " " - " 'changelist' changelist of TARGET in WC")}}, + " 'changelist' changelist of TARGET in WC\n" + " " + " 'store-pristine'\n" + " " + " TARGET's working copy pristine mode")}}, }, { "list", svn_cl__list, {"ls"}, Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/store_pristine_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/store_pristine_tests.py?rev=1905441&r1=1905440&r2=1905441&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/store_pristine_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/store_pristine_tests.py Mon Nov 21 16:25:24 2022 @@ -54,6 +54,10 @@ def simple_checkout_with_pristine(sbox): expected_disk, [], "--store-pristine=yes") + svntest.actions.run_and_verify_svn( + ['yes'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) @SkipUnless(svntest.main.is_wc_pristines_on_demand_supported) def simple_checkout_without_pristine(sbox): @@ -68,6 +72,10 @@ def simple_checkout_without_pristine(sbo expected_disk, [], "--store-pristine=no") + svntest.actions.run_and_verify_svn( + ['no'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) def simple_commit_with_pristine(sbox): "simple commit with pristine" @@ -81,6 +89,10 @@ def simple_commit_with_pristine(sbox): expected_disk, [], "--store-pristine=yes") + svntest.actions.run_and_verify_svn( + ['yes'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) sbox.simple_append('file', 'contents') sbox.simple_add('file') @@ -109,6 +121,10 @@ def simple_commit_without_pristine(sbox) expected_disk, [], "--store-pristine=no") + svntest.actions.run_and_verify_svn( + ['no'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) sbox.simple_append('file', 'contents') sbox.simple_add('file') @@ -136,6 +152,11 @@ def simple_update_with_pristine(sbox): expected_wc, [], "--store-pristine=yes") + svntest.actions.run_and_verify_svn( + ['yes'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo') sbox.simple_add('file') sbox.simple_commit(message='r1') @@ -173,6 +194,11 @@ def simple_update_without_pristine(sbox) expected_wc, [], "--store-pristine=no") + svntest.actions.run_and_verify_svn( + ['no'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo') sbox.simple_add('file') sbox.simple_commit(message='r1') @@ -209,6 +235,11 @@ def simple_status_with_pristine(sbox): expected_wc, [], "--store-pristine=yes") + svntest.actions.run_and_verify_svn( + ['yes'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo') sbox.simple_add('file') @@ -260,6 +291,11 @@ def simple_status_without_pristine(sbox) expected_wc, [], "--store-pristine=no") + svntest.actions.run_and_verify_svn( + ['no'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo') sbox.simple_add('file') @@ -310,6 +346,11 @@ def simple_diff_with_pristine(sbox): expected_wc, [], "--store-pristine=yes") + svntest.actions.run_and_verify_svn( + ['yes'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo\n') sbox.simple_add('file') sbox.simple_commit(message='r1') @@ -338,6 +379,11 @@ def simple_diff_without_pristine(sbox): expected_wc, [], "--store-pristine=no") + svntest.actions.run_and_verify_svn( + ['no'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo\n') sbox.simple_add('file') sbox.simple_commit(message='r1') @@ -365,6 +411,11 @@ def simple_revert_with_pristine(sbox): expected_wc, [], "--store-pristine=yes") + svntest.actions.run_and_verify_svn( + ['yes'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo\n') sbox.simple_add('file') sbox.simple_commit(message='r1') @@ -393,6 +444,11 @@ def simple_revert_without_pristine(sbox) expected_wc, [], "--store-pristine=no") + svntest.actions.run_and_verify_svn( + ['no'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo\n') sbox.simple_add('file') sbox.simple_commit(message='r1') @@ -420,6 +476,11 @@ def update_modified_file_with_pristine(s expected_wc, [], "--store-pristine=yes") + svntest.actions.run_and_verify_svn( + ['yes'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo') sbox.simple_add('file') sbox.simple_commit(message='r1') @@ -460,6 +521,11 @@ def update_modified_file_without_pristin expected_wc, [], "--store-pristine=no") + svntest.actions.run_and_verify_svn( + ['no'], [], + 'info', '--show-item=store-pristine', '--no-newline', + sbox.wc_dir) + sbox.simple_append('file', 'foo') sbox.simple_add('file') sbox.simple_commit(message='r1')