~ubuntu-branches/ubuntu/trusty/subversion/trusty-proposed

« back to all changes in this revision

Viewing changes to debian/svn_1.5_releasenotes.html

  • Committer: Package Import Robot
  • Author(s): Andy Whitcroft
  • Date: 2012-06-21 15:36:36 UTC
  • mfrom: (0.4.13 sid)
  • Revision ID: package-import@ubuntu.com-20120621153636-amqqmuidgwgxz1ly
Tags: 1.7.5-1ubuntu1
* Merge from Debian unstable.  Remaining changes:
  - Create pot file on build.
  - Build a python-subversion-dbg package.
  - Build-depend on python-dbg.
  - Build-depend on default-jre-headless/-jdk.
  - Do not apply java-build patch.
  - debian/rules: Manually create the doxygen output directory, otherwise
    we get weird build failures when running parallel builds.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
 
<html xmlns="http://www.w3.org/1999/xhtml">
4
 
<head>
5
 
<style type="text/css"> /* <![CDATA[ */
6
 
  @import "branding/css/tigris.css";
7
 
  @import "branding/css/inst.css";
8
 
  /* ]]> */</style>
9
 
<link rel="stylesheet" type="text/css" media="print"
10
 
  href="branding/css/print.css"/>
11
 
<script type="text/javascript" src="branding/scripts/tigris.js"></script>
12
 
<title>Subversion 1.5 Release Notes</title>
13
 
</head>
14
 
 
15
 
<body>
16
 
<div class="app">
17
 
 
18
 
<h1 style="text-align: center">Subversion 1.5 Release Notes</h1>
19
 
 
20
 
<div class="h2" id="news" title="news">
21
 
<h2>What's New in Subversion 1.5</h2>
22
 
 
23
 
<ul>
24
 
  <li><a href="#merge-tracking"
25
 
      >Merge tracking (foundational)</a></li>
26
 
  <li><a href="#sparse-checkouts"
27
 
      >Sparse checkouts (via new <tt>--depth</tt> option)</a></li>
28
 
  <li><a href="#interactive-conflict-resolution"
29
 
      >Interactive conflict resolution</a></li>
30
 
  <li><a href="#changelists"
31
 
      >Changelist support</a></li>
32
 
  <li><a href="#externals"
33
 
      >Relative URLs, peg revisions in <tt>svn:externals</tt></a></li>
34
 
  <li><a href="#cyrus-sasl"
35
 
      >Cyrus SASL support for ra_svn and <tt>svnserve</tt></a></li>
36
 
  <li><a href="#fsfs-sharding"
37
 
      >Improved support for large deployments on FSFS, via sharding</a></li>
38
 
  <li><a href="#fsfs-isolate-immutable"
39
 
      >Improved FSFS optimizability, via immutable file isolation</a></li>
40
 
  <li><a href="#webdav-proxy"
41
 
      >WebDAV transparent write-through proxy</a></li>
42
 
  <li><a href="#copy-move-improvements"
43
 
      >Improvements to <tt>copy</tt> and <tt>move</tt></a></li>
44
 
  <li><a href="#cancellation-improvements"
45
 
      >Speed improvements, cancellation response improvements</a></li>
46
 
  <li><a href="#dav-modules"
47
 
      >Easier to try experimental <tt>ra_serf</tt> DAV access module</a></li>
48
 
  <li><a href="#apis"
49
 
      >API changes, improvements, and much language bindings work</a></li>
50
 
  <li><a href="#bug-fixes"
51
 
      >More than 150 new bug fixes, enhancements</a></li>
52
 
</ul>
53
 
 
54
 
<p>Subversion 1.5 is a superset of all previous Subversion releases,
55
 
and is considered the current "best" release.  Any feature or bugfix
56
 
in 1.0.x through 1.4.x is also in 1.5, but 1.5 contains features and
57
 
bugfixes not present in any earlier release.  The new features will
58
 
eventually be documented in a 1.5 version of the free Subversion book,
59
 
see <a href="http://svnbook.red-bean.com" >svnbook.red-bean.com</a>.</p>
60
 
 
61
 
</div>  <!-- news -->
62
 
 
63
 
<div class="h2" id="compatibility" title="compatibility">
64
 
<h2>Compatibility Concerns</h2>
65
 
 
66
 
<p>Older clients and servers interoperate transparently with 1.5
67
 
servers and clients.  However, some of the new 1.5 features (e.g., <a
68
 
href="#merge-tracking" >merge tracking</a>) may not be available
69
 
unless both client and server are the latest version .  There are also
70
 
cases (e.g., <a href="#sparse-checkouts">sparse checkouts</a>) where a
71
 
new feature will work but will run less efficiently if the client is
72
 
new and the server old.</p>
73
 
 
74
 
<p>There is <strong>no need</strong> to dump and reload your
75
 
repositories.  Subversion 1.5 can read repositories created by earlier
76
 
versions.  To upgrade an existing installation, just install the
77
 
newest libraries and binaries on top of the older ones.</p>
78
 
 
79
 
<p>Subversion 1.5 maintains API/ABI compatibility with earlier
80
 
releases, by only adding new functions, never removing old ones.  A
81
 
program written to the 1.0, 1.1, 1.2, 1.3, or 1.4 API can both compile
82
 
and run using 1.5 libraries.  However, a program written for 1.5
83
 
cannot necessarily compile or run against older libraries.</p>
84
 
 
85
 
<div class="h3" id="new-feature-compatibility-table"
86
 
             title="new-feature-compatibility-table">
87
 
<h3>New Feature Compatibility Table</h3>
88
 
<table border="1">
89
 
  <tr>
90
 
    <th>New Feature</th>
91
 
    <th>Minimum Client</th>
92
 
    <th>Minimum Server</th>
93
 
    <th>Minimum Repository</th>
94
 
    <th>Notes</th></tr>
95
 
  <tr>
96
 
    <td><a href="#merge-tracking">Merge tracking</a></td>
97
 
    <td>1.5</td>
98
 
    <td>1.5</td>
99
 
    <td>1.5</td>
100
 
    <td></td></tr>
101
 
  <tr>
102
 
    <td><a href="#sparse-checkouts">Sparse checkouts</a></td>
103
 
    <td>1.5</td>
104
 
    <td>any</td>
105
 
    <td>any</td>
106
 
    <td></td></tr>
107
 
  <tr>
108
 
    <td><a href="#interactive-conflict-resolution">Interactive conflict resolution</a></td>
109
 
    <td>1.5</td>
110
 
    <td>any</td>
111
 
    <td>any</td>
112
 
    <td></td></tr>
113
 
  <tr>
114
 
    <td><a href="#changelists">Changelist support</a></td>
115
 
    <td>1.5</td>
116
 
    <td>any</td>
117
 
    <td>any</td>
118
 
    <td></td></tr>
119
 
  <tr>
120
 
    <td><a href="#externals">Relative URLs, peg revisions in <tt>svn:externals</tt></a></td>
121
 
    <td>1.5</td>
122
 
    <td>any</td>
123
 
    <td>any</td>
124
 
    <td></td></tr>
125
 
  <tr>
126
 
    <td><a href="#cyrus-sasl"> Cyrus SASL support for ra_svn and <tt>svnserve</tt></a></td>
127
 
    <td>any<sup>*</sup>, 1.5</td>
128
 
    <td>any<sup>*</sup>, 1.5</td>
129
 
    <td>any</td>
130
 
    <td><sup>*</sup>Limited, see <a href="#sasl-compatibility">SASL&nbsp;and&nbsp;<code>svn://</code>&nbsp;compatibility</a></td></tr>
131
 
  <tr>
132
 
    <td><a href="#fsfs-sharding"> Improved support for large deployments on FSFS, via sharding</a></td>
133
 
    <td>any<sup>*</sup>, 1.5</td>
134
 
    <td>1.5</td>
135
 
    <td>1.5</td>
136
 
    <td><sup>*</sup>1.5 required for <code>file://</code> compatibility</td></tr>
137
 
  <tr>
138
 
    <td><a href="#fsfs-isolate-immutable">Improved FSFS optimizability, via immutable file isolation</a></td>
139
 
    <td>any<sup>*</sup>, 1.5</td>
140
 
    <td>1.5</td>
141
 
    <td>1.5</td>
142
 
    <td><sup>*</sup>1.5 required for <code>file://</code> compatibility</td></tr>
143
 
  <tr>
144
 
    <td><a href="#webdav-proxy">WebDAV transparent write-through proxy</a></td>
145
 
    <td>any</td>
146
 
    <td>1.5<sup>*</sup></td>
147
 
    <td>any</td>
148
 
    <td><sup>*</sup>Apache 2.2 server also required</td></tr>
149
 
  <tr>
150
 
    <td><a href="#copy-move-improvements">Improvements to <tt>copy</tt> and <tt>move</tt></a></td>
151
 
    <td>1.5</td>
152
 
    <td>any<sup>*</sup>, 1.5</td>
153
 
    <td>any</td>
154
 
    <td><sup>*</sup>Limited, see <a href="#copy-move-improvements">Copy/move<tt>-</tt>related&nbsp;improvements</a></td></tr>
155
 
  <tr>
156
 
    <td><a href="#cancellation-improvements">Speed improvements, cancellation response improvements</a></td>
157
 
    <td>1.5</td>
158
 
    <td>any</td>
159
 
    <td>any</td>
160
 
    <td></td></tr>
161
 
  <tr>
162
 
    <td><a href="#dav-modules">Easier to try experimental <tt>ra_serf</tt> DAV access module</a></td>
163
 
    <td>1.5</td>
164
 
    <td>any</td>
165
 
    <td>any</td>
166
 
    <td></td></tr>
167
 
</table>
168
 
 
169
 
</div>  <!-- new-feature-compatibility-table -->
170
 
 
171
 
<div class="h3" id="wc-and-repos-format-change"
172
 
             title="wc-and-repos-format-change">
173
 
<h3>Working Copy and Repository Format Changes</h3>
174
 
 
175
 
<p>The working copy format has been upgraded.  This means that 1.4 and
176
 
older Subversion clients will <em>not</em> be able to work with
177
 
working copies produced by Subversion 1.5.  Working copies are <a
178
 
href="#wc-upgrades" >upgraded automatically</a>.</p>
179
 
 
180
 
<p>Similarly, the repository format has changed, meaning that 1.4 and
181
 
older versions of Subversion tools that normally access a repository
182
 
directly (e.g. <tt>svnserve</tt>, <tt>mod_dav_svn</tt>,
183
 
<tt>svnadmin</tt>) won't be able to read a repository created by
184
 
Subversion 1.5.  But, repositories are <a href="#repos-upgrades"
185
 
><strong>not</strong> upgraded automatically</a>.</p>
186
 
 
187
 
<div class="h4" id="wc-upgrades" title="wc-upgrades">
188
 
<h4>Working Copy Upgrades</h4>
189
 
 
190
 
<p><strong>WARNING:</strong> if a Subversion 1.5 client encounters a
191
 
pre-1.5 working copy, it will <em>automatically</em> upgrade the
192
 
working copy format as soon as it touches it, making it unreadable by
193
 
older Subversion clients.  If you are using several versions of
194
 
Subversion on your machine, be careful about which version you use in
195
 
which working copy, to avoid accidentally upgrading a working copy.
196
 
(But note that this "auto upgrade" behavior does <em>not</em> occur
197
 
with the <a href="#repos-upgrades" >repositories</a>, only working
198
 
copies.)</p>
199
 
 
200
 
<p>If you accidentally upgrade a 1.4 working copy to 1.5, and wish to
201
 
downgrade back to 1.4, use the <a
202
 
href="http://svn.collab.net/repos/svn/trunk/tools/client-side/change-svn-wc-format.py"
203
 
><tt>change-svn-wc-format.py</tt></a> script.  See <a
204
 
href="http://subversion.tigris.org/faq.html#working-copy-format-change"
205
 
>this FAQ entry</a> for details, and run the script with the
206
 
<code>--help</code> option for usage instructions.</p>
207
 
 
208
 
</div>  <!-- wc-upgrades -->
209
 
 
210
 
<div class="h4" id="repos-upgrades" title="repos-upgrades">
211
 
<h4>Repository Upgrades</h4>
212
 
 
213
 
<p>The Subversion 1.5 server works with 1.4 and older repositories,
214
 
and it will <em>not</em> upgrade such repositories to 1.5 unless
215
 
specifically requested to via the
216
 
<strong><code>svnadmin&nbsp;upgrade</code></strong> command.  This means
217
 
that some of the new 1.5 features will not become available simply by
218
 
upgrading your server: you will also have to upgrade your
219
 
repositories.  (We decided not to auto-upgrade repositories because we
220
 
didn't want 1.5 to silently make repositories unusable by
221
 
1.4&nbsp;&mdash;&nbsp;that step should be a conscious decision on the
222
 
part of the repository admin.)</p>
223
 
 
224
 
<p>After running <strong><code>svnadmin&nbsp;upgrade</code></strong>,
225
 
you may wish to also run the <a
226
 
href="http://svn.collab.net/repos/svn/trunk/tools/server-side/svn-populate-node-origins-index.c"
227
 
>svn-populate-node-origins-index</a> program on the repository.
228
 
Subversion 1.5 maintains a node-origins index for each repository, and
229
 
builds the index lazily as the information is needed.  But for old
230
 
repositories with lots of revisions, it's better to create the index
231
 
in one step, using the aforementioned tool, than to have live queries
232
 
be slower until the index has built itself.  See <a
233
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=3024" >issue
234
 
#3024</a> for details.</p>
235
 
 
236
 
</div>  <!-- repos-upgrades -->
237
 
 
238
 
</div>  <!-- wc-and-repos-format-change -->
239
 
 
240
 
<div class="h3" id="output-changes" title="output-changes">
241
 
<h3>Command Line Output Changes</h3>
242
 
 
243
 
<p>Although we try hard to keep output from the command line programs
244
 
compatible between releases, new information sometimes has to be
245
 
added.  This can break scripts that rely on the exact format of the
246
 
output.  Unfortunately, we are not able to enumerate all of the output
247
 
changes in 1.5, but one of them is that conflict markers in files now
248
 
match the file's defined eol-style.</p>
249
 
 
250
 
</div>  <!-- output-changes -->
251
 
 
252
 
<div class="h3" id="sasl-compatibility" title="sasl-compatibility">
253
 
<h3>SASL and <code>svn://</code> compatibility</h3>
254
 
 
255
 
<p>All 1.x clients, with or without Cyrus SASL support, will be able to
256
 
authenticate against all 1.x servers that do not have Cyrus SASL enabled.
257
 
Note that the <tt>CRAM-MD5</tt> and <tt>ANONYMOUS</tt> mechanisms are
258
 
built into Subversion, so you'll be able to use them even if the
259
 
corresponding Cyrus SASL plugins are missing.</p>
260
 
  
261
 
<p>1.x clients without Cyrus SASL support will be able to authenticate
262
 
against 1.5+ servers with SASL enabled, provided the server allows the
263
 
<tt>CRAM-MD5</tt> and/or <tt>ANONYMOUS</tt> mechanisms.</p>
264
 
  
265
 
<p>1.5+ clients with Cyrus SASL support will be able to authenticate against
266
 
1.5+ servers with SASL enabled, provided at least one of the mechanisms
267
 
supported by the server is also supported by the client.</p>
268
 
 
269
 
<p>See <a href="#cyrus-sasl" >this section</a> for more information on
270
 
using Cyrus SASL with Subversion.</p>
271
 
 
272
 
</div>  <!-- sasl-compatibility -->
273
 
 
274
 
<div class="h3" id="revprops-compatibility" title="revprops-compatibility">
275
 
<h3>Custom revprops may now need to be examined by <tt>pre-commit</tt>
276
 
  hooks</h3>
277
 
 
278
 
<p>Each revision in Subversion has a set of <q>revision properties</q>
279
 
associated with it; in addition to the standard log message, author,
280
 
and date, arbitrary user-defined properties can be set.  These
281
 
properties are not themselves versioned, so there is no way to revert
282
 
changes to them.  Because of this, you cannot modify revprops on a
283
 
committed revision without setting up a <tt>pre-revprop-change</tt>
284
 
hook on the server.  Before Subversion 1.5, only the three standard
285
 
revprops could be set at commit time; administrators using hooks to
286
 
control the contents of the three standard revprops needed to check
287
 
during <tt>pre-commit</tt> and <tt>pre-revprop-change</tt>, but for
288
 
custom revprops, only <tt>pre-revprop-change</tt> appeared
289
 
relevant.</p>
290
 
 
291
 
<p>Subversion 1.5 adds
292
 
a <a href="#commit-revprops"><tt>--with-revprop</tt> option to <tt>svn
293
 
commit</tt></a> which allows users to specify revprops for revisions
294
 
as they commit them.  Thus, in Subversion 1.5, it is possible for
295
 
revproperties to be set on revisions without
296
 
any <tt>pre-revprop-change</tt>.  The <tt>pre-commit</tt> hook can
297
 
examine the transaction's revision properties before it is committed
298
 
(just like many servers already use <tt>pre-commit</tt> to check for
299
 
properly formatted log messages, e.g.).</p>
300
 
 
301
 
<p>This means that if you previously relied
302
 
on <tt>pre-revprop-change</tt> to control the ability to write to
303
 
revprops (as opposed to just keeping track of their history), you may
304
 
want to add similar controls to <tt>pre-commit</tt>.</p>
305
 
 
306
 
</div>  <!-- revprops-compatibility -->
307
 
 
308
 
 
309
 
</div>  <!-- compatibility -->
310
 
 
311
 
<div class="h2" id="new-features" title="new-features">
312
 
<h2>New Features</h2>
313
 
 
314
 
<div class="h3" id="merge-tracking" title="merge-tracking">
315
 
<h3>Merge tracking (foundational) (<em>client and server</em>)</h3>
316
 
 
317
 
<p><em>Merge tracking</em> means Subversion keeps track of what
318
 
changes have been merged where.  This reduces the overhead involved in
319
 
maintaining branches, and gives users a way to inquire what changes
320
 
are merged&nbsp;&mdash;&nbsp;or are available to be
321
 
merged&nbsp;&mdash;&nbsp;on different lines of development.</p>
322
 
 
323
 
<p>The merge tracking support in Subversion 1.5 is "foundational": its
324
 
basic functionality is implemented, but there are still parts of our
325
 
<a href="http://subversion.tigris.org/merge-tracking/" >original
326
 
spec</a> that remain to be done, and merging is sometimes too slow.
327
 
There will be merge tracking improvements in Subversion 1.5.1 and
328
 
afterwards.  In the meantime:</p>
329
 
 
330
 
<ul>
331
 
<li><p>Take a look at <a href="#mt-known-issues"
332
 
    >the list of known issues</a></p></li>
333
 
<li><p>Read <a
334
 
    href="http://svnbook.red-bean.com/nightly/en/svn.branchmerge.advanced.html#svn.branchmerge.advanced.finalword"
335
 
    >"The Final Word on Merge Tracking"</a> in the Subversion Book</p></li> 
336
 
<li><p>Read <a
337
 
    href="http://www.collab.net/community/subversion/articles/merge-info.html"
338
 
    >"Understanding the internals of Subversion's merge tracking feature"</a>
339
 
    by Paul Burba</p></li>
340
 
</ul>
341
 
 
342
 
<div class="h4" id="mt-overview" title="mt-overview">
343
 
<h4>Overview</h4>
344
 
 
345
 
<p>Subversion's merge tracking is designed to:</p>
346
 
 
347
 
<ul>
348
 
<li>Reduce the bookkeeping overhead for branch maintenance</li>
349
 
<li>Avoid common cases of the "repeated merge" problem</li>
350
 
<li>Allow for cherry-picking of changes</li>
351
 
</ul>
352
 
 
353
 
<p>Each changeset is identified by its revision number, and merged
354
 
changesets are recorded in the new
355
 
<strong><code>svn:mergeinfo</code></strong> property (known colloquially
356
 
as "mergeinfo") set on the destination of the merge.  Subversion keeps
357
 
mergeinfo up-to-date automatically, but there is also a way to <a
358
 
href="#mt-record-only" >record/unrecord merges manually</a>, since
359
 
there will always be cases where a human knows something that
360
 
Subversion doesn't.</p>
361
 
 
362
 
</div>  <!-- mt-overview -->
363
 
 
364
 
<div class="h4" id="mt-ui" title="mt-ui">
365
 
<h4>User interface</h4>
366
 
 
367
 
<p>Merging changes from (say) trunk to a branch no longer requires
368
 
that you specify the revision range.  Instead, each time you want to
369
 
sync up with trunk, you can just do:</p>
370
 
 
371
 
<pre>   $ cd BRANCH_WORKING_COPY
372
 
   $ svn merge URL_TO_TRUNK</pre>
373
 
 
374
 
<p>Subversion will figure out what changes from URL_TO_TRUNK have not
375
 
yet been merged and pull in just those changes.  When it's time to
376
 
merge the branch back to trunk, do this:</p>
377
 
 
378
 
<pre>   $ cd TRUNK_WORKING_COPY
379
 
   $ svn merge --reintegrate URL_TO_BRANCH</pre>
380
 
 
381
 
<p>Below is a more formal description of all the
382
 
merge-tracking-related interface changes.</p>
383
 
 
384
 
<p>The <strong><code>svn&nbsp;merge</code></strong> command takes two new
385
 
options: <strong><code>--record-only</code></strong> and
386
 
<strong><code>--reintegrate</code></strong>.</p>
387
 
 
388
 
<div id="mt-record-only" title="mt-record-only">
389
 
<p>The --record-only option works with -r and does exactly what you
390
 
think it does: it marks a revision as merged (or unmerged, if using
391
 
the "-" revision number negation syntax), without actually changing
392
 
anything besides the mergeinfo.  For example, this would be useful
393
 
when someone has hand-edited a file in such a way as to effectively
394
 
incorporate a change that was already made somewhere else.  Rather
395
 
than have the original change be ported over in the next
396
 
synchronization merge, thus risking textual conflicts wherever the two
397
 
versions trivially differ, you can just record the change as already
398
 
merged.  (See <a
399
 
href="http://subversion.tigris.org/merge-tracking/requirements.html#manual-merge"
400
 
>the merge-tracking requirements</a>, and <a
401
 
href="http://svnbook.red-bean.com/nightly/en/svn.branchmerge.advanced.html#svn.branchmerge.advanced.blockchanges"
402
 
>Blocking Changes</a> in the Subversion book, for more details.)</p>
403
 
</div>  <!-- mt-record-only -->
404
 
 
405
 
<div id="mt-reintegrate" title="mt-reintegrate">
406
 
<p>The --reintegrate option is used when merging a branch back to
407
 
trunk; it checks for some common safeguard conditions and then does
408
 
the merge in a fast and efficient way.  See <a
409
 
href="http://svnbook.red-bean.com/nightly/en/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.stayinsync"
410
 
>Keeping a branch in sync</a> in the Subversion book for more.</p>
411
 
</div>  <!-- mt-reintegrate -->
412
 
 
413
 
<p>The new <strong><code>svn&nbsp;mergeinfo</code></strong> command can
414
 
show which changesets a directory has absorbed and which changesets
415
 
it's still eligible to receive.  See <a
416
 
href="http://svnbook.red-bean.com/nightly/en/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.mergeinfo"
417
 
>Mergeinfo and Previews</a> in the Subversion book for more information.</p>
418
 
 
419
 
<p>The <strong><code>svn&nbsp;log</code></strong> and
420
 
<strong><code>svn&nbsp;blame</code></strong> commands take a new
421
 
<strong><code>-g</code></strong>
422
 
(<strong><code>--use-merge-history</code></strong>) option, which tells
423
 
them to take mergeinfo into account.  Without this option, they won't.</p>
424
 
 
425
 
<p>The reason for the -g option is that it is sometimes useful to
426
 
ignore merge history.  In blame output you sometimes want to see the
427
 
person B who merged a change, though other times you want to see the
428
 
person A who originally wrote the change that B later merged; use -g
429
 
to get the latter information.  In log output, you sometimes want to
430
 
see exactly the revisions that were committed on a given line of
431
 
development, though other times you want to see, as part of the same
432
 
output, the original changes that were later ported as merge
433
 
revisions; again, -g includes the latter information (tagged with
434
 
lines that say "<tt>Merged via: </tt>" followed by the revision number
435
 
in which the merge took place).  See <a
436
 
href="http://svnbook.red-bean.com/nightly/en/svn.branchmerge.advanced.html#svn.branchmerge.advanced.logblame"
437
 
>Merge-Sensitive Logs and Annotations</a> in the Subversion book for
438
 
more details.</p>
439
 
 
440
 
</div>  <!-- mt-ui -->
441
 
 
442
 
<div class="h4" id="mt-compatibility" title="mt-compatibility">
443
 
<h4>Merge tracking and compatibility</h4>
444
 
 
445
 
<p>As described earlier, merge-tracking is not supported unless you <a
446
 
href="#repos-upgrades" >upgrade the repository</a> as well as the
447
 
server.</p>
448
 
 
449
 
<p>If you were using the <a
450
 
href="http://svn.collab.net/repos/svn/trunk/contrib/client-side/svnmerge/"
451
 
>svnmerge</a> wrapper program to do merging, and now want to switch to
452
 
using Subversion 1.5's native merge-tracking, then you should use the
453
 
<a
454
 
href="http://svn.collab.net/repos/svn/trunk/contrib/client-side/svnmerge/svnmerge-migrate-history.py"
455
 
>svnmerge-migrate-history.py</a> script to convert svnmerge's custom
456
 
properties to the <tt>svn:mergeinfo</tt> properties that Subversion
457
 
itself now uses.</p>
458
 
 
459
 
</div>  <!-- mt-compatibility -->
460
 
 
461
 
<div class="h4" id="mt-known-issues" title="mt-known-issues">
462
 
<h4>Known Issues</h4>
463
 
 
464
 
<p>There are still known issues with merge tracking in 1.5.0.  We're
465
 
working on the most important ones first, which are:</p>
466
 
 
467
 
<ul>
468
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3128"
469
 
    >issue #3128</a>: <code>merge --reintegrate</code> should handle
470
 
    renames better</li>
471
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2897"
472
 
    >issue #2897</a>: proper support for reflective merges</li>
473
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3126"
474
 
    >issue #3126</a>: better change-availability reporting
475
 
    (<code>svn&nbsp;mergeinfo</code> shows too few or too many eligible
476
 
    revisions)</li>
477
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2837"
478
 
    >issue #2837</a>: allow merge tracking to be useful when performing
479
 
    cyclic merging</li>
480
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3056"
481
 
    >issue #3056</a>: avoid repeat merge in an intelligent way</li>
482
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2898"
483
 
    >issue #2898</a>: handle mergeinfo when deleting/adding children
484
 
    you don't have access to</li>
485
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3067"
486
 
    >issue #3067</a>: subtrees that don't exist at the start or end of
487
 
    a merge range shouldn't break the merge</li>
488
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3157"
489
 
    >issue #3157</a>: merging a change from a path's natural history
490
 
    creates self-referential mergeinfo</li>
491
 
<li><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3174"
492
 
    >issue #3174</a>: merge algorithm chokes on subtrees needing
493
 
    special attention that have been renamed</li>
494
 
</ul>
495
 
 
496
 
<p>(See also the <a
497
 
href="http://subversion.tigris.org/issues/buglist.cgi?issue_status=UNCONFIRMED&amp;issue_status=NEW&amp;issue_status=STARTED&amp;issue_status=REOPENED&amp;keywords=merge-tracking&amp;keywords_type=anytokens"
498
 
>list of merge-tracking-related open issues</a> and the <a
499
 
href="http://subversion.tigris.org/issues/buglist.cgi?issue_status=UNCONFIRMED&amp;issue_status=NEW&amp;issue_status=STARTED&amp;issue_status=REOPENED&amp;short_desc=merg&amp;short_desc_type=substring"
500
 
>list of all merge-related open issues</a>, though note that not all
501
 
of merge-related issues are about merge-tracking and many predate it.)</p>
502
 
 
503
 
<p><a href="http://subversion.tigris.org/issues/show_bug.cgi?id=3157"
504
 
>Issue #3157</a> is particularly easy to run into, so here's a more
505
 
detailed explanation of what the issue is and how to work around
506
 
it:</p>
507
 
 
508
 
<p>Merge tracking information currently can include the "natural
509
 
history" of a path.  One situation where this happens is when creating
510
 
a <tt>branch</tt> from <tt>trunk</tt> at a certain revision <tt>X</tt>
511
 
and later merging all changes from <tt>branch</tt> back to
512
 
<tt>trunk</tt>, without explicitly limiting the merge range and
513
 
without using the <a href="#mt-reintegrate"
514
 
><code>--reintegrate</code> option</a>.  Afterwards, the merge
515
 
tracking information on <tt>trunk</tt> will list revisions before
516
 
<tt>X</tt>.  This does no harm to future merge operations, but
517
 
thereafter <code>svn log -g</code> on <tt>trunk</tt> will report these
518
 
revisions from the "natural history", which is typically not expected.
519
 
This is because <code>svn log -g</code> uses the merge tracking
520
 
information from previous revisions (not only from HEAD).</p>
521
 
 
522
 
<p>Note that this should not be a problem with release branches (also
523
 
called "maintenance branches"), because one typically does not merge
524
 
them back to trunk.  Instead, recommended practice is for new changes
525
 
to enter on trunk and be ported outward to the branches that need the
526
 
changes.  However, you could run into this problem with a feature
527
 
branch, which would be merged back to trunk once, at the end of the
528
 
branch's lifetime.</p>
529
 
 
530
 
<p>One workaround is to correct the merge tracking information before
531
 
committing the merged revision, by reverse merging the "natural
532
 
history" information: <code>svn merge --record-only -rX:1</code>.
533
 
Another solution is to avoid this situation entirely, by explicitly
534
 
specifying merge ranges in the first place, e.g.: <tt>-rX:HEAD</tt>.
535
 
See <a
536
 
href="http://subversion.tigris.org/servlets/ReadMsg?listName=dev&amp;msgNo=139379"
537
 
>this mail</a> for more information.</p>
538
 
 
539
 
<p>When merging a feature branch, the best solution is to <a
540
 
href="#mt-reintegrate" >use the <code>--reintegrate</code> option</a>;
541
 
then this problem won't happen in the first place.</p>
542
 
 
543
 
</div>  <!-- mt-known-issues -->
544
 
 
545
 
<div class="h4" id="mt-further-reading" title="mt-further-reading">
546
 
<h4>Further reading</h4>
547
 
 
548
 
<p>For more on merge-tracking in Subversion 1.5, see:</p>
549
 
 
550
 
<ul>
551
 
<li><a href="http://svnbook.red-bean.com/nightly/en/svn.branchmerge.html"
552
 
    >Chapter 4: Branching and Merging</a> in the Subversion book
553
 
</li>
554
 
<li><a href="http://blog.red-bean.com/sussman/?p=92" >Subversion 1.5
555
 
    merge-tracking in a nutshell</a> (blog post by Ben Collins-Sussman)
556
 
</li>
557
 
<li><a href="http://subversion.tigris.org/merge-tracking/" >The merge
558
 
    tracking design documents</a>
559
 
    (requirements, use cases, functional spec, design)
560
 
</li>
561
 
</ul>
562
 
 
563
 
</div> <!-- mt-further-reading -->
564
 
 
565
 
</div> <!-- merge-tracking -->
566
 
 
567
 
<div class="h3" id="sparse-checkouts" title="sparse-checkouts">
568
 
<h3>Sparse checkouts  (<em>client and server</em>)</h3>
569
 
 
570
 
<p>Many users have very large trees of which they only want to
571
 
checkout certain parts.  In previous versions of Subversion,
572
 
<code>checkout -N</code> was not really up to this task.  Subversion
573
 
1.5 introduces the <strong><code>--depth</code></strong> option to the
574
 
<strong><code>checkout</code></strong>,
575
 
<strong><code>switch</code></strong>, and
576
 
<strong><code>update</code></strong> subcommands.  This option
577
 
replaces <code>-N</code>, and allows users to construct working
578
 
copies containing just what's needed, leaving out everything else.</p>
579
 
 
580
 
<div class="h4" id="sc-depth" title="sc-depth">
581
 
<h4>Depth overview</h4>
582
 
<p>Each directory now understands the notion of <em>depth</em>, which has
583
 
four possible values: <tt>empty</tt>, <tt>files</tt>, <tt>immediates</tt>,
584
 
<tt>infinity</tt>.  The values are defined as follows:</p>
585
 
 
586
 
<table border="1">
587
 
<tr>
588
 
  <td><tt>empty</tt></td>
589
 
  <td>Updates will not pull in any files or subdirectories not already
590
 
    present.</td>
591
 
</tr>
592
 
<tr>
593
 
  <td><tt>files</tt></td>
594
 
  <td>Updates will pull in any files not already present, but not
595
 
    subdirectories.</td>
596
 
</tr>
597
 
<tr>
598
 
  <td><tt>immediates</tt></td>
599
 
  <td>Updates will pull in any files or subdirectories not already present;
600
 
    the new subdirectories will have depth-empty.</td>
601
 
</tr>
602
 
<tr>
603
 
  <td><tt>infinity</tt></td>
604
 
  <td>Updates will pull in any files or subdirectories not already present;
605
 
    the new subdirectories will have depth-infinity.  Equivalent to today's
606
 
    default update behavior.</td>
607
 
</tr>
608
 
</table>
609
 
 
610
 
<p>The <code>--depth</code> option sets depth values as it updates the working
611
 
copy, tweaking new subdirectories' depth values as described above.</p>
612
 
 
613
 
</div>  <!-- sc-depth -->
614
 
 
615
 
<div class="h4" id="sc-ui" title="sc-ui">
616
 
<h4>User Interface</h4>
617
 
<p>Affected commands:</p>
618
 
<ul>
619
 
  <li><code>checkout</code></li>
620
 
  <li><code>switch</code></li>
621
 
  <li><code>update</code></li>
622
 
  <li><code>status</code></li>
623
 
  <li><code>info</code></li>
624
 
</ul>
625
 
   
626
 
<p>The <code>-N</code> option becomes a synonym for <code>--depth=files</code>
627
 
for these commands.  This changes the existing <code>-N</code> behavior for
628
 
these commands, but in a trivial way (see below).</p>
629
 
 
630
 
<p><code>checkout</code> without <code>--depth</code> or
631
 
<code>-N</code> behaves the same as it does today.
632
 
<code>switch</code> and <code>update</code> without
633
 
<code>--depth</code> or <code>-N</code> behave the same way as today
634
 
if and only if the working copy is fully depth-infinity.
635
 
<code>switch</code> and <code>update</code> without
636
 
<code>--depth</code> or <code>-N</code> will <em>not</em> change depth
637
 
values (exception: a missing directory specified on the command line
638
 
will be pulled in).</p>
639
 
   
640
 
<p>Thus, <code>checkout</code> is identical to <code>checkout
641
 
--depth=infinity</code>, but <code>switch</code> and <code>update</code> are
642
 
not the same as <code>switch --depth=infinity</code> and <code>update
643
 
--depth=infinity</code>.  The former update entries according to existing depth
644
 
values, while the latter pull in everything.</p>
645
 
   
646
 
<p>To get started, run <code>checkout</code> with
647
 
<code>--depth=empty</code> or <code>--depth=files</code>.  If
648
 
additional files or directories are desired, pull them in with
649
 
<code>update</code> commands using appropriate <code>--depth</code>
650
 
options.  The <code>svn status</code> command should list the ambient
651
 
depths of directories, in addition to whatever other statuses are
652
 
listed.  The <code>svn info</code> command also lists ambient depth,
653
 
when invoked on a directory whose depth is not the default
654
 
(depth-infinity)</p>
655
 
 
656
 
<p><strong>Note:</strong> There is currently no <em>deselection</em>
657
 
interface for sparse checkouts&nbsp;&mdash;&nbsp;that is, there is no
658
 
command to unselect or "fold up" a subdirectory after you've brought
659
 
it into a sparse working copy (although there are some fairly easy
660
 
workarounds to achieve the same effect).  See <a
661
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=2843" >issue
662
 
#2843</a> for details.</p>
663
 
 
664
 
</div>  <!-- sc-ui -->
665
 
 
666
 
<div class="h4" id="sc-compat" title="sc-compat">
667
 
<h4>Compatibility with older servers</h4>
668
 
 
669
 
<p>The new <tt>--depth</tt> feature naturally requires the client to
670
 
be 1.5+, and will work most efficiently if the server is also 1.5+.
671
 
However, the client will still behave correctly if the server is 1.4.x
672
 
or lower; things will just be less efficient.</p>
673
 
 
674
 
<p>This is because older servers do not
675
 
understand&nbsp;&mdash;&nbsp;and therefore
676
 
ignore&nbsp;&mdash;&nbsp;what the client tells them about "depth".  So
677
 
when a client requests a depth shallower than depth-infinity, older
678
 
servers will send back more data than the client wants.  However, a
679
 
1.5+ client will know it's talking to an older server and filter out
680
 
this extra data.  Thus, operations may take a while, because the
681
 
server sends a lot of data over the network that the client then
682
 
ignores, but the final result on the client side will be the same.
683
 
(Note that older servers understand a <tt>recurse</tt> flag in the
684
 
network protocols, and 1.5+ clients send that flag based on the depth;
685
 
this alleviates some of the extra network traffic penalty.)</p>
686
 
 
687
 
</div>  <!-- sc-compat -->
688
 
 
689
 
<div class="h4" id="sc-further-reading" title="sc-further-reading">
690
 
<h4>Further reading</h4>
691
 
 
692
 
<ul>
693
 
<li>The <a
694
 
    href="http://svnbook.red-bean.com/nightly/en/svn.advanced.sparsedirs.html"
695
 
    >Sparse Directories</a> section in the Subversion book.
696
 
</li>
697
 
<li>The <a
698
 
    href="http://svn.collab.net/repos/svn/trunk/notes/sparse-directories.txt" 
699
 
    >design/implementation document</a> in the repository.</li>
700
 
</ul>
701
 
 
702
 
</div> <!-- sc-further-reading -->
703
 
 
704
 
</div> <!-- sparse-checkouts -->
705
 
 
706
 
<div class="h3" id="interactive-conflict-resolution"
707
 
             title="interactive-conflict-resolution">
708
 
<h3>Interactive Conflict Resolution (<em>client</em>)</h3>
709
 
 
710
 
<p>Conflict resolution is now done interactively by the command-line
711
 
client for the
712
 
<code>update</code>/<code>switch</code>/<code>merge</code>
713
 
subcommands, and the client library offers a callback function so
714
 
other clients can do similarly.</p>
715
 
 
716
 
<p>Here's an example using the command-line client:</p>
717
 
 
718
 
<pre>
719
 
   $ svn up
720
 
   U    contrib/client-side/svnmerge/svnmerge_test.py
721
 
   Conflict discovered in 'contrib/client-side/svnmerge/svnmerge.py'.
722
 
   Select: (p) postpone, (df) diff-full, (e) edit,
723
 
           (s) show all options: s
724
 
     (p)  postpone    - mark the conflict to be resolved later
725
 
     (df) diff-full   - show all changes made to merged file
726
 
     (e)  edit        - change merged file in an editor
727
 
     (r)  resolved    - accept merged version of file
728
 
     (mf) mine-full   - accept my version of entire file (ignore their changes)
729
 
     (tf) theirs-full - accept their version of entire file (lose my changes)
730
 
     (l)  launch      - launch external tool to resolve conflict
731
 
     (s)  show all    - show this list
732
 
 
733
 
   Select: (p) postpone, (df) diff-full, (e) edit,
734
 
           (s) show all options: tf
735
 
   G    contrib/client-side/svnmerge/svnmerge.py
736
 
   Updated to revision 25685.
737
 
   $ 
738
 
</pre>
739
 
 
740
 
<p>This feature can be selectively disabled by using the --non-interactive
741
 
option, or disabled permanently by setting '[miscellany] interactive-conflicts
742
 
 = no' in your run-time config file.</p>
743
 
 
744
 
<p>The API for interactive conflict resolution is exposed via a
745
 
callback function and the following new data types:</p>
746
 
 
747
 
<ul>
748
 
  <li><code>svn_wc_conflict_resolver_func_t</code>, the callback API
749
 
    itself</li>
750
 
  <li><code>svn_wc_conflict_description_t</code>, a description of the
751
 
    conflict passed to the callback</li>
752
 
  <li><code>svn_wc_conflict_action_t</code>, the part of the conflict
753
 
    description indicating what the merge was trying to do</li>
754
 
  <li><code>svn_wc_conflict_reason_t</code>, the part of the conflict
755
 
    description indicating the type of conflict</li>
756
 
  <li><code>svn_wc_conflict_result_t</code>, returned by the callback
757
 
    as the result of any conflict resolution attempt</li>
758
 
  <li><code>svn_wc_conflict_choice_t</code>, an enum indicating what
759
 
    course of action the user chose</li>
760
 
</ul>
761
 
 
762
 
<p>Clients provide their callback function to Subversion's libraries
763
 
by setting it on the (new) <code>conflict_func</code> field of their
764
 
<code>svn_client_ctx_t</code>, and may provide additional state to the
765
 
callback via the corresponding <code>conflict_baton</code> field.</p>
766
 
 
767
 
</div>  <!-- interactive-conflict-resolution -->
768
 
 
769
 
<div class="h3" id="changelists" title="changelists"> <h3>Changelist
770
 
support (<em>client</em>)</h3> <p>The Subversion client now contains
771
 
the notion of a <em>changelist</em>: a group of files which are
772
 
associated with a chosen name.  This becomes especially useful when
773
 
working on several different set of files within the same working
774
 
copy.  Instead of having to remember each file in each set, Subversion
775
 
1.5 will allow you to associate a changelist with each set of files.
776
 
Most commands which take a set of files as targets will now also
777
 
accept the <strong><code>--changelist</code></strong> option, which
778
 
filters those targets based upon the members of the changelist.
779
 
Changelist membership can be edited using the new
780
 
<strong><code>changelist</code></strong> subcommand.</p>
781
 
 
782
 
<p>Changelists are handled entirely by the client.  They are never sent
783
 
to the server, and aren't visible to other users of the same repository.
784
 
Also, the <code>--changelist</code> option is never additive; if a file
785
 
wouldn't have been included in the list of targets without
786
 
<code>--changelist</code>, it will not be added to it, regardless of membership
787
 
in the changelist.  Currently, a file may only be in one changelist at a
788
 
time, and directories can not be members of a changelist.</p>
789
 
 
790
 
<p>The <code>--changelist</code> option is supported by the following
791
 
subcommands:</p>
792
 
<ul>
793
 
  <li><code>changelist</code></li>
794
 
  <li><code>commit</code></li>
795
 
  <li><code>diff</code> (only wc-wc and wc-repos cases)</li>
796
 
  <li><code>info</code></li>
797
 
  <li><code>propget</code></li>
798
 
  <li><code>proplist</code></li>
799
 
  <li><code>propset</code></li>
800
 
  <li><code>propdel</code></li>
801
 
  <li><code>revert</code></li>
802
 
  <li><code>status</code></li>
803
 
  <li><code>update</code></li>
804
 
</ul>
805
 
 
806
 
<div class="h4" id="cl-further-reading" title="cl-further-reading">
807
 
<h4>Further reading</h4>
808
 
 
809
 
<ul>
810
 
<li>The <a
811
 
    href="http://svnbook.red-bean.com/nightly/en/svn.advanced.changelists.html"
812
 
    >Changelists</a> section in the Subversion book.
813
 
</li>
814
 
<li>The <a
815
 
    href="http://svn.collab.net/repos/svn/trunk/notes/changelist-design.txt" 
816
 
    >design/implementation document</a> in the repository.</li>
817
 
</ul>
818
 
 
819
 
</div>  <!-- cl-further-reading -->
820
 
 
821
 
</div>  <!-- changelists -->
822
 
 
823
 
<div class="h3" id="externals" title="externals">
824
 
<h3>Relative URLs, peg revisions in <tt>svn:externals</tt>
825
 
    (<em>client</em>)</h3>
826
 
 
827
 
<p>Two additions to the <tt>svn:externals</tt> feature</p>
828
 
 
829
 
<div class="h4" id="externals-peg-revs" title="externals-peg-revs">
830
 
<h4>Peg revision syntax for URLs</h4>
831
 
 
832
 
<p><em>Compatibility and the new syntax:</em> For compatibility
833
 
reasons, the pre-1.5 svn:externals syntax continues to not understand
834
 
peg revisions.  A new format has been introduced to allow peg
835
 
revisions in URLs.</p>
836
 
 
837
 
<p>The old format of</p>
838
 
<pre>
839
 
   foo             http://example.com/repos/zig
840
 
   foo/bar -r 1234 http://example.com/repos/zag
841
 
</pre>
842
 
 
843
 
<p>does not support peg revisions, and the following externals will
844
 
not work (unless there are directories named <tt>zig@HEAD</tt> and
845
 
<tt>zag@HEAD</tt>):</p>
846
 
 
847
 
<pre>
848
 
   foo             http://example.com/repos/zig@HEAD
849
 
   foo/bar -r 1234 http://example.com/repos/zag@HEAD
850
 
</pre>
851
 
 
852
 
<p>The new format moves the URL first followed by the directory the
853
 
external is checked out or exported into; if there is an operative
854
 
(-r) revision, it precedes the URL.  Here are four externals lines:</p>
855
 
 
856
 
<pre>
857
 
   http://example.com/repos/zig foo1
858
 
   -r 1234 http://example.com/repos/zag foo/bar1
859
 
   http://example.com/repos/zig@HEAD foo2
860
 
   -r 1234 http://example.com/repos/zag@HEAD foo/bar2
861
 
</pre>
862
 
 
863
 
<p>In other words, both operative ("-r") and peg ("@") revisions are
864
 
allowed, but neither is required.</p>
865
 
 
866
 
</div>  <!-- externals-peg-revisions -->
867
 
 
868
 
<div class="h4" id="externals-relative-urls" title="externals-relative-urls">
869
 
<h4>Support for relative URLs</h4>
870
 
 
871
 
<p>Prior to Subversion 1.5, the URLs in an <tt>svn:externals</tt>
872
 
specification must be absolute.  Now they can be relative.  Four
873
 
different relative externals specifications are supported.  (In the
874
 
following examples, assume we have two repositories: one at
875
 
<tt>http://example.com/svn/repos-1</tt> and another at
876
 
<tt>http://example.com/svn/repos-2</tt>.  We have a checkout of
877
 
<tt>http://example.com/svn/repos-1/project1/trunk</tt> and the
878
 
<tt>svn:externals</tt> property is set on <tt>trunk</tt>.)</p>
879
 
 
880
 
<dl><dt><strong>../</strong></dt>
881
 
<dd><p>Relative to the directory with the <tt>svn:externals</tt>
882
 
property.  These URLs always begin with the string <tt>../</tt>, for
883
 
example:</p>
884
 
<pre>
885
 
   ../../project2/trunk common/project2/trunk
886
 
</pre>
887
 
 
888
 
<p>This will extract
889
 
<tt>http://example.com/svn/repos-1/project2/trunk</tt> into
890
 
<tt>common/project2/trunk</tt>.  The external's URL is relative to the
891
 
URL of the directory with the <tt>svn:externals</tt> property, not the
892
 
directory where the external is written to disk.</p></dd>
893
 
 
894
 
<dt><strong>^/</strong></dt>
895
 
 
896
 
<dd><p>Relative to the repository root.</p>
897
 
 
898
 
<pre>
899
 
   ^/project2/trunk common/project2/trunk
900
 
</pre>
901
 
 
902
 
<p>This will extract
903
 
<tt>http://example.com/svn/repos-1/project2/trunk</tt> into
904
 
<tt>common/project2/trunk</tt>.</p>
905
 
 
906
 
<p>You can also refer to other repositories easily using repository
907
 
root relative URLs:</p>
908
 
 
909
 
<pre>
910
 
   ^/../repos-2/foo/trunk common/foo/trunk
911
 
</pre>
912
 
 
913
 
<p>This will extract <tt>http://example.com/svn/repos-2/foo/trunk</tt>
914
 
into <tt>common/foo/trunk</tt>.</p>
915
 
</dd>
916
 
 
917
 
<dt><strong>//</strong></dt>
918
 
 
919
 
<dd><p>Relative to the scheme.  This copies the scheme of the checkout
920
 
or export URL into the URL in <tt>svn:externals</tt>.  It is useful
921
 
when the same hostname must the accessed with different schemes
922
 
depending upon network location; i.e. clients in the intranet use
923
 
<tt>http://</tt> while external clients use <tt>svn+ssh://</tt>.</p>
924
 
 
925
 
<pre>
926
 
   //example.com/svn/repos-1/project2/trunk common/project2/trunk
927
 
</pre>
928
 
 
929
 
<p>This will extract
930
 
<tt>http://example.com/svn/repos-1/project2/trunk</tt> into
931
 
<tt>common/project2/trunk</tt>.  If the working copy was checked out
932
 
from <tt>svn+ssh://example.com/svn/repos-1/project1/trunk</tt> then
933
 
this URL would be
934
 
<tt>svn+ssh://example.com/svn/repos-1/project1/trunk</tt>.</p>
935
 
</dd>
936
 
 
937
 
<dt><strong>/</strong></dt>
938
 
 
939
 
<dd><p>Server root relative URLs.  This copies the scheme and hostname
940
 
from the checkout or export URL into the <tt>svn:externals</tt>
941
 
URL.</p>
942
 
 
943
 
<pre>
944
 
   /svn/repos-1/project2/trunk common/project2/trunk
945
 
</pre>
946
 
 
947
 
<p>This will extract
948
 
<tt>http://example.com/svn/repos-1/project2/trunk</tt> into
949
 
<tt>common/project2/trunk</tt>.  If the working copy was checked out
950
 
from <tt>svn+ssh://example.com/svn/repos-1/project1/trunk</tt> then
951
 
this URL would be
952
 
<tt>svn+ssh://example.com/svn/repos-1/project1/trunk</tt>.</p>
953
 
</dd>
954
 
 
955
 
</dl>
956
 
 
957
 
<p>Relative URLs are still supported in the old <tt>svn:externals</tt>
958
 
format (that does not support peg revisions).</p>
959
 
 
960
 
<p>When Subversion sees an <tt>svn:externals</tt> without an absolute
961
 
URL, it takes the first argument as a relative URL and the second as
962
 
the target directory.</p>
963
 
 
964
 
</div>  <!-- externals-relative-urls -->
965
 
 
966
 
<div class="h4" id="externals-further-reading"
967
 
             title="externals-further-reading">
968
 
<h4>Further reading</h4>
969
 
 
970
 
<p>See The <a
971
 
href="http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html"
972
 
>svn:externals</a> section of the Subversion Book.</p>
973
 
 
974
 
</div>  <!-- externals-further-reading -->
975
 
 
976
 
</div>  <!-- externals -->
977
 
 
978
 
<div class="h3" id="cyrus-sasl" title="cyrus-sasl">
979
 
<h3>Cyrus SASL support for ra_svn and <tt>svnserve</tt> (<em>client
980
 
and server</em>)</h3>
981
 
 
982
 
<p>From <a
983
 
href="http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer">
984
 
Wikipedia</a>: "SASL is a framework for authentication and data security in
985
 
Internet protocols.  It decouples authentication mechanisms from application
986
 
protocols, in theory allowing any authentication mechanism supported by SASL to
987
 
be used in any application protocol that uses SASL."</p>
988
 
  
989
 
<p>In practice, the server sends a list of authentication mechanisms that it
990
 
supports.  The client then selects one of these mechanisms based on what the
991
 
client supports, and informs the server of its decision.  After that, a
992
 
number of messages are exchanged until either authentication succeeds or an
993
 
error occurs.  In the latter case, the client is allowed to restart
994
 
authentication.</p>
995
 
  
996
 
<p>The <tt>svn://</tt> protocol has always supported this type of negotiation.
997
 
However, only the <tt>CRAM-MD5</tt> and <tt>ANONYMOUS</tt> mechanisms were
998
 
implemented.  <a href="http://asg.web.cmu.edu/sasl/">Cyrus SASL</a> supports
999
 
all these, and, in addition, provides a host of other mechanisms such as
1000
 
<tt>DIGEST-MD5</tt>, OTP (One-Time Passwords), GSSAPI (used for Kerberos
1001
 
authentication), NTLM (NT LAN Manager), SRP (Secure Remote Password), and
1002
 
others.  The exact list of available mechanisms depends on how SASL was
1003
 
compiled, as many of them either have external dependencies, or are not
1004
 
built by default.  Also, because each mechanism is actually a shared library
1005
 
that is dynamically loaded at runtime, many distributions package these
1006
 
mechanisms separately from the core library.</p>
1007
 
 
1008
 
<p>Please see the <a href="#sasl-compatibility">compatibility
1009
 
section</a> for information regarding using a 1.5 SASL-enabled server
1010
 
with pre-1.5 clients.  More information about Subversion's SASL
1011
 
support can be found in <a
1012
 
href="http://svn.collab.net/repos/svn/trunk/notes/sasl.txt"
1013
 
>sasl.txt</a>.</p>
1014
 
 
1015
 
</div> <!-- cyrus-sasl -->
1016
 
 
1017
 
<div class="h3" id="fsfs-sharding" title="fsfs-sharding">
1018
 
<h3>Improved support for large deployments on FSFS, via sharding
1019
 
    (<em>server</em>)</h3>
1020
 
 
1021
 
<p>The FSFS filesystem backend stores each revision in its own file, and prior
1022
 
to Subversion 1.5, all of these files were stored in a common directory in
1023
 
the repository.  Now, <em>newly created</em> FSFS repositories will use a 
1024
 
two-level directory tree with up to (by default) 1000 files per directory.
1025
 
These repositories will only be compatible with other Subversion 1.5 clients,
1026
 
but of course, Subversion 1.5 will be able to continue using repositories
1027
 
employing the older scheme without any problem.</p>
1028
 
 
1029
 
<p>The primary reason for the change is to allow the revision count to
1030
 
grow beyond the filesystem's (efficient) directory entry limit.  While
1031
 
modern filesystems can support millions of entries per directory, they
1032
 
become slower and common administrative tools (e.g. directory
1033
 
listings, backups) become unwieldy or fail completely.</p>
1034
 
 
1035
 
<p>For more information about the technical underpinnings of FSFS sharding, 
1036
 
see this <a href="http://www.farside.org.uk/200704/tree_structured_fsfs">blog
1037
 
entry</a>.
1038
 
<!-- ### Reshard script is not quite finished and currently 
1039
 
     ### aborts if you try to run it.
1040
 
 <a
1041
 
 href="http://svn.collab.net/repos/svn/trunk/tools/server-side/fsfs-reshard.py"
1042
 
 >Migration script</a> provided.
1043
 
-->
1044
 
</p>
1045
 
 
1046
 
<p>The shard size can by adjusted by editing the
1047
 
"<code>layout&nbsp;sharded</code>" line in "db/format" after
1048
 
<code>svnadmin&nbsp;create</code> but before populating the
1049
 
repository.</p>
1050
 
 
1051
 
</div>  <!-- fsfs-sharding -->
1052
 
 
1053
 
<div class="h3" id="fsfs-isolate-immutable" title="fsfs-isolate-immutable">
1054
 
<h3>Improved FSFS optimizability, via immutable file isolation
1055
 
    (<em>server</em>)</h3>
1056
 
 
1057
 
<p>The FSFS repositories never change a revision after it is written
1058
 
to the disk.  Although this should allow the operating system to cache
1059
 
these files forever, certain filesystems (e.g. NFS) prohibit such
1060
 
caching by default.  Now the FSFS repository layout has been changed
1061
 
such that the immutable files are confined to the subdirectories
1062
 
"db/revs" and "db/txn-protorevs".  This allows these directories to be
1063
 
on a mount point where caching is enabled (on Linux look at the
1064
 
"nocto" option to nfs(5)).</p>
1065
 
 
1066
 
<p>Since commit transactions are now built up in "db/txn-protorevs"
1067
 
instead of "db/transactions", the latter directory no longer needs to
1068
 
be on the same mount point.  If the repository is stored on a slower
1069
 
filesystem (e.g. NFS), then commit performance can be improved by
1070
 
moving the transactions directory to local disk (using a symbolic
1071
 
link).  If you are using multiple svn servers behind a network load
1072
 
scaler, you must configure the load scaler to direct to the same
1073
 
server for the duration of the transaction.  This is typically called
1074
 
"client affinity".</p>
1075
 
 
1076
 
</div>  <!-- fsfs-isolate-immutable -->
1077
 
 
1078
 
<div class="h3" id="webdav-proxy" title="webdav-proxy">
1079
 
<h3>WebDAV transparent write-through proxy (<em>server</em>)</h3>
1080
 
 
1081
 
<p>Subversion 1.4 <a
1082
 
href="http://subversion.tigris.org/svn_1.4_releasenotes.html#svnsync">
1083
 
introduced <tt>svnsync</tt></a>&nbsp;&mdash;&nbsp;a tool which
1084
 
provided the ability to replicate repository history from one
1085
 
repository to another.  Though useful, <tt>svnsync</tt> could only
1086
 
pull revision history from a repository, not push additional commits
1087
 
back to the master.  Subversion 1.5 adds WebDAV proxy support to
1088
 
<tt>mod_dav_svn</tt>, effectively allowing bidirectional revision
1089
 
history replication between master servers and slave servers using
1090
 
<tt>mod_dav_svn</tt>.</p>
1091
 
 
1092
 
<p>All clients interact with a slave server, but the slave transparently
1093
 
passes all of the write-oriented activites to the master (rewriting the
1094
 
content as necessary).  The slaves are essentially read-only, but they
1095
 
do have a complete copy of the repository locally.  This serves to
1096
 
alleviate read traffic from the master server which may be desirable
1097
 
in certain circumstances.</p>
1098
 
 
1099
 
<p>This model has several advantages to using a straight HTTP DAV-aware
1100
 
caching proxy, in that each slave can respond to all read-only requests
1101
 
without ever having to relay them to the master backend.</p>
1102
 
 
1103
 
<div class="h4" id="webdav-proxy-requirements"
1104
 
    title="webdav-proxy-requirements">
1105
 
<h4>Requirements</h4>
1106
 
<ul>
1107
 
  <li>Subversion 1.5 or newer.</li>
1108
 
  <li>Apache HTTP Server 2.2.0 or higher with mod_proxy enabled.
1109
 
    (Several fixes to mod_proxy were committed for this patch that were not
1110
 
    backported to the 2.0 branch of httpd.)</li>
1111
 
</ul>
1112
 
 
1113
 
</div>  <!-- webdav-proxy-requirements -->
1114
 
 
1115
 
<div class="h4" id="webdav-proxy-example" title="webdav-proxy-example">
1116
 
<h4>Example configuration</h4>
1117
 
 
1118
 
<p>Participants:</p>
1119
 
<ul>
1120
 
  <li>Slave &rarr; <tt>slave.example.com</tt>  (there can be many!)</li>
1121
 
  <li>Master &rarr; <tt>master.example.com</tt> (there can only be one!)</li>
1122
 
  <li>A WebDAV client (<tt>ra_neon</tt>, <tt>ra_serf</tt>, other WebDAV
1123
 
    clients)</li>
1124
 
</ul>
1125
 
 
1126
 
<p>Each client does:</p>
1127
 
<pre><code>
1128
 
    % svn co http://slave.example.com/repos/slave/
1129
 
    ...
1130
 
    % svn ci
1131
 
    % ...etc...
1132
 
</code></pre>
1133
 
<p>(The client can perform all operations as normal.)</p>
1134
 
 
1135
 
<p>Each slave has:</p>
1136
 
<pre><code>
1137
 
    &lt;Location /repos/slave&gt;
1138
 
      DAV svn
1139
 
      SVNPath /my/local/copy/of/repos
1140
 
      SVNMasterURI http://master.example.com/repos/master/
1141
 
    &lt;/Location&gt;
1142
 
</code></pre>
1143
 
 
1144
 
<p>The master MUST have a post-commit hook that updates all of the slaves.  An
1145
 
example that does this using <code>svnadmin dump</code>/<code>svnadmin
1146
 
load</code> and ssh is provided below.  <tt>svnsync</tt> can probably do the
1147
 
same thing.</p>
1148
 
 
1149
 
<p>Additionally, if locks are permitted on the master repository, lock
1150
 
databases need to kept in sync via post-lock and post-unlock hooks on
1151
 
the master pushing the lock state to the slaves.  (Username
1152
 
preservation is left as an exercise to the reader.  Translation: <a
1153
 
href="hacking.html#patches">patches to these notes are most
1154
 
welcome</a>.)  If the lock database is not propogated, users will not
1155
 
be able to accurately determine whether a lock is
1156
 
held&nbsp;&mdash;&nbsp;but locking will still work.</p>
1157
 
 
1158
 
<p>A sample synchronization script may look like this:</p>
1159
 
<pre><code>
1160
 
   #!/bin/sh
1161
 
   REPOS="$1"
1162
 
   REV="$2"
1163
 
   SLAVE_HOST=slave.example.com
1164
 
   SLAVE_PATH=/my/local/copy/of/repos
1165
 
 
1166
 
   # Ensure svnadmin is in $PATH on both this machine and the remote server!
1167
 
   svnadmin dump --incremental -r$2 $1 &gt; /tmp/$2.dump
1168
 
   scp /tmp/$2.dump $SLAVE_HOST:$SLAVE_PATH
1169
 
   ssh $SLAVE_HOST "svnadmin load $SLAVE_PATH &lt; $SLAVE_PATH/$2.dump"
1170
 
   ssh $SLAVE_HOST "rm $SLAVE_PATH/$2.dump"
1171
 
   rm /tmp/$2.dump
1172
 
</code></pre>
1173
 
 
1174
 
</div>  <!-- webdav-proxy-example -->
1175
 
 
1176
 
<div class="h4" id="webdav-proxy-further-reading"
1177
 
             title="webdav-proxy-further-reading">
1178
 
<h4>Further reading</h4>
1179
 
 
1180
 
<p>Additional information about WebDAV proxy support is available <a
1181
 
href="http://svn.collab.net/repos/svn/trunk/notes/webdav-proxy">in the
1182
 
repository</a>.</p>
1183
 
 
1184
 
</div>  <!-- webdav-proxy-further-reading -->
1185
 
 
1186
 
</div>  <!-- webdav-proxy -->
1187
 
 
1188
 
</div>  <!-- new-features -->
1189
 
 
1190
 
 
1191
 
<div class="h2" id="enhancements" title="enhancements">
1192
 
<h2>Enhancements and Bugfixes</h2>
1193
 
 
1194
 
<div class="h3" id="copy-move-improvements" title="copy-move-improvements">
1195
 
<h3>Copy/move-related improvements (<em>client and server</em>)</h3>
1196
 
 
1197
 
<p>The abilities and behavior of <code>copy</code> and
1198
 
<code>move</code> operations are significantly improved in 1.5+.</p>
1199
 
 
1200
 
<div class="h4" id="leverage-copyfrom" title="leverage-copyfrom">
1201
 
<h4>Improved copy-handling during updates (<em>client and server</em>)</h4>
1202
 
 
1203
 
<p>A common problem in older versions of Subversion was the way in
1204
 
which <code>svn update</code> handled incoming copies and moves.</p>
1205
 
 
1206
 
<p>Consider this scenario: Harry runs <code>svn move foo bar; svn
1207
 
commit</code>, and meanwhile Sally makes local changes to 'foo', and
1208
 
then runs <code>svn update</code>.  In earlier versions of Subversion,
1209
 
the server would send down a completely new file 'bar', and unversion
1210
 
the file 'foo' (if it had no uncommitted changes, Subversion would
1211
 
remove it entirely.)  From Sally's point of view, her changes seem to
1212
 
be lost; the newly added 'bar' file has the older content, and the
1213
 
file 'foo' has been taken out of version control.</p>
1214
 
 
1215
 
<p>In Subversion 1.5, the client and server both attempt to be smarter
1216
 
about this.  The server doesn't send a whole new file during the
1217
 
update, but rather instructions to copy something that likely already
1218
 
exists in the working copy.  So Sally's 'foo' file is copied to 'bar'
1219
 
(with local edits intact!).</p>
1220
 
 
1221
 
<p>In theory, this is the best-case scenario.  There are a few
1222
 
caveats: this "proper copying" of existing working-copy resources only
1223
 
works on files, not (yet) on directories.  Also, if an incoming
1224
 
move-operation deletes 'foo' before it attempts to copy it to 'bar',
1225
 
then the copy will fail, and the client reverts to the old behavior of
1226
 
fetching a pristine copy of the file from the repository.  We hope to
1227
 
address this in svn 1.6.</p>
1228
 
 
1229
 
<p>See <a
1230
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=503" >issue
1231
 
#503</a> for more.</p>
1232
 
 
1233
 
</div> <!-- leverage-copyfrom -->
1234
 
 
1235
 
<div class="h4" id="copy-peg-revs" title="copy-peg-revs">
1236
 
<h4>Peg revisions (<em>client</em>)</h4>
1237
 
 
1238
 
<p>Copy and move operations now accept sources with peg ("@")
1239
 
revisions.</p>
1240
 
 
1241
 
<p>See <a
1242
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=2546" >issue
1243
 
#2546</a> for more.</p>
1244
 
 
1245
 
</div>  <!-- copy-peg-revs -->
1246
 
 
1247
 
<div class="h4" id="multi-op-copy-move" title="multi-op-copy-move">
1248
 
<h4>Multiple working copy copy/move operations (<em>client</em>)</h4>
1249
 
 
1250
 
<p>Clients may now perform chained copy/move operations locally on a
1251
 
single object in a working copy:</p>
1252
 
 
1253
 
<pre>
1254
 
   svn mv path1 path2
1255
 
   svn mv path2 path3
1256
 
</pre>
1257
 
 
1258
 
<p>See <a
1259
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=756" >issue
1260
 
#756</a> for more.</p>
1261
 
 
1262
 
</div>  <!-- multi-op-copy-move -->
1263
 
 
1264
 
<div class="h4" id="multi-src-copy" title="multi-src-copy">
1265
 
<h4>Improved handling multiple copy/move sources (<em>client</em>)</h4>
1266
 
 
1267
 
<p>Clients now accept multiple sources for copy and move operations, with 
1268
 
the ability to copy/move each of the sources to the specified directory.
1269
 
This mirrors the behavior of standard command-line copy and move tools,
1270
 
such as <code>cp</code> and <code>mv</code>.  For example:</p>
1271
 
 
1272
 
<pre>
1273
 
   svn mkdir new_subdir
1274
 
   svn mv foo.txt bar.txt baz.txt new_subdir
1275
 
</pre>
1276
 
 
1277
 
<p>In practice, this means users can take advantage of shell globbing
1278
 
when doing a local copy or move:</p>
1279
 
 
1280
 
<pre>
1281
 
   svn cp *.c dir
1282
 
</pre>
1283
 
 
1284
 
<p>Multiple source copy/move also works for all previously defined
1285
 
copy/move working copy and repository combinations.</p>
1286
 
 
1287
 
<p>See <a
1288
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=747" >issue
1289
 
#747</a> for more.</p>
1290
 
 
1291
 
</div>  <!-- multi-src-copy -->
1292
 
 
1293
 
<div class="h4" id="cp-takes-base" title="cp-takes-base">
1294
 
<h4>Copy takes -rBASE (<em>client</em>)</h4>
1295
 
 
1296
 
<p>Copy now understands the special revision "BASE" in a working copy
1297
 
(as in: "<tt>-rBASE</tt>").</p>
1298
 
 
1299
 
<p>See <a
1300
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=1643" >issue
1301
 
#1643</a> for more.</p>
1302
 
 
1303
 
</div>  <!-- cp-takes-base -->
1304
 
 
1305
 
<div class="h4" id="cp-mv-intermediate-dirs" title="cp-mv-intermediate-dirs">
1306
 
<h4>Creation of intermediate directories with copy/move
1307
 
    (<em>client and server</em>)</h4>
1308
 
 
1309
 
<p>See the section on the new <a href="#intermediate-directories"
1310
 
>--parents option</a> for more about this.</p>
1311
 
 
1312
 
</div>  <!-- cp-mv-intermediate-dirs -->
1313
 
 
1314
 
</div>  <!-- copy-move-improvements -->
1315
 
 
1316
 
<div class="h3" id="cancellation-improvements"
1317
 
     title="cancellation-improvements">
1318
 
<h3>Cancellation improvements (<em>client</em>)</h3>
1319
 
 
1320
 
<p>Clients operations are now significantly more responsive to
1321
 
cancellation (e.g. via <tt>control-c</tt>).  In pre-1.5 releases,
1322
 
after directing an operation to stop, one sometimes had to wait for
1323
 
some time (e.g. while I/O occurred) before the operation would
1324
 
actually stop.</p>
1325
 
 
1326
 
</div>  <!-- cancellation-improvements -->
1327
 
 
1328
 
<div class="h3" id="cmdline" title="cmdline">
1329
 
<h3>Command-line client improvements (<em>client</em>)</h3>
1330
 
 
1331
 
<p>There are far too many enhancements and new options to the
1332
 
command-line client to list them all here.  Aside from all the ones
1333
 
mentioned already in these release notes, below are a few more that we
1334
 
consider important, but please see the 1.5.0 section in the <a
1335
 
href="http://svn.collab.net/repos/svn/trunk/CHANGES">CHANGES</a> file
1336
 
for a complete list.</p>
1337
 
 
1338
 
<div class="h4" id="resolve" title="resolve">
1339
 
<h4>New "resolve" subcommand replaces "resolved"</h4>
1340
 
 
1341
 
<p>A new <strong><tt>resolve</tt></strong> subcommand replaces the
1342
 
"<tt>resolved</tt>" subcommand (the latter is deprecated, but still
1343
 
present for compatibility).  The new subcommand takes a
1344
 
<strong><tt>--accept=orig|mine|repo</tt></strong> option to select
1345
 
which version of a file to retain (which means Subversion now supports
1346
 
batch-style conflict resolution).</p>
1347
 
 
1348
 
<p>See <a
1349
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=2784" >issue
1350
 
#2784</a> for more.</p>
1351
 
 
1352
 
</div>  <!-- resolve -->
1353
 
 
1354
 
<div class="h4" id="intermediate-directories"
1355
 
             title="intermediate-directories">
1356
 
<h4>Create intermediate directories if asked</h4>
1357
 
 
1358
 
<p>Add, mkdir, copy, and move take a new
1359
 
<strong><tt>--parents</tt></strong> option, which makes intermediate
1360
 
directories as necessary to create the destination path.</p>
1361
 
 
1362
 
<p>See <a
1363
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=1776" >issue
1364
 
#1776</a> for more</p>
1365
 
 
1366
 
</div>  <!-- intermediate-directories -->
1367
 
 
1368
 
<div class="h4" id="keep-local" title="keep-local">
1369
 
<h4>New --keep-local option retains path after delete.</h4>
1370
 
 
1371
 
<p>Delete (remove) now takes a
1372
 
<strong><code>--keep-local</code></strong> option to retain its
1373
 
targets locally, so paths will not be removed even if unmodified.</p>
1374
 
 
1375
 
</div>  <!-- keep-local -->
1376
 
 
1377
 
<div class="h4" id="commit-revprops" title="commit-revprops">
1378
 
<h4>Commit now takes a --with-revprop option.</h4>
1379
 
 
1380
 
Commit now takes a <strong><tt>--with-revprop</tt></strong> option
1381
 
allowing one to set revision properties
1382
 
 
1383
 
<p>See <a
1384
 
href="http://subversion.tigris.org/issues/show_bug.cgi?id=1976" >issue
1385
 
#1976</a> for more.</p>
1386
 
 
1387
 
</div>  <!-- commit-revprops -->
1388
 
 
1389
 
</div>  <!-- cmdline -->
1390
 
 
1391
 
<div class="h3" id="dav-modules" title="dav-modules">
1392
 
<h3>Easier to try out experimental <tt>ra_serf</tt> DAV access module
1393
 
(<em>client</em>)</h3>
1394
 
 
1395
 
<p>Subversion 1.4 introduced the experimental <tt>ra_serf</tt>
1396
 
repository access module for accessing HTTP[S] DAV Subversion servers.
1397
 
This uses the <a href="http://code.google.com/p/serf/">serf</a>
1398
 
library instead of the Neon library which the original DAV support
1399
 
uses.  serf supports pipelined requests which may lead to better
1400
 
performance.  However, Subversion 1.4 required you to choose which
1401
 
module to use for accessing DAV servers at build time, which made it
1402
 
difficult to find out which module performs better for your usage
1403
 
patterns.</p>
1404
 
 
1405
 
<p>Subversion 1.5 allows you to build both modules at the same time;
1406
 
you can choose which library to use on a global or host-by-host basis
1407
 
by setting the <tt>http-library</tt> variable in your run-time server
1408
 
configuration file (<tt>~/.subversion/servers</tt>).  In recognition
1409
 
of the fact that both libraries are DAV clients, we have
1410
 
renamed <tt>ra_dav</tt> to <tt>ra_neon</tt>.</p>
1411
 
 
1412
 
</div>  <!-- dav-modules -->
1413
 
 
1414
 
<div class="h3" id="apis" title="apis">
1415
 
<h3>API changes, improvements and language bindings
1416
 
    (<em>client and server</em>)</h3>
1417
 
 
1418
 
<p>There are too many new and revised APIs in Subversion 1.5.0 to even
1419
 
begin to list them all here.  See the <a
1420
 
href="http://svn.collab.net/svn-doxygen/" >Subversion API
1421
 
Documentation</a> page for general API information.  If you develop a
1422
 
3rd-party client application that uses Subversion APIs, you should
1423
 
probably look at the header files for the interfaces you use and see
1424
 
what's changed.</p>
1425
 
 
1426
 
<p>One general change is that most APIs that formerly took a
1427
 
<tt>recurse</tt> parameter have been upgraded to accept a
1428
 
<tt>depth</tt> parameter instead, to enable the new <a
1429
 
href="#sparse-checkouts">sparse checkouts</a> feature.</p>
1430
 
 
1431
 
<p>Language bindings have mostly been updated for the new APIs, though
1432
 
some may lag more than others.</p>
1433
 
 
1434
 
</div>  <!-- apis -->
1435
 
 
1436
 
<div class="h3" id="bug-fixes" title="bug-fixes">
1437
 
<h3>Bug fixes (<em>client and server</em>)</h3>
1438
 
 
1439
 
<p>A great many bugs have been fixed.  See the 1.5.0 section in the <a
1440
 
href="http://svn.collab.net/repos/svn/trunk/CHANGES">CHANGES</a> file
1441
 
for details.</p>
1442
 
 
1443
 
</div>  <!-- bug-fixes -->
1444
 
 
1445
 
</div>  <!-- enhancements -->
1446
 
 
1447
 
<div class="h2" id="svn-1.3-deprecation" title="svn-1.3-deprecation">
1448
 
<h2>Subversion 1.3.x series no longer supported</h2>
1449
 
 
1450
 
<p>The Subversion 1.3.x line is no longer supported.  This doesn't
1451
 
mean that your 1.3 installation is doomed; if it works well and is all
1452
 
you need, that's fine.  "No longer supported" just means we've stopped
1453
 
accepting bug reports against 1.3.x versions, and will not make any
1454
 
more 1.3.x bugfix releases, except perhaps for absolutely critical
1455
 
security or data-loss bugs.</p>
1456
 
 
1457
 
</div>  <!-- svn-1.3-deprecation -->
1458
 
 
1459
 
<div class="h2" id="deps" title="deps">
1460
 
<h2>Subversion Dependencies Distribution: Binary Compatibility Issues</h2>
1461
 
 
1462
 
<div class="h3" id="deps-background" title="deps-background">
1463
 
<h3>Background</h3>
1464
 
 
1465
 
<p>APR 0.9.x and 1.x are binary-incompatible.  This means if you are
1466
 
already using Subversion with APR 0.9.x, and then upgrade your libapr
1467
 
to 1.X <em>without rebuilding Subversion</em>, things will break.
1468
 
Things will also break if your Subversion server libraries are linked
1469
 
to one version of APR but your Apache HTTPD server is linked to a
1470
 
different version.</p>
1471
 
 
1472
 
<p>For a long time, Subversion's main source distribution included APR
1473
 
0.9.x, which was the latest available at the time, along with a few
1474
 
other things (e.g., Neon, zlib) that weren't yet widespread on
1475
 
installation systems.</p>
1476
 
 
1477
 
</div> <!-- deps-background -->
1478
 
 
1479
 
<div class="h3" id="deps-now" title="deps-now">
1480
 
<h3>Subversion 1.5.0 Dependencies Distribution</h3>
1481
 
 
1482
 
<p>Today, these dependencies are no longer exotic, so our source
1483
 
distribution contains just Subversion itself.  Those building
1484
 
Subversion are expected to have the necessary libraries already
1485
 
installed, or to be able to fetch them easily.  But for convenience,
1486
 
we still offer a "deps" distribution: it doesn't contain Subversion,
1487
 
it just has source code for those third-party libraries.</p>
1488
 
 
1489
 
<p>Until Subversion 1.5.0, the deps distribution contained APR 0.9.x,
1490
 
but as of 1.5.0, we're finally upgrading it to APR 1.x.  This is
1491
 
because by now there are very few systems that will have binary
1492
 
compatibility issues, and of those, few are likely to build using the
1493
 
"deps" dist.</p>
1494
 
 
1495
 
<p>If you already have a Subversion installation using APR 0.9.x, it's
1496
 
still possible to move to APR 1.x safely (although you are not
1497
 
required to, unless you use the deps dist).  Just be sure to recompile
1498
 
Subversion, and Apache httpd if necessary, after upgrading APR.</p>
1499
 
 
1500
 
<p>Note that it's perfectly safe to use APR 1.x from the beginning.
1501
 
In fact, we recommend it.  If you're building Subversion for the first
1502
 
time, there's no compatibility issue to worry about, so just grab the
1503
 
latest version of APR (or use our deps dist).</p>
1504
 
 
1505
 
</div> <!-- deps-now -->
1506
 
 
1507
 
</div>  <!-- deps -->
1508
 
 
1509
 
</div>  <!-- app -->
1510
 
</body>
1511
 
</html>