subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From stef...@apache.org
Subject svn commit: r1769826 [1/2] - in /subversion/branches/pristineless-hack: ./ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_wc/ subversion/svn/ subversion/tests/cmdline/ subversion/tests/libsvn_wc/
Date Tue, 15 Nov 2016 13:18:48 GMT
Author: stefan2
Date: Tue Nov 15 13:18:47 2016
New Revision: 1769826

URL: http://svn.apache.org/viewvc?rev=1769826&view=rev
Log: (empty)

Added:
    subversion/branches/pristineless-hack/   (props changed)
      - copied from r1769320, subversion/trunk/
Modified:
    subversion/branches/pristineless-hack/subversion/include/private/svn_wc_private.h
    subversion/branches/pristineless-hack/subversion/include/svn_error_codes.h
    subversion/branches/pristineless-hack/subversion/include/svn_wc.h
    subversion/branches/pristineless-hack/subversion/libsvn_client/blame.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/cat.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/client.h
    subversion/branches/pristineless-hack/subversion/libsvn_client/conflicts.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/diff.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/externals.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/revert.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/status.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/switch.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/update.c
    subversion/branches/pristineless-hack/subversion/libsvn_client/util.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/adm_crawler.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/copy.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/deprecated.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/diff.h
    subversion/branches/pristineless-hack/subversion/libsvn_wc/diff_editor.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/diff_local.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/externals.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/questions.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/revert.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/update_editor.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/util.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/wc.h
    subversion/branches/pristineless-hack/subversion/libsvn_wc/wc_db.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/wc_db.h
    subversion/branches/pristineless-hack/subversion/libsvn_wc/wc_db_pristine.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/wc_db_private.h
    subversion/branches/pristineless-hack/subversion/libsvn_wc/wc_db_wcroot.c
    subversion/branches/pristineless-hack/subversion/libsvn_wc/workqueue.c
    subversion/branches/pristineless-hack/subversion/svn/resolve-cmd.c
    subversion/branches/pristineless-hack/subversion/tests/cmdline/basic_tests.py
    subversion/branches/pristineless-hack/subversion/tests/cmdline/diff_tests.py
    subversion/branches/pristineless-hack/subversion/tests/cmdline/move_tests.py
    subversion/branches/pristineless-hack/subversion/tests/cmdline/trans_tests.py
    subversion/branches/pristineless-hack/subversion/tests/cmdline/upgrade_tests.py
    subversion/branches/pristineless-hack/subversion/tests/libsvn_wc/pristine-store-test.c
    subversion/branches/pristineless-hack/subversion/tests/libsvn_wc/utils.c

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Tue Nov 15 13:18:47 2016
@@ -0,0 +1,2 @@
+([Ii]ssues?:?(\s*(,|and)?\s*[#]?\d+)+)|(\bSVN-(\d+)\b)
+(\d+)

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
    bugtraq:url = http://subversion.apache.org/issue%BUGID%

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
--- svn:auto-props (added)
+++ svn:auto-props Tue Nov 15 13:18:47 2016
@@ -0,0 +1,13 @@
+*.c = svn:eol-style=native
+*.cpp = svn:eol-style=native
+*.h = svn:eol-style=native
+*.hpp = svn:eol-style=native
+*.java = svn:eol-style=native
+*.py = svn:eol-style=native
+*.pl = svn:eol-style=native
+*.rb = svn:eol-style=native
+*.sql = svn:eol-style=native
+*.txt = svn:eol-style=native
+README = svn:eol-style=native
+BRANCH-README = svn:eol-style=native
+STATUS = svn:eol-style=native

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Nov 15 13:18:47 2016
@@ -0,0 +1,54 @@
+ChangeLog*
+Makefile
+config.cache
+config.log
+config.nice
+config.status
+configure
+libtool
+.gdb_history
+.swig_checked
+*.orig
+*.rej
+TAGS
+tags
+neon
+build-outputs.mk
+autogen-standalone.mk
+autom4te.cache
+gen-make.opts
+tests.log*
+fails.log*
+db4-win32
+db
+*.o
+*~
+.*~
+apr
+apr-util
+apr-iconv
+Release
+Debug
+ipch
+subversion_msvc.dsw
+subversion_msvc.ncb
+subversion_msvc.opt
+subversion_msvc.plg
+subversion_vcnet.*
+mkmf.log
+.project
+.classpath
+.cdtproject
+.settings
+.cproject
+zlib
+sqlite-amalgamation
+serf
+googlemock
+.git
+.gitignore
+.idea
+compile_commands.json
+.kdev4
+*.kdev4
+.vs

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Nov 15 13:18:47 2016
@@ -0,0 +1,99 @@
+/subversion/branches/1.10-cache-improvements:1669168-1694487
+/subversion/branches/1.5.x-r30215:870312
+/subversion/branches/1.7.x-fs-verify:1146708,1161180
+/subversion/branches/1.9-cache-improvements:1678948-1679863
+/subversion/branches/1.9.x:1735680
+/subversion/branches/10Gb:1388102,1388163-1388190,1388195,1388202,1388205,1388211,1388276,1388362,1388375,1388394,1388636,1388639-1388640,1388643-1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388807,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390209,1390216,1390407,1390409,1390414,1390419,1390955
+/subversion/branches/atomic-revprop:965046-1000689
+/subversion/branches/authzperf:1615360
+/subversion/branches/auto-props-sdc:1384106-1401643
+/subversion/branches/bdb-reverse-deltas:872050-872529
+/subversion/branches/cache-server:1458643-1476567
+/subversion/branches/diff-callbacks3:870059-870761
+/subversion/branches/diff-optimizations:1031270-1037352
+/subversion/branches/diff-optimizations-bytes:1037353-1067789
+/subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118
+/subversion/branches/double-delete:870511-872970
+/subversion/branches/dump-load-cross-check:1654853-1657295
+/subversion/branches/ev2-export:1325914,1332738,1413107
+/subversion/branches/explore-wc:875486,875493,875497,875507,875511,875514,875559,875580-875581,875584,875587,875611,875627,875647,875667-875668,875711-875712,875733-875734,875736,875744-875748,875751,875758,875782,875795-875796,875830,875836,875838,875842,875852,875855,875864,875870,875873,875880,875885-875888,875890,875897-875898,875905,875907-875909,875935,875943-875944,875946,875979,875982-875983,875985-875986,875990,875997
+/subversion/branches/file-externals:871779-873302
+/subversion/branches/fs-rep-sharing:869036-873803
+/subversion/branches/fsfs-format7:1426304,1430673,1433848,1438408,1438982,1441129,1442051,1442068,1442504,1442910,1443171,1443803,1444690,1444693,1444695,1445040,1445080,1446103,1451129,1453590,1454307,1460579,1461851,1461865,1462837,1462904,1463120,1467362,1467382,1469487,1471208,1477166,1478055,1481447,1489817,1489949,1490673-1490674,1491784,1493042,1498029,1498103,1498155,1500054,1507729-1507731,1507735-1507736
+/subversion/branches/fsfs-improvements:1499981-1547039
+/subversion/branches/fsfs-lock-many:1571740-1577217
+/subversion/branches/fsfs-pack:873717-874575
+/subversion/branches/fsx:1507845-1509914
+/subversion/branches/fsx-1.10:1658219-1694500
+/subversion/branches/fsx-id:1645603-1649011
+/subversion/branches/gnome-keyring:870558-871410
+/subversion/branches/gpg-agent-password-store:1005036-1150766
+/subversion/branches/gtest_addition:1452117-1502138
+/subversion/branches/http-protocol-v2:874395-876041
+/subversion/branches/in-memory-cache:869829-871452
+/subversion/branches/in-repo-authz:1414342-1424779
+/subversion/branches/inheritable-props:1297080-1395089
+/subversion/branches/integrate-cache-item-serialization:1068724-1068739
+/subversion/branches/integrate-cache-membuffer:998649-998852
+/subversion/branches/integrate-compression-level:1068651-1072287
+/subversion/branches/integrate-io-improvements:1068684-1072297
+/subversion/branches/integrate-is-cachable:1072568-1074082
+/subversion/branches/integrate-partial-getter:1072558-1076552
+/subversion/branches/integrate-readline-speedup:1072553-1072555
+/subversion/branches/integrate-stream-api-extensions:1068695-1072516
+/subversion/branches/integrate-string-improvements:1068251-1190617
+/subversion/branches/integrate-txdelta-caching:1072541-1078213
+/subversion/branches/issue-2779-dev:965496-984198
+/subversion/branches/issue-2843-dev:871432-874179
+/subversion/branches/issue-3000:871713,871716-871719,871721-871726,871728,871734
+/subversion/branches/issue-3067-deleted-subtrees:873375-874084
+/subversion/branches/issue-3148-dev:875193-875204
+/subversion/branches/issue-3220-dev:872210-872226
+/subversion/branches/issue-3242-dev:879653-896436
+/subversion/branches/issue-3334-dirs:875156-875867
+/subversion/branches/issue-3975:1152931-1160746
+/subversion/branches/issue-4116-dev:1424719-1425040
+/subversion/branches/issue-4194-dev:1410507-1414880
+/subversion/branches/javahl-ra:991978-1494640
+/subversion/branches/kwallet:870785-871314
+/subversion/branches/log-addressing:1509279-1546844
+/subversion/branches/log-g-performance:870941-871032
+/subversion/branches/merge-skips-obstructions:874525-874615
+/subversion/branches/move-tracking-2:1606692-1714632
+/subversion/branches/multi-layer-moves:1239019-1300930
+/subversion/branches/nfc-nfd-aware-client:870276,870376
+/subversion/branches/node_pool:1304828-1305388
+/subversion/branches/patch-exec:1692717-1705390
+/subversion/branches/performance:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985673,985695,985697,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335-1029336,1029339-1029340,1029342,10
 29344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
+/subversion/branches/pin-externals:1643757-1659392
+/subversion/branches/py-tests-as-modules:956579-1033052
+/subversion/branches/ra-svn-tuning:1658201-1694489
+/subversion/branches/ra_serf-digest-authn:875693-876404
+/subversion/branches/reintegrate-improvements:873853-874164
+/subversion/branches/remote-only-status:1581845-1586090
+/subversion/branches/resolve-incoming-add:1762797-1764284
+/subversion/branches/revprop-cache:1298521-1326293
+/subversion/branches/revprop-caching-ng:1620597,1620599
+/subversion/branches/revprop-packing:1143907,1143971,1143997,1144017,1144499,1144568,1146145
+/subversion/branches/subtree-mergeinfo:876734-878766
+/subversion/branches/svn-auth-x509:1603509-1655900
+/subversion/branches/svn-info-detail:1660035-1662618
+/subversion/branches/svn-mergeinfo-enhancements:870119-870195,870197-870288
+/subversion/branches/svn-mergeinfo-normalizer:1642232-1695991
+/subversion/branches/svn-patch-improvements:918519-934609
+/subversion/branches/svn_mutex:1141683-1182099
+/subversion/branches/svnpatch-diff:865738-876477
+/subversion/branches/svnraisetc:874709-875149
+/subversion/branches/svnserve-logging:869828-870893
+/subversion/branches/tc-issue-3334:874697-874773
+/subversion/branches/tc-merge-notify:874017-874062
+/subversion/branches/tc-resolve:874191-874239
+/subversion/branches/tc_url_rev:874351-874483
+/subversion/branches/tree-conflicts:868291-873154
+/subversion/branches/tree-conflicts-notify:873926-874008
+/subversion/branches/tristate-chunked-request:1502394-1502681
+/subversion/branches/tweak-build-take-two:1424288-1425049,1425051-1425613
+/subversion/branches/uris-as-urls:1060426-1064427
+/subversion/branches/verify-at-commit:1462039-1462408
+/subversion/branches/verify-keep-going:1439280-1546110
+/subversion/branches/wc-collate-path:1402685-1480384

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
    tsvn:logwidthmarker = 78

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
    tsvn:projectlanguage = 1033

Propchange: subversion/branches/pristineless-hack/
------------------------------------------------------------------------------
    webviewer:revision = http://svn.apache.org/r%REVISION%

Modified: subversion/branches/pristineless-hack/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/include/private/svn_wc_private.h?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/pristineless-hack/subversion/include/private/svn_wc_private.h Tue Nov 15 13:18:47 2016
@@ -45,7 +45,6 @@
 extern "C" {
 #endif /* __cplusplus */
 
-
 /* Return TRUE iff CLHASH (a hash whose keys are const char *
    changelist names) is NULL or if LOCAL_ABSPATH is part of a changelist in
    CLHASH. */
@@ -84,6 +83,8 @@ svn_wc__get_file_external_editor(const s
                                  const svn_opt_revision_t *recorded_rev,
                                  svn_wc_conflict_resolver_func2_t conflict_func,
                                  void *conflict_baton,
+                                 rev_file_func_t rev_file_func,
+                                 void *rev_file_baton,
                                  svn_cancel_func_t cancel_func,
                                  void *cancel_baton,
                                  svn_wc_notify_func2_t notify_func,
@@ -100,6 +101,8 @@ svn_wc__crawl_file_external(svn_wc_conte
                             void *report_baton,
                             svn_boolean_t restore_files,
                             svn_boolean_t use_commit_times,
+                            rev_file_func_t rev_file_func,
+                            void *rev_file_baton,
                             svn_cancel_func_t cancel_func,
                             void *cancel_baton,
                             svn_wc_notify_func2_t notify_func,
@@ -1364,7 +1367,6 @@ svn_wc__get_status_editor(const svn_delt
                           apr_pool_t *result_pool,
                           apr_pool_t *scratch_pool);
 
-
 /**
  * Set @a *editor and @a *edit_baton to an editor and baton for updating a
  * working copy.
@@ -1476,6 +1478,8 @@ svn_wc__get_update_editor(const svn_delt
                           void *conflict_baton,
                           svn_wc_external_update_t external_func,
                           void *external_baton,
+                          rev_file_func_t rev_file_func,
+                          void *rev_file_baton,
                           svn_cancel_func_t cancel_func,
                           void *cancel_baton,
                           svn_wc_notify_func2_t notify_func,
@@ -1518,6 +1522,8 @@ svn_wc__get_switch_editor(const svn_delt
                           void *conflict_baton,
                           svn_wc_external_update_t external_func,
                           void *external_baton,
+                          rev_file_func_t rev_file_func,
+                          void *rev_file_baton,
                           svn_cancel_func_t cancel_func,
                           void *cancel_baton,
                           svn_wc_notify_func2_t notify_func,
@@ -1622,6 +1628,8 @@ svn_wc__get_diff_editor(const svn_delta_
                         svn_boolean_t server_performs_filtering,
                         const apr_array_header_t *changelist_filter,
                         const svn_diff_tree_processor_t *diff_processor,
+                        rev_file_func_t rev_file_func,
+                        void *rev_file_baton,
                         svn_cancel_func_t cancel_func,
                         void *cancel_baton,
                         apr_pool_t *result_pool,
@@ -2033,6 +2041,8 @@ svn_wc__diff7(const char **root_relpath,
               svn_boolean_t ignore_ancestry,
               const apr_array_header_t *changelist_filter,
               const svn_diff_tree_processor_t *diff_processor,
+              rev_file_func_t rev_file_func,
+              void *rev_file_baton,
               svn_cancel_func_t cancel_func,
               void *cancel_baton,
               apr_pool_t *result_pool,

Modified: subversion/branches/pristineless-hack/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/include/svn_error_codes.h?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/pristineless-hack/subversion/include/svn_error_codes.h Tue Nov 15 13:18:47 2016
@@ -571,6 +571,11 @@ SVN_ERROR_START
              SVN_ERR_WC_CATEGORY_START + 41,
              "Duplicate targets in svn:externals property")
 
+  /** @since New in 1.10 */
+  SVN_ERRDEF(SVN_ERR_WC_NO_PRISTINE,
+             SVN_ERR_WC_CATEGORY_START + 42,
+             "Pristine not available")
+
   /* fs errors */
 
   SVN_ERRDEF(SVN_ERR_FS_GENERAL,

Modified: subversion/branches/pristineless-hack/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/include/svn_wc.h?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/include/svn_wc.h (original)
+++ subversion/branches/pristineless-hack/subversion/include/svn_wc.h Tue Nov 15 13:18:47 2016
@@ -5457,6 +5457,13 @@ svn_wc_process_committed(const char *pat
 
 
 
+typedef svn_error_t * (*rev_file_func_t)(svn_stream_t **content,
+                                         const char *repo_path,
+                                         svn_revnum_t revision,
+                                         void *baton,
+                                         apr_pool_t *result_pool,
+                                         apr_pool_t *scratch_pool);
+
 /**
  * Do a depth-first crawl in a working copy, beginning at @a local_abspath,
  * using @a wc_ctx for accessing the working copy.
@@ -5526,6 +5533,8 @@ svn_wc_crawl_revisions5(svn_wc_context_t
                         svn_boolean_t honor_depth_exclude,
                         svn_boolean_t depth_compatibility_trick,
                         svn_boolean_t use_commit_times,
+                        rev_file_func_t rev_file_func,
+                        void *rev_file_baton,
                         svn_cancel_func_t cancel_func,
                         void *cancel_baton,
                         svn_wc_notify_func2_t notify_func,
@@ -7578,6 +7587,7 @@ svn_wc_relocate(const char *path,
                 apr_pool_t *pool);
 
 
+
 /**
  * Revert changes to @a local_abspath.  Perform necessary allocations in
  * @a scratch_pool.
@@ -7632,6 +7642,8 @@ svn_wc_revert5(svn_wc_context_t *wc_ctx,
                const apr_array_header_t *changelist_filter,
                svn_boolean_t clear_changelists,
                svn_boolean_t metadata_only,
+               rev_file_func_t rev_file_func,
+               void *rev_file_baton,
                svn_cancel_func_t cancel_func,
                void *cancel_baton,
                svn_wc_notify_func2_t notify_func,
@@ -7733,6 +7745,8 @@ svn_error_t *
 svn_wc_restore(svn_wc_context_t *wc_ctx,
                const char *local_abspath,
                svn_boolean_t use_commit_times,
+               rev_file_func_t rev_file_func,
+               void *rev_file_baton,
                apr_pool_t *scratch_pool);
 
 

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/blame.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/blame.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/blame.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/blame.c Tue Nov 15 13:18:47 2016
@@ -858,6 +858,7 @@ svn_client_blame5(const char *target,
           SVN_ERR(svn_client__get_normalized_stream(&wcfile, ctx->wc_ctx,
                                                     target_abspath_or_url, &rev,
                                                     FALSE, normalize_eols,
+                                                    NULL, NULL,
                                                     ctx->cancel_func,
                                                     ctx->cancel_baton,
                                                     pool, pool));

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/cat.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/cat.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/cat.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/cat.c Tue Nov 15 13:18:47 2016
@@ -44,6 +44,33 @@
 
 
 /*** Code. ***/
+/* A baton for wc_info_receiver(), containing the wrapped receiver. */
+typedef struct wc_info_receiver_baton_t
+{
+  const char *repos_relpath;
+  svn_revnum_t revision;
+
+  apr_pool_t *pool;
+} wc_info_receiver_baton_t;
+
+/* A receiver for WC info, implementing svn_client_info_receiver2_t.
+ * Convert the WC info to client info and pass it to the client info
+ * receiver (BATON->client_receiver_func with BATON->client_receiver_baton). */
+static svn_error_t *
+wc_info_receiver(void *baton,
+                 const char *abspath_or_url,
+                 const svn_wc__info2_t *wc_info,
+                 apr_pool_t *scratch_pool)
+{
+  wc_info_receiver_baton_t *b = baton;
+  const char *relpath = svn_dirent_skip_ancestor(wc_info->repos_root_URL,
+                                                 wc_info->URL);
+
+  b->repos_relpath = apr_pstrdup(b->pool, relpath);
+  b->revision = wc_info->rev;
+
+  return SVN_NO_ERROR;
+}
 
 svn_error_t *
 svn_client__get_normalized_stream(svn_stream_t **normal_stream,
@@ -52,6 +79,8 @@ svn_client__get_normalized_stream(svn_st
                                   const svn_opt_revision_t *revision,
                                   svn_boolean_t expand_keywords,
                                   svn_boolean_t normalize_eols,
+                                  rev_file_func_t rev_file_func,
+                                  void *rev_file_baton,
                                   svn_cancel_func_t cancel_func,
                                   void *cancel_baton,
                                   apr_pool_t *result_pool,
@@ -85,8 +114,25 @@ svn_client__get_normalized_stream(svn_st
 
   if (revision->kind != svn_opt_revision_working)
     {
-      SVN_ERR(svn_wc_get_pristine_contents2(&input, wc_ctx, local_abspath,
-                                            result_pool, scratch_pool));
+      svn_error_t *err;
+      err = svn_wc_get_pristine_contents2(&input, wc_ctx, local_abspath,
+                                          result_pool, scratch_pool);
+      if (err && err->apr_err == SVN_ERR_WC_NO_PRISTINE && rev_file_func)
+        {
+          wc_info_receiver_baton_t b;
+
+          b.pool = scratch_pool;
+          svn_error_clear(err);
+
+          SVN_ERR(svn_wc__get_info(wc_ctx, local_abspath, svn_depth_empty,
+                                   FALSE, TRUE, NULL, wc_info_receiver, &b,
+                                   NULL, NULL, scratch_pool));
+          err = rev_file_func(&input, b.repos_relpath, b.revision,
+                              rev_file_baton, result_pool, scratch_pool);
+        }
+
+      SVN_ERR(err);
+
       if (input == NULL)
         return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
                  _("'%s' has no pristine version until it is committed"),
@@ -213,12 +259,20 @@ svn_client_cat3(apr_hash_t **returned_pr
     {
       const char *local_abspath;
       svn_stream_t *normal_stream;
+      rev_file_func_t rev_file_func;
+      void *rev_file_baton;
+      const char *repo_root;
 
       SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url,
                                       scratch_pool));
+      SVN_ERR(svn_client_get_repos_root(&repo_root, NULL, local_abspath, ctx,
+                                        scratch_pool, scratch_pool));
+      SVN_ERR(svn_client__get_rev_file_func(&rev_file_func, &rev_file_baton,
+                                            ctx, repo_root, scratch_pool));
       SVN_ERR(svn_client__get_normalized_stream(&normal_stream, ctx->wc_ctx,
                                             local_abspath, revision,
                                             expand_keywords, FALSE,
+                                            rev_file_func, rev_file_baton,
                                             ctx->cancel_func, ctx->cancel_baton,
                                             scratch_pool, scratch_pool));
 

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/client.h?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/client.h (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/client.h Tue Nov 15 13:18:47 2016
@@ -40,6 +40,7 @@
 #include "private/svn_client_private.h"
 #include "private/svn_diff_tree.h"
 #include "private/svn_editor.h"
+#include "private/svn_wc_private.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -1086,6 +1087,8 @@ svn_client__get_normalized_stream(svn_st
                                   const svn_opt_revision_t *revision,
                                   svn_boolean_t expand_keywords,
                                   svn_boolean_t normalize_eols,
+                                  rev_file_func_t rev_file_func,
+                                  void *rev_file_baton,
                                   svn_cancel_func_t cancel_func,
                                   void *cancel_baton,
                                   apr_pool_t *result_pool,
@@ -1097,6 +1100,13 @@ svn_client__get_shim_callbacks(svn_wc_co
                                apr_hash_t *relpath_map,
                                apr_pool_t *result_pool);
 
+svn_error_t *
+svn_client__get_rev_file_func(rev_file_func_t *rev_file_func,
+                              void **rev_file_baton,
+                              svn_client_ctx_t *ctx,
+                              const char *repos_root_url,
+                              apr_pool_t *result_pool);
+
 /* Return REVISION unless its kind is 'unspecified' in which case return
  * a pointer to a statically allocated revision structure of kind 'head'
  * if PATH_OR_URL is a URL or 'base' if it is a WC path. */

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/conflicts.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/conflicts.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/conflicts.c Tue Nov 15 13:18:47 2016
@@ -7099,10 +7099,16 @@ resolve_incoming_move_dir_merge(svn_clie
     {
       const char *move_target_url;
       svn_opt_revision_t incoming_new_opt_rev;
+      rev_file_func_t rev_file_func;
+      void *rev_file_baton;
 
       /* Revert the incoming move target directory. */
+      SVN_ERR(svn_client__get_rev_file_func(&rev_file_func, &rev_file_baton,
+                                            ctx, repos_root_url,
+                                            scratch_pool));
       SVN_ERR(svn_wc_revert5(ctx->wc_ctx, moved_to_abspath, svn_depth_infinity,
                              FALSE, NULL, TRUE, FALSE,
+                             rev_file_func, rev_file_baton,
                              NULL, NULL, /* no cancellation */
                              ctx->notify_func2, ctx->notify_baton2,
                              scratch_pool));

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/diff.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/diff.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/diff.c Tue Nov 15 13:18:47 2016
@@ -1811,6 +1811,9 @@ diff_wc_wc(const char **root_relpath,
            apr_pool_t *scratch_pool)
 {
   const char *abspath1;
+  rev_file_func_t rev_file_func;
+  void *rev_file_baton;
+  svn_wc_status3_t *status;
 
   SVN_ERR_ASSERT(! svn_path_is_url(path1));
   SVN_ERR_ASSERT(! svn_path_is_url(path2));
@@ -1841,10 +1844,18 @@ diff_wc_wc(const char **root_relpath,
         ddi->anchor = path1;
     }
 
+  /* Repository access callback for pristine-less working copies. */
+  SVN_ERR(svn_wc_status3(&status, ctx->wc_ctx, abspath1,
+                         scratch_pool, scratch_pool));
+  SVN_ERR(svn_client__get_rev_file_func(&rev_file_func, &rev_file_baton,
+                                        ctx, status->repos_root_url,
+                                        scratch_pool));
+
   SVN_ERR(svn_wc__diff7(root_relpath, root_is_dir,
                         ctx->wc_ctx, abspath1, depth,
                         ignore_ancestry, changelists,
                         diff_processor,
+                        rev_file_func, rev_file_baton,
                         ctx->cancel_func, ctx->cancel_baton,
                         result_pool, scratch_pool));
   return SVN_NO_ERROR;
@@ -2067,6 +2078,9 @@ diff_repos_wc(const char **root_relpath,
   const char *copy_root_abspath;
   const char *target_url;
   svn_client__pathrev_t *loc1;
+  const char *repos_root_url;
+  rev_file_func_t rev_file_func;
+  void *rev_file_baton;
 
   SVN_ERR_ASSERT(! svn_path_is_url(path2));
 
@@ -2185,11 +2199,10 @@ diff_repos_wc(const char **root_relpath,
     }
 
   SVN_ERR(svn_ra_reparent(ra_session, anchor_url, scratch_pool));
+  SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, scratch_pool));
 
   if (ddi)
     {
-      const char *repos_root_url;
-
       ddi->anchor = anchor;
 
       if (!reverse)
@@ -2205,9 +2218,6 @@ diff_repos_wc(const char **root_relpath,
           ddi->orig_path_2 = apr_pstrdup(result_pool, loc1->url);
         }
 
-      SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url,
-                                      scratch_pool));
-
       ddi->session_relpath = svn_uri_skip_ancestor(repos_root_url,
                                                    anchor_url,
                                                    result_pool);
@@ -2217,6 +2227,10 @@ diff_repos_wc(const char **root_relpath,
     diff_processor = svn_diff__tree_processor_reverse_create(
                               diff_processor, NULL, scratch_pool);
 
+  /* Repository access callback for pristine-less working copies. */
+  SVN_ERR(svn_client__get_rev_file_func(&rev_file_func, &rev_file_baton,
+                                        ctx, repos_root_url, scratch_pool));
+
   /* Use the diff editor to generate the diff. */
   SVN_ERR(svn_ra_has_capability(ra_session, &server_supports_depth,
                                 SVN_RA_CAPABILITY_DEPTH, scratch_pool));
@@ -2231,6 +2245,7 @@ diff_repos_wc(const char **root_relpath,
                                   server_supports_depth,
                                   changelists,
                                   diff_processor,
+                                  rev_file_func, rev_file_baton,
                                   ctx->cancel_func, ctx->cancel_baton,
                                   scratch_pool, scratch_pool));
 
@@ -2283,6 +2298,7 @@ diff_repos_wc(const char **root_relpath,
                                       FALSE, depth, TRUE,
                                       (! server_supports_depth),
                                       FALSE,
+                                      rev_file_func, rev_file_baton,
                                       ctx->cancel_func, ctx->cancel_baton,
                                       NULL, NULL, /* notification is N/A */
                                       scratch_pool));

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/externals.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/externals.c Tue Nov 15 13:18:47 2016
@@ -550,6 +550,8 @@ switch_file_external(const char *local_a
     svn_revnum_t revnum;
     apr_array_header_t *inherited_props;
     const char *target = svn_dirent_basename(local_abspath, scratch_pool);
+    rev_file_func_t rev_file_func;
+    void *rev_file_baton;
 
     /* Get the external file's iprops. */
     SVN_ERR(svn_ra_get_inherited_props(ra_session, &inherited_props, "",
@@ -560,6 +562,10 @@ switch_file_external(const char *local_a
                             svn_uri_dirname(switch_loc->url, scratch_pool),
                             scratch_pool));
 
+    SVN_ERR(svn_client__get_rev_file_func(&rev_file_func, &rev_file_baton,
+                                          ctx, switch_loc->repos_root_url,
+                                          scratch_pool));
+
     SVN_ERR(svn_wc__get_file_external_editor(&switch_editor, &switch_baton,
                                              &revnum, ctx->wc_ctx,
                                              local_abspath,
@@ -576,6 +582,8 @@ switch_file_external(const char *local_a
                                              record_revision,
                                              ctx->conflict_func2,
                                              ctx->conflict_baton2,
+                                             rev_file_func,
+                                             rev_file_baton,
                                              ctx->cancel_func,
                                              ctx->cancel_baton,
                                              ctx->notify_func2,
@@ -595,6 +603,7 @@ switch_file_external(const char *local_a
     SVN_ERR(svn_wc__crawl_file_external(ctx->wc_ctx, local_abspath,
                                         reporter, report_baton,
                                         TRUE,  use_commit_times,
+                                        rev_file_func, rev_file_baton,
                                         ctx->cancel_func, ctx->cancel_baton,
                                         ctx->notify_func2, ctx->notify_baton2,
                                         scratch_pool));

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/revert.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/revert.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/revert.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/revert.c Tue Nov 15 13:18:47 2016
@@ -52,6 +52,8 @@ struct revert_with_write_lock_baton {
   svn_boolean_t clear_changelists;
   svn_boolean_t metadata_only;
   svn_client_ctx_t *ctx;
+  rev_file_func_t rev_file_func;
+  void *rev_file_baton;
 };
 
 /* (Note: All arguments are in the baton above.)
@@ -87,6 +89,7 @@ revert(void *baton, apr_pool_t *result_p
                        b->changelists,
                        b->clear_changelists,
                        b->metadata_only,
+                       b->rev_file_func, b->rev_file_baton,
                        b->ctx->cancel_func, b->ctx->cancel_baton,
                        b->ctx->notify_func2, b->ctx->notify_baton2,
                        scratch_pool);
@@ -164,6 +167,7 @@ svn_client_revert3(const apr_array_heade
     {
       const char *path = APR_ARRAY_IDX(paths, i, const char *);
       const char *local_abspath, *lock_target;
+      const char *repos_root_url;
       svn_boolean_t wc_root;
 
       svn_pool_clear(iterpool);
@@ -190,6 +194,16 @@ svn_client_revert3(const apr_array_heade
         goto errorful;
       lock_target = wc_root ? local_abspath
                             : svn_dirent_dirname(local_abspath, pool);
+      /* Repository access callback for pristine-less working copies. */
+      SVN_ERR(svn_wc__node_get_base(NULL, NULL, NULL, &repos_root_url,
+                                    NULL, NULL, ctx->wc_ctx, local_abspath,
+                                    TRUE /* ignore_enoent */,
+                                    iterpool, iterpool));
+      SVN_ERR(svn_client__get_rev_file_func(&baton.rev_file_func,
+                                            &baton.rev_file_baton,
+                                            ctx, repos_root_url,
+                                            iterpool));
+
       err = svn_wc__call_with_write_lock(revert, &baton, ctx->wc_ctx,
                                          lock_target, FALSE,
                                          iterpool, iterpool);

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/status.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/status.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/status.c Tue Nov 15 13:18:47 2016
@@ -517,6 +517,9 @@ svn_client_status6(svn_revnum_t *result_
           svn_revnum_t revnum;
           report_baton_t rb;
           svn_depth_t status_depth;
+          rev_file_func_t rev_file_func;
+          void *rev_file_baton;
+          const char *repos_root_url;
 
           if (revision->kind == svn_opt_revision_head)
             {
@@ -556,6 +559,12 @@ svn_client_status6(svn_revnum_t *result_
           else
             rb.depth = depth;
 
+          /* Repository access callback for pristine-less working copies. */
+          SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_root_url, pool));
+          SVN_ERR(svn_client__get_rev_file_func(&rev_file_func,
+                                                &rev_file_baton,
+                                                ctx, repos_root_url, pool));
+
           /* Drive the reporter structure, describing the revisions
              within PATH.  When we call reporter->finish_report,
              EDITOR will be driven to describe differences between our
@@ -567,6 +576,7 @@ svn_client_status6(svn_revnum_t *result_
                                           depth, (! depth_as_sticky),
                                           (! server_supports_depth),
                                           FALSE /* use_commit_times */,
+                                          rev_file_func, rev_file_baton,
                                           ctx->cancel_func, ctx->cancel_baton,
                                           NULL, NULL, pool));
         }

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/switch.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/switch.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/switch.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/switch.c Tue Nov 15 13:18:47 2016
@@ -118,6 +118,8 @@ switch_internal(svn_revnum_t *result_rev
   svn_config_t *cfg = ctx->config
                       ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
                       : NULL;
+  rev_file_func_t rev_file_func;
+  void *rev_file_baton;
 
   /* An unknown depth can't be sticky. */
   if (depth == svn_depth_unknown)
@@ -297,6 +299,11 @@ switch_internal(svn_revnum_t *result_rev
 
   SVN_ERR(svn_ra_reparent(ra_session, anchor_url, pool));
 
+  /* Repository access callback for pristine-less working copies. */
+  SVN_ERR(svn_client__get_rev_file_func(&rev_file_func, &rev_file_baton,
+                                        ctx, switch_loc->repos_root_url,
+                                        pool));
+
   /* Fetch the switch (update) editor.  If REVISION is invalid, that's
      okay; the RA driver will call editor->set_target_revision() later on. */
   SVN_ERR(svn_ra_has_capability(ra_session, &server_supports_depth,
@@ -317,6 +324,7 @@ switch_internal(svn_revnum_t *result_rev
                                     conflicted_paths ? record_conflict : NULL,
                                     conflicted_paths,
                                     NULL, NULL,
+                                    rev_file_func, rev_file_baton,
                                     ctx->cancel_func, ctx->cancel_baton,
                                     ctx->notify_func2, ctx->notify_baton2,
                                     pool, pool));
@@ -345,6 +353,7 @@ switch_internal(svn_revnum_t *result_rev
                                   depth, (! depth_is_sticky),
                                   (! server_supports_depth),
                                   use_commit_times,
+                                  rev_file_func, rev_file_baton,
                                   ctx->cancel_func, ctx->cancel_baton,
                                   ctx->notify_func2, ctx->notify_baton2,
                                   pool));

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/update.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/update.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/update.c Tue Nov 15 13:18:47 2016
@@ -245,6 +245,8 @@ update_internal(svn_revnum_t *result_rev
   svn_config_t *cfg = ctx->config
                       ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
                       : NULL;
+  rev_file_func_t rev_file_func;
+  void *rev_file_baton;
 
   if (result_rev)
     *result_rev = SVN_INVALID_REVNUM;
@@ -460,6 +462,10 @@ update_internal(svn_revnum_t *result_rev
                                             revnum, depth, ra_session,
                                             ctx, scratch_pool, scratch_pool));
 
+  /* Repository access callback for pristine-less working copies. */
+  SVN_ERR(svn_client__get_rev_file_func(&rev_file_func, &rev_file_baton,
+                                        ctx, repos_root_url, scratch_pool));
+
   /* Fetch the update editor.  If REVISION is invalid, that's okay;
      the RA driver will call editor->set_target_revision later on. */
   SVN_ERR(svn_wc__get_update_editor(&update_editor, &update_edit_baton,
@@ -475,6 +481,7 @@ update_internal(svn_revnum_t *result_rev
                                     conflicted_paths ? record_conflict : NULL,
                                     conflicted_paths,
                                     NULL, NULL,
+                                    rev_file_func, rev_file_baton,
                                     ctx->cancel_func, ctx->cancel_baton,
                                     ctx->notify_func2, ctx->notify_baton2,
                                     scratch_pool, scratch_pool));
@@ -503,6 +510,7 @@ update_internal(svn_revnum_t *result_rev
                                   depth, (! depth_is_sticky),
                                   (! server_supports_depth),
                                   use_commit_times,
+                                  rev_file_func, rev_file_baton,
                                   ctx->cancel_func, ctx->cancel_baton,
                                   ctx->notify_func2, ctx->notify_baton2,
                                   scratch_pool));

Modified: subversion/branches/pristineless-hack/subversion/libsvn_client/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_client/util.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_client/util.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_client/util.c Tue Nov 15 13:18:47 2016
@@ -37,6 +37,7 @@
 #include "private/svn_client_private.h"
 #include "private/svn_wc_private.h"
 #include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
 
 #include "client.h"
 
@@ -468,3 +469,57 @@ svn_client__get_shim_callbacks(svn_wc_co
 
   return callbacks;
 }
+
+typedef struct auto_session_t
+{
+  svn_ra_session_t *ra_session;
+  svn_client_ctx_t *ctx;
+  const char *root_url;
+  apr_pool_t *pool;
+
+} auto_session_t;
+
+static svn_error_t *
+fetch_rev_file(svn_stream_t **content,
+               const char *repo_path,
+               svn_revnum_t revision,
+               void *baton,
+               apr_pool_t *result_pool,
+               apr_pool_t *scratch_pool)
+{
+  auto_session_t *session = baton;
+  *content = svn_stream_buffered(result_pool);
+
+  if (!session->ra_session)
+    SVN_ERR(svn_client__open_ra_session_internal(&session->ra_session, NULL,
+                                                 session->root_url,
+                                                 NULL, NULL,
+                                                 FALSE /* write_dav_props */,
+                                                 FALSE /* read_dav_props */,
+                                                 session->ctx,
+                                                 session->pool,
+                                                 scratch_pool));
+
+  SVN_ERR(svn_ra_get_file(session->ra_session, repo_path, revision, *content,
+                          NULL, NULL, result_pool));
+
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client__get_rev_file_func(rev_file_func_t *rev_file_func,
+                              void **rev_file_baton,
+                              svn_client_ctx_t *ctx,
+                              const char *repos_root_url,
+                              apr_pool_t *result_pool)
+{
+  auto_session_t *baton = apr_pcalloc(result_pool, sizeof(*baton));
+  baton->ctx = ctx;
+  baton->root_url = repos_root_url;
+  baton->pool = result_pool;
+
+  *rev_file_func = fetch_rev_file;
+  *rev_file_baton = baton;
+
+  return SVN_NO_ERROR;
+}
\ No newline at end of file

Modified: subversion/branches/pristineless-hack/subversion/libsvn_wc/adm_crawler.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_wc/adm_crawler.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_wc/adm_crawler.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_wc/adm_crawler.c Tue Nov 15 13:18:47 2016
@@ -69,12 +69,20 @@ restore_file(svn_wc__db_t *db,
              const char *local_abspath,
              svn_boolean_t use_commit_times,
              svn_boolean_t mark_resolved_text_conflict,
+             const char *repos_relpath,
+             svn_revnum_t revision,
+             rev_file_func_t rev_file_func,
+             void *rev_file_baton,
              svn_cancel_func_t cancel_func,
              void *cancel_baton,
              apr_pool_t *scratch_pool)
 {
   svn_skel_t *work_item;
 
+  SVN_ERR(svn_wc__pristine_add(db, local_abspath, repos_relpath,
+                               revision, rev_file_func,
+                               rev_file_baton, scratch_pool));
+
   SVN_ERR(svn_wc__wq_build_file_install(&work_item,
                                         db, local_abspath,
                                         NULL /* source_abspath */,
@@ -104,6 +112,8 @@ svn_error_t *
 svn_wc_restore(svn_wc_context_t *wc_ctx,
                const char *local_abspath,
                svn_boolean_t use_commit_times,
+               rev_file_func_t rev_file_func,
+               void *rev_file_baton,
                apr_pool_t *scratch_pool)
 {
   /* ### If ever revved: Add cancel func. */
@@ -111,6 +121,8 @@ svn_wc_restore(svn_wc_context_t *wc_ctx,
   svn_node_kind_t kind;
   svn_node_kind_t disk_kind;
   const svn_checksum_t *checksum;
+  const char *repos_relpath;
+  svn_revnum_t revision;
 
   SVN_ERR(svn_io_check_path(local_abspath, &disk_kind, scratch_pool));
 
@@ -120,10 +132,11 @@ svn_wc_restore(svn_wc_context_t *wc_ctx,
                              svn_dirent_local_style(local_abspath,
                                                     scratch_pool));
 
-  SVN_ERR(svn_wc__db_read_info(&status, &kind, NULL, NULL, NULL, NULL, NULL,
-                               NULL, NULL, NULL, &checksum, NULL, NULL, NULL, NULL,
-                               NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                               NULL, NULL, NULL, NULL,
+  SVN_ERR(svn_wc__db_read_info(&status, &kind, &revision, &repos_relpath,
+                               NULL, NULL, NULL, NULL, NULL, NULL, &checksum,
+                               NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                               NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                               NULL, NULL,
                                wc_ctx->db, local_abspath,
                                scratch_pool, scratch_pool));
 
@@ -143,6 +156,8 @@ svn_wc_restore(svn_wc_context_t *wc_ctx,
   if (kind == svn_node_file || kind == svn_node_symlink)
     SVN_ERR(restore_file(wc_ctx->db, local_abspath, use_commit_times,
                          FALSE /*mark_resolved_text_conflict*/,
+                         repos_relpath, revision,
+                         rev_file_func, rev_file_baton,
                          NULL, NULL /* cancel func, baton */,
                          scratch_pool));
   else
@@ -164,6 +179,10 @@ restore_node(svn_wc__db_t *db,
              svn_node_kind_t kind,
              svn_boolean_t mark_resolved_text_conflict,
              svn_boolean_t use_commit_times,
+             const char *repos_relpath,
+             svn_revnum_t revision,
+             rev_file_func_t rev_file_func,
+             void *rev_file_baton,
              svn_cancel_func_t cancel_func,
              void *cancel_baton,
              svn_wc_notify_func2_t notify_func,
@@ -175,6 +194,8 @@ restore_node(svn_wc__db_t *db,
       /* Recreate file from text-base; mark any text conflict as resolved */
       SVN_ERR(restore_file(db, local_abspath, use_commit_times,
                            mark_resolved_text_conflict,
+                           repos_relpath, revision,
+                           rev_file_func, rev_file_baton,
                            cancel_func, cancel_baton,
                            scratch_pool));
     }
@@ -256,6 +277,8 @@ report_revisions_and_depths(svn_wc__db_t
                             svn_boolean_t depth_compatibility_trick,
                             svn_boolean_t report_everything,
                             svn_boolean_t use_commit_times,
+                            rev_file_func_t rev_file_func,
+                            void *rev_file_baton,
                             svn_cancel_func_t cancel_func,
                             void *cancel_baton,
                             svn_wc_notify_func2_t notify_func,
@@ -386,8 +409,11 @@ report_revisions_and_depths(svn_wc__db_t
           svn_node_kind_t wrk_kind;
           const svn_checksum_t *checksum;
           svn_boolean_t conflicted;
+          const char *repos_relpath;
+          svn_revnum_t revision;
 
-          SVN_ERR(svn_wc__db_read_info(&wrk_status, &wrk_kind, NULL, NULL,
+          SVN_ERR(svn_wc__db_read_info(&wrk_status, &wrk_kind, &revision,
+                                       &repos_relpath,
                                        NULL, NULL, NULL, NULL, NULL, NULL,
                                        &checksum, NULL, NULL, NULL, NULL, NULL,
                                        NULL, NULL, NULL, NULL, &conflicted,
@@ -411,6 +437,8 @@ report_revisions_and_depths(svn_wc__db_t
                 {
                   SVN_ERR(restore_node(db, this_abspath, wrk_kind,
                                        conflicted, use_commit_times,
+                                       repos_relpath, revision,
+                                       rev_file_func, rev_file_baton,
                                        cancel_func, cancel_baton,
                                        notify_func, notify_baton, iterpool));
                 }
@@ -611,6 +639,7 @@ report_revisions_and_depths(svn_wc__db_t
                                                   depth_compatibility_trick,
                                                   start_empty,
                                                   use_commit_times,
+                                                  rev_file_func, rev_file_baton,
                                                   cancel_func, cancel_baton,
                                                   notify_func, notify_baton,
                                                   iterpool));
@@ -639,6 +668,8 @@ svn_wc_crawl_revisions5(svn_wc_context_t
                         svn_boolean_t honor_depth_exclude,
                         svn_boolean_t depth_compatibility_trick,
                         svn_boolean_t use_commit_times,
+                        rev_file_func_t rev_file_func,
+                        void *rev_file_baton,
                         svn_cancel_func_t cancel_func,
                         void *cancel_baton,
                         svn_wc_notify_func2_t notify_func,
@@ -747,6 +778,8 @@ svn_wc_crawl_revisions5(svn_wc_context_t
         {
           SVN_ERR(restore_node(wc_ctx->db, local_abspath,
                                wrk_kind, conflicted, use_commit_times,
+                               repos_relpath, target_rev,
+                               rev_file_func, rev_file_baton,
                                cancel_func, cancel_baton,
                                notify_func, notify_baton,
                                scratch_pool));
@@ -786,6 +819,7 @@ svn_wc_crawl_revisions5(svn_wc_context_t
                                             depth_compatibility_trick,
                                             start_empty,
                                             use_commit_times,
+                                            rev_file_func, rev_file_baton,
                                             cancel_func, cancel_baton,
                                             notify_func, notify_baton,
                                             scratch_pool);
@@ -953,9 +987,20 @@ read_and_checksum_pristine_text(svn_stre
                                 apr_pool_t *scratch_pool)
 {
   svn_stream_t *base_stream;
+  svn_error_t *err;
+
+  err = svn_wc__get_pristine_contents(&base_stream, NULL, db, local_abspath,
+                                      result_pool, scratch_pool);
+  if (err && err->apr_err == SVN_ERR_WC_NO_PRISTINE)
+    {
+      svn_error_clear(err);
+      base_stream = NULL;
+    }
+  else
+    {
+      SVN_ERR(err);
+    }
 
-  SVN_ERR(svn_wc__get_pristine_contents(&base_stream, NULL, db, local_abspath,
-                                        result_pool, scratch_pool));
   if (base_stream == NULL)
     {
       base_stream = svn_stream_empty(result_pool);

Modified: subversion/branches/pristineless-hack/subversion/libsvn_wc/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_wc/copy.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_wc/copy.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_wc/copy.c Tue Nov 15 13:18:47 2016
@@ -116,6 +116,7 @@ copy_to_tmpdir(svn_skel_t **work_item,
 
   if (file_copy && !unversioned)
     {
+#if 0
       svn_boolean_t modified;
       /* It's faster to look for mods on the source now, as
          the timestamp might match, than to examine the
@@ -145,6 +146,7 @@ copy_to_tmpdir(svn_skel_t **work_item,
                                                 result_pool, scratch_pool));
           return SVN_NO_ERROR;
         }
+#endif
     }
   else if (*kind == svn_node_dir && !file_copy)
     {

Modified: subversion/branches/pristineless-hack/subversion/libsvn_wc/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_wc/deprecated.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_wc/deprecated.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_wc/deprecated.c Tue Nov 15 13:18:47 2016
@@ -184,6 +184,7 @@ svn_wc_crawl_revisions4(const char *path
                                   honor_depth_exclude,
                                   depth_compatibility_trick,
                                   use_commit_times,
+                                  NULL, NULL,
                                   NULL /* cancel_func */,
                                   NULL /* cancel_baton */,
                                   notify_func,
@@ -1078,6 +1079,7 @@ svn_wc_revert4(svn_wc_context_t *wc_ctx,
                                         changelist_filter,
                                         FALSE /* clear_changelists */,
                                         FALSE /* metadata_only */,
+                                        NULL, NULL,
                                         cancel_func, cancel_baton,
                                         notify_func, notify_baton,
                                         scratch_pool));
@@ -2055,6 +2057,7 @@ svn_wc_get_diff_editor6(const svn_delta_
                             reverse_order, server_performs_filtering,
                             changelist_filter,
                             diff_processor,
+                            NULL, NULL,
                             cancel_func, cancel_baton,
                             result_pool, scratch_pool));
 }
@@ -3574,6 +3577,7 @@ svn_wc_get_update_editor4(const svn_delt
                               fetch_dirents_func, fetch_dirents_baton,
                               conflict_func, conflict_baton,
                               external_func, external_baton,
+                              NULL, NULL,
                               cancel_func, cancel_baton,
                               notify_func, notify_baton,
                               result_pool, scratch_pool));
@@ -3758,6 +3762,7 @@ svn_wc_get_switch_editor4(const svn_delt
                               fetch_dirents_func, fetch_dirents_baton,
                               conflict_func, conflict_baton,
                               external_func, external_baton,
+                              NULL, NULL,
                               cancel_func, cancel_baton,
                               notify_func, notify_baton,
                               result_pool, scratch_pool));

Modified: subversion/branches/pristineless-hack/subversion/libsvn_wc/diff.h
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_wc/diff.h?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_wc/diff.h (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_wc/diff.h Tue Nov 15 13:18:47 2016
@@ -56,6 +56,8 @@ svn_wc__diff_local_only_file(svn_wc__db_
                              const svn_diff_tree_processor_t *processor,
                              void *processor_parent_baton,
                              svn_boolean_t diff_pristine,
+                             rev_file_func_t rev_file_func,
+                             void *rev_file_baton,
                              svn_cancel_func_t cancel_func,
                              void *cancel_baton,
                              apr_pool_t *scratch_pool);
@@ -80,6 +82,8 @@ svn_wc__diff_local_only_dir(svn_wc__db_t
                             const svn_diff_tree_processor_t *processor,
                             void *processor_parent_baton,
                             svn_boolean_t diff_pristine,
+                            rev_file_func_t rev_file_func,
+                            void *rev_file_baton,
                             svn_cancel_func_t cancel_func,
                             void *cancel_baton,
                             apr_pool_t *scratch_pool);
@@ -97,6 +101,8 @@ svn_wc__diff_base_only_file(svn_wc__db_t
                             svn_revnum_t revision,
                             const svn_diff_tree_processor_t *processor,
                             void *processor_parent_baton,
+                            rev_file_func_t rev_file_func,
+                            void *rev_file_baton,
                             apr_pool_t *scratch_pool);
 
 /* Reports the BASE-directory LOCAL_ABSPATH and everything below it (limited
@@ -114,6 +120,8 @@ svn_wc__diff_base_only_dir(svn_wc__db_t
                            svn_depth_t depth,
                            const svn_diff_tree_processor_t *processor,
                            void *processor_parent_baton,
+                           rev_file_func_t rev_file_func,
+                           void *rev_file_baton,
                            svn_cancel_func_t cancel_func,
                            void *cancel_baton,
                            apr_pool_t *scratch_pool);
@@ -129,6 +137,8 @@ svn_wc__diff_base_working_diff(svn_wc__d
                                const svn_diff_tree_processor_t *processor,
                                void *processor_dir_baton,
                                svn_boolean_t diff_pristine,
+                               rev_file_func_t rev_file_func,
+                               void *rev_file_baton,
                                svn_cancel_func_t cancel_func,
                                void *cancel_baton,
                                apr_pool_t *scratch_pool);

Modified: subversion/branches/pristineless-hack/subversion/libsvn_wc/diff_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/pristineless-hack/subversion/libsvn_wc/diff_editor.c?rev=1769826&r1=1769320&r2=1769826&view=diff
==============================================================================
--- subversion/branches/pristineless-hack/subversion/libsvn_wc/diff_editor.c (original)
+++ subversion/branches/pristineless-hack/subversion/libsvn_wc/diff_editor.c Tue Nov 15 13:18:47 2016
@@ -99,6 +99,7 @@ struct edit_baton_t
   /* ANCHOR/TARGET represent the base of the hierarchy to be compared. */
   const char *target;
   const char *anchor_abspath;
+  const char *anchor_repo_relpath;
 
   /* Target revision */
   svn_revnum_t revnum;
@@ -115,6 +116,9 @@ struct edit_baton_t
   /* Possibly diff repos against text-bases instead of working files. */
   svn_boolean_t diff_pristine;
 
+  rev_file_func_t rev_file_func;
+  void *rev_file_baton;
+
   /* Cancel function/baton */
   svn_cancel_func_t cancel_func;
   void *cancel_baton;
@@ -195,6 +199,7 @@ struct file_baton_t
      parent directory, diff session and local working copy. */
   const char *name;
   const char *relpath;
+  const char *repo_relpath;
   const char *local_abspath;
 
   /* Processor state */
@@ -220,6 +225,7 @@ struct file_baton_t
   /* The current BASE checksum and props */
   const svn_checksum_t *base_checksum;
   apr_hash_t *base_props;
+  svn_revnum_t base_revison;
 
   /* The resulting from apply_textdelta */
   const char *temp_file_path;
@@ -250,6 +256,8 @@ make_edit_baton(struct edit_baton_t **ed
                 svn_boolean_t ignore_ancestry,
                 svn_boolean_t use_text_base,
                 svn_boolean_t reverse_order,
+                rev_file_func_t rev_file_func,
+                void *rev_file_baton,
                 svn_cancel_func_t cancel_func,
                 void *cancel_baton,
                 apr_pool_t *pool)
@@ -267,6 +275,8 @@ make_edit_baton(struct edit_baton_t **ed
   eb->ignore_ancestry = ignore_ancestry;
   eb->local_before_remote = reverse_order;
   eb->diff_pristine = use_text_base;
+  eb->rev_file_func = rev_file_func;
+  eb->rev_file_baton = rev_file_baton;
   eb->cancel_func = cancel_func;
   eb->cancel_baton = cancel_baton;
   eb->pool = pool;
@@ -342,6 +352,9 @@ make_file_baton(const char *path,
   fb->local_abspath = svn_dirent_join(eb->anchor_abspath, path, file_pool);
   fb->relpath = svn_dirent_skip_ancestor(eb->anchor_abspath, fb->local_abspath);
   fb->name = svn_dirent_basename(fb->relpath, NULL);
+  if (eb->anchor_repo_relpath)
+    fb->repo_relpath = svn_dirent_join(eb->anchor_repo_relpath, fb->relpath,
+                                       file_pool);
 
   fb->added = added;
   fb->pool = file_pool;
@@ -383,6 +396,8 @@ svn_wc__diff_base_working_diff(svn_wc__d
                                const svn_diff_tree_processor_t *processor,
                                void *processor_dir_baton,
                                svn_boolean_t diff_pristine,
+                               rev_file_func_t rev_file_func,
+                               void *rev_file_baton,
                                svn_cancel_func_t cancel_func,
                                void *cancel_baton,
                                apr_pool_t *scratch_pool)
@@ -406,12 +421,14 @@ svn_wc__diff_base_working_diff(svn_wc__d
   apr_hash_t *base_props;
   apr_hash_t *local_props;
   apr_array_header_t *prop_changes;
+  const char *repos_relpath;
 
-  SVN_ERR(svn_wc__db_read_info(&status, NULL, &db_revision, NULL, NULL, NULL,
-                               NULL, NULL, NULL, NULL, &working_checksum, NULL,
-                               NULL, NULL, NULL, NULL, NULL, &recorded_size,
-                               &recorded_time, NULL, NULL, NULL,
-                               &had_props, &props_mod, NULL, NULL, NULL,
+  SVN_ERR(svn_wc__db_read_info(&status, NULL, &db_revision, &repos_relpath,
+                               NULL, NULL, NULL, NULL, NULL, NULL,
+                               &working_checksum, NULL, NULL, NULL, NULL,
+                               NULL, NULL, &recorded_size, &recorded_time,
+                               NULL, NULL, NULL, &had_props, &props_mod,
+                               NULL, NULL, NULL,
                                db, local_abspath, scratch_pool, scratch_pool));
   checksum = working_checksum;
 
@@ -476,15 +493,22 @@ svn_wc__diff_base_working_diff(svn_wc__d
   if (skip)
     return SVN_NO_ERROR;
 
-  SVN_ERR(svn_wc__db_pristine_get_path(&pristine_file,
-                                       db, local_abspath, checksum,
-                                       scratch_pool, scratch_pool));
+  if (!repos_relpath)
+    repos_relpath = local_abspath;
+
+  SVN_ERR(svn_wc__pristine_get_path(&pristine_file,
+                                    db, local_abspath, checksum,
+                                    repos_relpath, db_revision,
+                                    rev_file_func, rev_file_baton,
+                                    scratch_pool, scratch_pool));
 
   if (diff_pristine)
-    SVN_ERR(svn_wc__db_pristine_get_path(&local_file,
-                                         db, local_abspath,
-                                         working_checksum,
-                                         scratch_pool, scratch_pool));
+    SVN_ERR(svn_wc__pristine_get_path(&local_file,
+                                      db, local_abspath,
+                                      working_checksum,
+                                      repos_relpath, db_revision,
+                                      rev_file_func, rev_file_baton,
+                                      scratch_pool, scratch_pool));
   else if (! (had_props || props_mod))
     local_file = local_abspath;
   else if (files_same)
@@ -769,6 +793,8 @@ walk_local_nodes_diff(struct edit_baton_
                                                      moved_from_relpath,
                                                      eb->processor, dir_baton,
                                                      eb->diff_pristine,
+                                                     eb->rev_file_func,
+                                                     eb->rev_file_baton,
                                                      eb->cancel_func,
                                                      eb->cancel_baton,
                                                      iterpool));
@@ -779,6 +805,8 @@ walk_local_nodes_diff(struct edit_baton_
                                                     moved_from_relpath,
                                                     eb->processor, dir_baton,
                                                     eb->diff_pristine,
+                                                    eb->rev_file_func,
+                                                    eb->rev_file_baton,
                                                     eb->cancel_func,
                                                     eb->cancel_baton,
                                                     iterpool));
@@ -791,12 +819,16 @@ walk_local_nodes_diff(struct edit_baton_
                 SVN_ERR(svn_wc__diff_base_only_file(db, child_abspath,
                                                     child_relpath, eb->revnum,
                                                     eb->processor, dir_baton,
+                                                    eb->rev_file_func,
+                                                    eb->rev_file_baton,
                                                     iterpool));
               else if (base_kind == svn_node_dir && diff_dirs)
                 SVN_ERR(svn_wc__diff_base_only_dir(db, child_abspath,
                                                    child_relpath, eb->revnum,
                                                    depth_below_here,
                                                    eb->processor, dir_baton,
+                                                   eb->rev_file_func,
+                                                   eb->rev_file_baton,
                                                    eb->cancel_func,
                                                    eb->cancel_baton,
                                                    iterpool));
@@ -815,6 +847,8 @@ walk_local_nodes_diff(struct edit_baton_
                                                 eb->revnum,
                                                 eb->processor, dir_baton,
                                                 eb->diff_pristine,
+                                                eb->rev_file_func,
+                                                eb->rev_file_baton,
                                                 eb->cancel_func,
                                                 eb->cancel_baton,
                                                 scratch_pool));
@@ -856,6 +890,8 @@ walk_local_nodes_diff(struct edit_baton_
                                                      moved_from_relpath,
                                                      eb->processor, dir_baton,
                                                      eb->diff_pristine,
+                                                     eb->rev_file_func,
+                                                     eb->rev_file_baton,
                                                      eb->cancel_func,
                                                      eb->cancel_baton,
                                                      iterpool));
@@ -865,6 +901,8 @@ walk_local_nodes_diff(struct edit_baton_
                                                     moved_from_relpath,
                                                     eb->processor, dir_baton,
                                                     eb->diff_pristine,
+                                                    eb->rev_file_func,
+                                                    eb->rev_file_baton,
                                                     eb->cancel_func,
                                                     eb->cancel_baton,
                                                     iterpool));
@@ -922,6 +960,8 @@ svn_wc__diff_local_only_file(svn_wc__db_
                              const svn_diff_tree_processor_t *processor,
                              void *processor_parent_baton,
                              svn_boolean_t diff_pristine,
+                             rev_file_func_t rev_file_func,
+                             void *rev_file_baton,
                              svn_cancel_func_t cancel_func,
                              void *cancel_baton,
                              apr_pool_t *scratch_pool)
@@ -1019,8 +1059,16 @@ svn_wc__diff_local_only_file(svn_wc__db_
     right_props = svn_prop_hash_dup(pristine_props, scratch_pool);
 
   if (checksum)
-    SVN_ERR(svn_wc__db_pristine_get_path(&pristine_file, db, local_abspath,
-                                         checksum, scratch_pool, scratch_pool));
+    SVN_ERR(svn_wc__pristine_get_path(&pristine_file, db,
+                                      local_abspath, checksum,
+                                      original_repos_relpath
+                                        ? original_repos_relpath
+                                        : local_abspath,
+                                      original_repos_relpath
+                                        ? original_revision
+                                        : revision,
+                                      rev_file_func, rev_file_baton,
+                                      scratch_pool, scratch_pool));
   else
     pristine_file = NULL;
 
@@ -1064,6 +1112,8 @@ svn_wc__diff_local_only_dir(svn_wc__db_t
                             const svn_diff_tree_processor_t *processor,
                             void *processor_parent_baton,
                             svn_boolean_t diff_pristine,
+                            rev_file_func_t rev_file_func,
+                            void *rev_file_baton,
                             svn_cancel_func_t cancel_func,
                             void *cancel_baton,
                             apr_pool_t *scratch_pool)
@@ -1221,6 +1271,8 @@ svn_wc__diff_local_only_dir(svn_wc__db_t
                                                    moved_from_relpath,
                                                    processor, pdb,
                                                    diff_pristine,
+                                                   rev_file_func,
+                                                   rev_file_baton,
                                                    cancel_func, cancel_baton,
                                                    scratch_pool));
               break;
@@ -1234,6 +1286,8 @@ svn_wc__diff_local_only_dir(svn_wc__db_t
                                                       moved_from_relpath,
                                                       processor, pdb,
                                                       diff_pristine,
+                                                      rev_file_func,
+                                                      rev_file_baton,
                                                       cancel_func,
                                                       cancel_baton,
                                                       iterpool));
@@ -1353,6 +1407,7 @@ handle_local_only(struct dir_baton_t *pb
                       moved_from_relpath,
                       eb->processor, pb->pdb,
                       eb->diff_pristine,
+                      eb->rev_file_func, eb->rev_file_baton,
                       eb->cancel_func, eb->cancel_baton,
                       scratch_pool));
     }
@@ -1364,6 +1419,7 @@ handle_local_only(struct dir_baton_t *pb
                       moved_from_relpath,
                       eb->processor, pb->pdb,
                       eb->diff_pristine,
+                      eb->rev_file_func, eb->rev_file_baton,
                       eb->cancel_func, eb->cancel_baton,
                       scratch_pool));
 
@@ -1378,6 +1434,8 @@ svn_wc__diff_base_only_file(svn_wc__db_t
                             svn_revnum_t revision,
                             const svn_diff_tree_processor_t *processor,
                             void *processor_parent_baton,
+                            rev_file_func_t rev_file_func,
+                            void *rev_file_baton,
                             apr_pool_t *scratch_pool)
 {
   svn_wc__db_status_t status;
@@ -1415,9 +1473,11 @@ svn_wc__diff_base_only_file(svn_wc__db_t
   if (skip)
     return SVN_NO_ERROR;
 
-  SVN_ERR(svn_wc__db_pristine_get_path(&pristine_file,
-                                       db, local_abspath, checksum,
-                                       scratch_pool, scratch_pool));
+  SVN_ERR(svn_wc__pristine_get_path(&pristine_file,
+                                    db, local_abspath, checksum,
+                                    local_abspath, revision,
+                                    rev_file_func, rev_file_baton,
+                                    scratch_pool, scratch_pool));
 
   SVN_ERR(processor->file_deleted(relpath,
                                   left_src,
@@ -1438,6 +1498,8 @@ svn_wc__diff_base_only_dir(svn_wc__db_t
                            svn_depth_t depth,
                            const svn_diff_tree_processor_t *processor,
                            void *processor_parent_baton,
+                           rev_file_func_t rev_file_func,
+                           void *rev_file_baton,
                            svn_cancel_func_t cancel_func,
                            void *cancel_baton,
                            apr_pool_t *scratch_pool)
@@ -1507,6 +1569,8 @@ svn_wc__diff_base_only_dir(svn_wc__db_t
                                                     child_relpath,
                                                     revision,
                                                     processor, dir_baton,
+                                                    rev_file_func,
+                                                    rev_file_baton,
                                                     iterpool));
                 break;
               case svn_node_dir:
@@ -1522,6 +1586,8 @@ svn_wc__diff_base_only_dir(svn_wc__db_t
                                                        revision,
                                                        depth_below_here,
                                                        processor, dir_baton,
+                                                       rev_file_func,
+                                                       rev_file_baton,
                                                        cancel_func,
                                                        cancel_baton,
                                                        iterpool));
@@ -1991,6 +2057,14 @@ open_file(const char *path,
   struct edit_baton_t *eb = pb->eb;
   struct file_baton_t *fb;
 
+  if (!eb->anchor_repo_relpath)
+    SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL,
+                                     &eb->anchor_repo_relpath,
+                                     NULL, NULL, NULL, NULL, NULL,
+                                     NULL, NULL, NULL, NULL, NULL,
+                                     NULL, NULL, eb->db, eb->anchor_abspath,
+                                     eb->pool, file_pool));
+
   fb = make_file_baton(path, FALSE, pb, file_pool);
   *file_baton = fb;
 
@@ -2041,9 +2115,10 @@ open_file(const char *path,
 
   fb->left_src = svn_diff__source_create(eb->revnum, fb->pool);
 
-  SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                                   NULL, NULL, NULL, &fb->base_checksum, NULL,
-                                   NULL, NULL, &fb->base_props, NULL,
+  SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, &fb->base_revison, NULL,
+                                   NULL, NULL, NULL, NULL, NULL, NULL,
+                                   &fb->base_checksum, NULL, NULL, NULL,
+                                   &fb->base_props, NULL,
                                    eb->db, fb->local_abspath,
                                    fb->pool, fb->pool));
 
@@ -2111,17 +2186,21 @@ apply_textdelta(void *file_baton,
                                                pool));
         }
 
-      SVN_ERR(svn_wc__db_pristine_read(&source, NULL,
-                                       eb->db, fb->local_abspath,
-                                       fb->base_checksum,
-                                       pool, pool));
+      SVN_ERR(svn_wc__pristine_get(&source, NULL,
+                                   eb->db, fb->local_abspath,
+                                   fb->base_checksum,
+                                   fb->repo_relpath, fb->base_revison,
+                                   eb->rev_file_func, eb->rev_file_baton,
+                                   pool, pool));
     }
   else if (fb->base_checksum)
     {
-      SVN_ERR(svn_wc__db_pristine_read(&source, NULL,
-                                       eb->db, fb->local_abspath,
-                                       fb->base_checksum,
-                                       pool, pool));
+      SVN_ERR(svn_wc__pristine_get(&source, NULL,
+                                   eb->db, fb->local_abspath,
+                                   fb->base_checksum,
+                                   fb->repo_relpath, fb->base_revison,
+                                   eb->rev_file_func, eb->rev_file_baton,
+                                   pool, pool));
     }
   else
     source = svn_stream_empty(pool);
@@ -2215,10 +2294,13 @@ close_file(void *file_baton,
     if (! repos_file)
       {
         assert(fb->base_checksum);
-        SVN_ERR(svn_wc__db_pristine_get_path(&repos_file,
-                                             eb->db, eb->anchor_abspath,
-                                             fb->base_checksum,
-                                             scratch_pool, scratch_pool));
+        SVN_ERR(svn_wc__pristine_get_path(&repos_file,
+                                          eb->db, eb->anchor_abspath,
+                                          fb->base_checksum,
+                                          fb->local_abspath, fb->base_revison,
+                                          eb->rev_file_func,
+                                          eb->rev_file_baton,
+                                          scratch_pool, scratch_pool));
       }
   }
 
@@ -2245,16 +2327,21 @@ close_file(void *file_baton,
       if (eb->diff_pristine)
         {
           const svn_checksum_t *checksum;
-          SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, NULL, NULL, NULL,
-                                                NULL, &checksum, NULL, NULL,
-                                                &local_props,
+          svn_revnum_t revision;
+
+          SVN_ERR(svn_wc__db_read_pristine_info(NULL, NULL, &revision, NULL,
+                                                NULL, NULL, &checksum, NULL,
+                                                NULL, &local_props,
                                                 eb->db, fb->local_abspath,
                                                 scratch_pool, scratch_pool));
           assert(checksum);
-          SVN_ERR(svn_wc__db_pristine_get_path(&localfile,
-                                               eb->db, eb->anchor_abspath,
-                                               checksum,
-                                               scratch_pool, scratch_pool));
+          SVN_ERR(svn_wc__pristine_get_path(&localfile,
+                                            eb->db, eb->anchor_abspath,
+                                            checksum,
+                                            fb->local_abspath, revision,
+                                            eb->rev_file_func,
+                                            eb->rev_file_baton,
+                                            scratch_pool, scratch_pool));
         }
       else
         {
@@ -2387,6 +2474,8 @@ svn_wc__get_diff_editor(const svn_delta_
                         svn_boolean_t server_performs_filtering,
                         const apr_array_header_t *changelist_filter,
                         const svn_diff_tree_processor_t *diff_processor,
+                        rev_file_func_t rev_file_func,
+                        void *rev_file_baton,
                         svn_cancel_func_t cancel_func,
                         void *cancel_baton,
                         apr_pool_t *result_pool,
@@ -2420,6 +2509,7 @@ svn_wc__get_diff_editor(const svn_delta_
                           diff_processor,
                           depth, ignore_ancestry,
                           use_text_base, reverse_order,
+                          rev_file_func, rev_file_baton,
                           cancel_func, cancel_baton,
                           result_pool));
 



Mime
View raw message