<TABLE BORDER="0" CELLPADDING="2" WIDTH="98%" BGCOLOR="white">

<TR>
<TD WIDTH="100%" BGCOLOR="#CCCC99"><STRONG><font color="#000033"
FACE="Arial, Helvetica, sans-serif">
Subversion CVS ChangeLog (static)
</font></STRONG></TD>
</TR>


<TR>
<TD WIDTH="100%" HEIGHT="100" BGCOLOR="#f0f0f0">

<p>

This ChangeLog shows all the commits in Subversion's now-obsolete CVS
repository.  Since Subversion is no longer kept under CVS, this
ChangeLog stops on the day of the switchover (August 30, 2001).
Development is now happening in a Subversion repository; use
Subversion itself to see commit messages from there.

<pre>
2001-08-30 22:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.34):

	Fix date.  

2001-08-30 22:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/inconveniences.html (1.3):

	Fix wording.  

2001-08-30 22:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/inconveniences.html (1.2):

	Fix formatting.  

2001-08-30 22:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* INSTALL (1.7), configure.in (1.105), notes/m3-checklist.txt
	(1.15), www/cvs-changelog.html (1.1), www/inconveniences.html
	(1.1), www/index.html (1.32), www/project_source.html (1.6),
	www/project_status.html (1.33):

	* INSTALL: Updated instructions.  
	
	* www/index.html: Note about self-hosting.  
	
	* www/project_source.html: New instructions for obtaining source.  
	
	* www/cvs-changelog.html: New file.  
	
	* www/inconveniences.html: New file.  
	
	* www/project_status.html: Update.  
	
	* notes/m3-checklist.txt: Update.  
	
	* configure.in (SVN_VERSION): M3.  

2001-08-30 20:39   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_client/update.c (1.27):

	* update.c (svn_client_update): Always call svn_client_authenticate 
	with a directory path.  

2001-08-30 20:02   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.41):

	Wups, fix typo in URL.  

2001-08-30 19:57   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_ra_dav/.cvsignore (1.3):

	Ignore Debug and Release subdirs.  

2001-08-30 19:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_ra_dav/props.c (1.14):

	(svn_ra_dav__get_props_resource): Fill in the error check that was 
	already here: if unable to obtain resource, return an error.  

2001-08-30 19:54   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/svnadmin/svnadmin.dsp (1.7):

	Link with neon.  

2001-08-30 19:52   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_ra_dav/libsvn_ra_dav.dsp (1.3):

	Add include path and link depencency for neon.  

2001-08-30 19:50   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/clients/cmdline/subversion_client.dsp (1.8):

	Link with neon.  

2001-08-30 19:48   Branko Cibej &lt;brane@xbc.nu&gt;

	* svn_private_config.hw (1.6):

	Enable linking with ra_dav.  

2001-08-30 19:47   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsw (1.19):

	(subversion_client, svnadmin): Add dependency on libsvn_ra_dav.  

2001-08-30 19:45   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.40):

	Describe how to build with neon.  

2001-08-30 19:22   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_client/status.c (1.24):

	* status.c (svn_client_status): Always call svn_client_authenticate 
	with a directory path.  

2001-08-30 19:19   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_subr/io.c (1.47):

	* io.c (svn_io_check_path): Treat an empty path as a synonym for
	".".  

2001-08-30 19:16   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/clients/cmdline/checkout-cmd.c (1.9):

	* checkout-cmd.c (svn_cl__checkout): Use the right path style when 
	splitting the URL.  

2001-08-30 18:51  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_ra_dav/util.c (1.9):

	* util.c 
	
	  (svn_ra_dav__parsed_request): Make neon errors more informational.  

2001-08-30 15:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/tree.c (1.101),
	tests/clients/cmdline/commit_tests.py (1.17):

	Fix issue #469, whereby merge() was erroneously flagging conflicts.  
	
	* tree.c (merge):  add some new logic to make this function less
	restrictive.  
	
	* commit_tests.py (merge_mixed_revisions):  one hell of a regression
	test.  

2001-08-30 15:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.29):

	(local-install): Don't depend on `install-sbin' rule, no one uses it 
	anymore.  

2001-08-30 11:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* build.conf (1.32):

	(svnadmin): Install in bin, not sbin.  See thread "quick poll on 
	`svnadmin' install location" on the dev list for more.  

2001-08-29 17:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.31):

	Get rid of compiler warning about unused function `write_string': 
	
	(DELTIFYING): New #define, set to 0.  
	(write_string_baton, write_string): Guard definitions with
	DELTIFYING.  
	(svn_fs__rep_deltify): Guard body with DELTIFYING.  

2001-08-29 16:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* svn_private_config.hw (1.5), subversion/bindings/apr.i (1.3),
	subversion/bindings/svn_client.i (1.2),
	subversion/bindings/svn_delta.i (1.2),
	subversion/bindings/svn_error.i (1.4), subversion/bindings/svn_fs.i
	(1.3), subversion/bindings/svn_io.i (1.2),
	subversion/bindings/svn_ra.i (1.2),
	subversion/bindings/svn_string.i (1.4),
	subversion/bindings/svn_types.i (1.3), subversion/bindings/svn_wc.i
	(1.2),
	subversion/bindings/java/jni/org/tigris/subversion/SubversionExcept
	ion.java (1.2),
	subversion/bindings/java/jni/org/tigris/subversion/lib/Client.java
	(1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/Entry.java
	(1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/Reporter.jav
	a (1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/Revision.jav
	a (1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/Status.java
	(1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/TextdeltaHan
	dler.java (1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/TextdeltaOp.
	java (1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/TextdeltaWin
	dow.java (1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/TreeDeltaEdi
	tor.java (1.3),
	subversion/bindings/java/jni/org/tigris/subversion/lib/WorkingCopy.
	java (1.3), subversion/clients/cmdline/add-cmd.c (1.4),
	subversion/clients/cmdline/checkout-cmd.c (1.8),
	subversion/clients/cmdline/cl.h (1.18),
	subversion/clients/cmdline/cleanup-cmd.c (1.5),
	subversion/clients/cmdline/commit-cmd.c (1.10),
	subversion/clients/cmdline/delete-cmd.c (1.4),
	subversion/clients/cmdline/diff-cmd.c (1.4),
	subversion/clients/cmdline/diff.c (1.6),
	subversion/clients/cmdline/feedback.c (1.7),
	subversion/clients/cmdline/help-cmd.c (1.6),
	subversion/clients/cmdline/import-cmd.c (1.9),
	subversion/clients/cmdline/main.c (1.17),
	subversion/clients/cmdline/prompt.c (1.5),
	subversion/clients/cmdline/propdel-cmd.c (1.3),
	subversion/clients/cmdline/propget-cmd.c (1.4),
	subversion/clients/cmdline/proplist-cmd.c (1.5),
	subversion/clients/cmdline/props.c (1.7),
	subversion/clients/cmdline/propset-cmd.c (1.6),
	subversion/clients/cmdline/revert-cmd.c (1.2),
	subversion/clients/cmdline/status-cmd.c (1.8),
	subversion/clients/cmdline/status.c (1.9),
	subversion/clients/cmdline/trace-commit.c (1.9),
	subversion/clients/cmdline/trace-update.c (1.6),
	subversion/clients/cmdline/update-cmd.c (1.8),
	subversion/clients/cmdline/util.c (1.8),
	subversion/clients/win32/svn_com/MarshalArray.h (1.5),
	subversion/clients/win32/svn_com/SVN.cpp (1.10),
	subversion/clients/win32/svn_com/SVN.h (1.4),
	subversion/clients/win32/svn_com/SVNCOM.cpp (1.2),
	subversion/clients/win32/svn_com/SVNCOM.idl (1.2),
	subversion/clients/win32/svn_com/SVNStatus.cpp (1.3),
	subversion/clients/win32/svn_com/SVNStatus.h (1.4),
	subversion/clients/win32/svn_com/StdAfx.cpp (1.2),
	subversion/clients/win32/svn_com/StdAfx.h (1.4),
	subversion/clients/win32/svn_com/dlldatax.c (1.3),
	subversion/clients/win32/svn_com/dlldatax.h (1.3),
	subversion/clients/win32/svn_com/misc.cpp (1.2),
	subversion/clients/win32/svn_com/misc.h (1.4),
	subversion/clients/win32/svn_com/svn_comCP.h (1.4),
	subversion/include/svn_base64.h (1.11),
	subversion/include/svn_client.h (1.46),
	subversion/include/svn_config.h (1.3),
	subversion/include/svn_delta.h (1.157),
	subversion/include/svn_error.h (1.111),
	subversion/include/svn_error_codes.h (1.16),
	subversion/include/svn_fs.h (1.106), subversion/include/svn_hash.h
	(1.19), subversion/include/svn_io.h (1.43),
	subversion/include/svn_path.h (1.41),
	subversion/include/svn_pools.h (1.5),
	subversion/include/svn_quoprint.h (1.4),
	subversion/include/svn_ra.h (1.66), subversion/include/svn_repos.h
	(1.29), subversion/include/svn_sorts.h (1.5),
	subversion/include/svn_string.h (1.51),
	subversion/include/svn_test.h (1.18), subversion/include/svn_time.h
	(1.3), subversion/include/svn_types.h (1.67),
	subversion/include/svn_wc.h (1.112), subversion/include/svn_xml.h
	(1.34), subversion/libsvn_client/add.c (1.19),
	subversion/libsvn_client/apply_edits.c (1.18),
	subversion/libsvn_client/auth.c (1.8),
	subversion/libsvn_client/checkout.c (1.24),
	subversion/libsvn_client/cleanup.c (1.2),
	subversion/libsvn_client/client.h (1.14),
	subversion/libsvn_client/commit.c (1.60),
	subversion/libsvn_client/delete.c (1.12),
	subversion/libsvn_client/diff.c (1.4),
	subversion/libsvn_client/revert.c (1.2),
	subversion/libsvn_client/status.c (1.23),
	subversion/libsvn_client/update.c (1.26),
	subversion/libsvn_delta/compose_editors.c (1.19),
	subversion/libsvn_delta/default_editor.c (1.11),
	subversion/libsvn_delta/delta.h (1.56),
	subversion/libsvn_delta/svndiff.c (1.32),
	subversion/libsvn_delta/text_delta.c (1.37),
	subversion/libsvn_delta/track_editor.c (1.7),
	subversion/libsvn_delta/vdelta.c (1.11),
	subversion/libsvn_delta/xml_output.c (1.41),
	subversion/libsvn_delta/xml_parse.c (1.159),
	subversion/libsvn_fs/dag.c (1.123), subversion/libsvn_fs/dag.h
	(1.51), subversion/libsvn_fs/dbt.c (1.20),
	subversion/libsvn_fs/dbt.h (1.19), subversion/libsvn_fs/err.c
	(1.31), subversion/libsvn_fs/err.h (1.25),
	subversion/libsvn_fs/fs.c (1.74), subversion/libsvn_fs/fs.h (1.33),
	subversion/libsvn_fs/id.c (1.28), subversion/libsvn_fs/id.h (1.12),
	subversion/libsvn_fs/key-gen.c (1.4),
	subversion/libsvn_fs/key-gen.h (1.3),
	subversion/libsvn_fs/node-rev.c (1.24),
	subversion/libsvn_fs/node-rev.h (1.13),
	subversion/libsvn_fs/nodes-table.c (1.25),
	subversion/libsvn_fs/nodes-table.h (1.12),
	subversion/libsvn_fs/proplist.c (1.13),
	subversion/libsvn_fs/proplist.h (1.9),
	subversion/libsvn_fs/reps-strings.c (1.30),
	subversion/libsvn_fs/reps-strings.h (1.16),
	subversion/libsvn_fs/reps-table.c (1.6),
	subversion/libsvn_fs/reps-table.h (1.5),
	subversion/libsvn_fs/rev-table.c (1.17),
	subversion/libsvn_fs/rev-table.h (1.9), subversion/libsvn_fs/skel.c
	(1.36), subversion/libsvn_fs/skel.h (1.25),
	subversion/libsvn_fs/strings-table.c (1.13),
	subversion/libsvn_fs/strings-table.h (1.11),
	subversion/libsvn_fs/trail.c (1.12), subversion/libsvn_fs/trail.h
	(1.9), subversion/libsvn_fs/tree.c (1.100),
	subversion/libsvn_fs/tree.h (1.7), subversion/libsvn_fs/txn-table.c
	(1.29), subversion/libsvn_fs/txn-table.h (1.15),
	subversion/libsvn_fs/txn.c (1.47), subversion/libsvn_fs/txn.h
	(1.12), subversion/libsvn_fs/validate.c (1.7),
	subversion/libsvn_fs/validate.h (1.4),
	subversion/libsvn_ra/ra_loader.c (1.12),
	subversion/libsvn_ra_dav/commit.c (1.67),
	subversion/libsvn_ra_dav/fetch.c (1.71),
	subversion/libsvn_ra_dav/merge.c (1.15),
	subversion/libsvn_ra_dav/options.c (1.10),
	subversion/libsvn_ra_dav/props.c (1.13),
	subversion/libsvn_ra_dav/ra_dav.h (1.38),
	subversion/libsvn_ra_dav/session.c (1.37),
	subversion/libsvn_ra_dav/util.c (1.8),
	subversion/libsvn_ra_local/checkout.c (1.15),
	subversion/libsvn_ra_local/ra_local.h (1.18),
	subversion/libsvn_ra_local/ra_plugin.c (1.44),
	subversion/libsvn_ra_local/split_url.c (1.13),
	subversion/libsvn_repos/commit_editor.c (1.18),
	subversion/libsvn_repos/delta.c (1.55),
	subversion/libsvn_repos/hooks.c (1.18),
	subversion/libsvn_repos/lock.c (1.4),
	subversion/libsvn_repos/node_tree.c (1.6),
	subversion/libsvn_repos/reporter.c (1.16),
	subversion/libsvn_repos/rev_hunt.c (1.4),
	subversion/libsvn_subr/config.c (1.3),
	subversion/libsvn_subr/hashdump.c (1.27),
	subversion/libsvn_subr/io.c (1.46), subversion/libsvn_subr/path.c
	(1.41), subversion/libsvn_subr/quoprint.c (1.8),
	subversion/libsvn_subr/sorts.c (1.5),
	subversion/libsvn_subr/svn_base64.c (1.2),
	subversion/libsvn_subr/svn_error.c (1.77),
	subversion/libsvn_subr/svn_string.c (1.16),
	subversion/libsvn_subr/target.c (1.13),
	subversion/libsvn_subr/time.c (1.5), subversion/libsvn_subr/xml.c
	(1.43), subversion/libsvn_wc/adm_crawler.c (1.129),
	subversion/libsvn_wc/adm_files.c (1.86),
	subversion/libsvn_wc/adm_ops.c (1.85),
	subversion/libsvn_wc/entries.c (1.119),
	subversion/libsvn_wc/get_editor.c (1.195),
	subversion/libsvn_wc/lock.c (1.26), subversion/libsvn_wc/log.c
	(1.110), subversion/libsvn_wc/props.c (1.38),
	subversion/libsvn_wc/questions.c (1.60),
	subversion/libsvn_wc/status.c (1.40), subversion/libsvn_wc/util.c
	(1.20), subversion/libsvn_wc/wc.h (1.161),
	subversion/mod_dav_svn/activity.c (1.12),
	subversion/mod_dav_svn/dav_svn.h (1.37),
	subversion/mod_dav_svn/deadprops.c (1.17),
	subversion/mod_dav_svn/liveprops.c (1.24),
	subversion/mod_dav_svn/merge.c (1.16),
	subversion/mod_dav_svn/mod_dav_svn.c (1.21),
	subversion/mod_dav_svn/repos.c (1.62),
	subversion/mod_dav_svn/update.c (1.11),
	subversion/mod_dav_svn/util.c (1.19),
	subversion/mod_dav_svn/version.c (1.32), subversion/svnadmin/main.c
	(1.26), subversion/svnlook/main.c (1.21),
	subversion/tests/fs-helpers.c (1.10), subversion/tests/fs-helpers.h
	(1.6), subversion/tests/svn_test_editor.c (1.28),
	subversion/tests/svn_tests_main.c (1.24),
	subversion/tests/libsvn_delta/deltaparse-test.c (1.73),
	subversion/tests/libsvn_delta/random-test.c (1.26),
	subversion/tests/libsvn_delta/svndiff-test.c (1.13),
	subversion/tests/libsvn_delta/vdelta-test.c (1.9),
	subversion/tests/libsvn_delta/xml-output-test.c (1.18),
	subversion/tests/libsvn_fs/fs-test.c (1.104),
	subversion/tests/libsvn_fs/key-test.c (1.3),
	subversion/tests/libsvn_fs/skel-test.c (1.24),
	subversion/tests/libsvn_fs/strings-reps-test.c (1.10),
	subversion/tests/libsvn_ra_local/ra-local-test.c (1.13),
	subversion/tests/libsvn_repos/dir-delta-editor.c (1.7),
	subversion/tests/libsvn_repos/dir-delta-editor.h (1.4),
	subversion/tests/libsvn_repos/md5args.c (1.4),
	subversion/tests/libsvn_repos/repos-test.c (1.13),
	subversion/tests/libsvn_subr/hashdump-test.c (1.24),
	subversion/tests/libsvn_subr/path-test.c (1.7),
	subversion/tests/libsvn_subr/stringtest.c (1.11),
	subversion/tests/libsvn_subr/target-test.c (1.12),
	subversion/tests/libsvn_wc/checkout-test.c (1.46),
	subversion/tests/libsvn_wc/commit-test.c (1.35),
	tools/check-license.py (1.5):

	* tools/check-license.py: Change to reflect new license.  
	
	* everything with a license: Updated with text acknowledging 
	contributors and advising how to track contribution history.  
	Suggested by C. Scott Ananian &lt;cananian@lesser-magoo.lcs.mit.edu&gt;.  

2001-08-29 16:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.73):

	Patch from Sander Striker &lt;striker@apache.org&gt;: 
	
	(cleanup_fs_db): Ignore DB_INCOMPLETE error on db-&gt;close.  

2001-08-29 12:27  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.128):

	"Working copy locked" bug...be gone with no compiler warnings.  
	
	* adm_crawler.c 
	
	  (do_lock): Don't try to declare a variable you won't use.  That
	  sucks.  

2001-08-29 12:18  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.127):

	"Working copy locked" bug...be gone.  
	
	* adm_crawler.c 
	
	  (do_lock): Don't try to lock a directory we've locked in the past.  

2001-08-29 10:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* tools/random-commits.py (1.2):

	* random-commits.py 
	
	  Echo the per-commit "banner".  

2001-08-29 07:33  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/mod_dav_svn/repos.c (1.61):

	* repos.c 
	
	  (dav_svn_open_stream): DAV expects to see the whole of the svndiff 
	  data.  Reflect this expectation in code (thanks, gstein).  

2001-08-28 18:19  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/svndiff.c (1.31):

	* svndiff.c 
	
	  (write_handler): Um...remove debugging printfs.  

2001-08-28 18:15  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/svndiff.c (1.30):

	Karl and Mike, trying to nail the DAV svndiff-data-is-hosed bug: 
	
	* svndiff.c 
	
	  (write_handler): Empower this function to create more than a single 
	  window if has enough data to do so.  

2001-08-28 17:08   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsw (1.18):

	* subversion.dsw (__check__): Add dependency for 
	tests_libsvn_subr_target_test.  

2001-08-28 17:06   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_repos/libsvn_repos.dsp (1.7):

	This fixes L4098 warnings in the Win32 Release build. Thanks to Bill
	Tutt for finding the bug.  
	
	* libsvn_repos.dsp: Change project settings.  

2001-08-28 11:07  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/schedule_tests.py (1.6):

	* schedule_tests.py 
	
	  Changed syntax from `func ()' to `func()'.  
	
	  (nested_adds): Changed function description.  

2001-08-28 11:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* .cvsignore (1.11):

	* .cvsignore 
	
	  Ignore `builtin' db/ directory.  

2001-08-28 09:44   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* ac-helpers/gnu-diff.sh (1.2):

	The test command's stderr is now passed to /dev/null, the selection
	loop now picks the FIRST diff command in the PATH that matches the
	criteria (previously, it picked the last one) and it bails out of
	the loop as soon as it has found a diff that seems to be working.  
	PR: Obtained from: Submitted by: Reviewed by: 

2001-08-28 06:20   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.104), ac-helpers/berkeley-db.m4 (1.11):

	We are now looking for DB 3.3.11 

2001-08-28 04:15   Greg Stein &lt;gstein@lyra.org&gt;

	* tools/: find-textfiles (1.1), random-commits.py (1.1):

	Two scripts to generate a script containing a long series of
	commits. The usage information is in comments in the header of each
	script.  

2001-08-27 18:49   Branko Cibej &lt;brane@xbc.nu&gt;

	* .cvsignore (1.10), HACKING (1.39), svn_private_config.hw (1.4),
	subversion/clients/cmdline/subversion_client.dsp (1.7),
	subversion/libsvn_fs/libsvn_fs.dsp (1.16),
	subversion/svnadmin/svnadmin.dsp (1.6),
	subversion/svnlook/svnlook.dsp (1.4),
	subversion/tests/libsvn_test_main.dsp (1.7),
	subversion/tests/libsvn_delta/deltaparse_test.dsp (1.7),
	subversion/tests/libsvn_delta/random_test.dsp (1.5),
	subversion/tests/libsvn_delta/svndiff_test.dsp (1.5),
	subversion/tests/libsvn_delta/vdelta_test.dsp (1.5),
	subversion/tests/libsvn_delta/xml_output_test.dsp (1.5),
	subversion/tests/libsvn_fs/fs_test.dsp (1.7),
	subversion/tests/libsvn_fs/skel_test.dsp (1.7),
	subversion/tests/libsvn_repos/repos_test.dsp (1.3),
	subversion/tests/libsvn_subr/hashdump_test.dsp (1.6),
	subversion/tests/libsvn_subr/string_test.dsp (1.6),
	subversion/tests/libsvn_wc/checkout_test.dsp (1.5),
	subversion/tests/libsvn_wc/commit_test.dsp (1.7):

	Reworked the Win32 build again. No more environment variables, no
	more special settings in MSVC. The Berkeley DB includes and libs
	must now live under db3-win32 in the root of the Subversion source
	tree.  
	
	Also fixed some test driver .dsps so that all tests can now be built 
	in Release mode.  
	
	* .cvsignore: Added db3-win32 
	* HACKING: New build instructions.  
	* svn_private_conftg.hw: Change SVN_FS_WANT_DB_* to require 3.3.11.  
	
	* *.dsp: Look for DB3 includes in .../db3-win32/include; look for 
	import libs in .../db3-win32/lib. Fix library paths in several test 
	driver projects.  

2001-08-27 15:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/: commit_tests.py (1.16),
	prop_tests.py (1.8), schedule_tests.py (1.5), svnadmin_tests.py
	(1.5):

	* commit_tests.py 
	* prop_tests.py 
	* schedule_tests.py 
	* svnadmin_tests.py 
	
	  Uh...can't use traceback without importing the traceback module.  

2001-08-27 15:29  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/: basic_tests.py (1.14),
	commit_tests.py (1.15), prop_tests.py (1.7), schedule_tests.py
	(1.4), svnadmin_tests.py (1.4):

	* basic_tests.py 
	* commit_tests.py 
	* prop_tests.py 
	* schedule_tests.py 
	* svnadmin_tests.py 
	
	  Add a warning about the need for Python 2.1 when a SyntaxError 
	  occurs importing the svntest module.  

2001-08-27 15:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.h (1.32):

	* fs.h (SVN_FS__REPOS_CUSTOM_DIR): Remove.  This was unused, and the 
	need for it is no longer clear.  If we do end up desiring a
	designated user space in the repository, it's easy enough to add
	later.  But we aren't using such an area in the initial M3
	repository, so it's premature to support it now.  
	
	Note: if we eventually decide to implement this, I
	(kfogel@collab.net) have a diff that already implements most of it.  

2001-08-27 14:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.72):

	(create_hooks): Use a realistic example for the post-commit
	template.  

2001-08-27 12:26  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_delta.h (1.156), libsvn_delta/svndiff.c
	(1.29), libsvn_delta/xml_parse.c (1.158), libsvn_fs/reps-strings.c
	(1.29), mod_dav_svn/repos.c (1.60),
	tests/libsvn_delta/random-test.c (1.25):

	Implement Karl's suggestion for svndiff streams, that upon closing
	the stream, if all the svndiff data has not been handled, it is only 
	considered an error if the stream's creator so requests.  
	
	* subversion/libsvn_delta/svndiff.c 
	
	  (struct decode_baton): Added ERROR_ON_EARLY_CLOSE member.  
	
	  (close_handler): Return SVN_ERR_SVNDIFF_UNEXPECTED_END only if the 
	  baton was created with ERROR_ON_EARLY_CLOSE set to TRUE.  
	
	  (svn_txdelta_parse_svndiff): Added ERROR_ON_EARLY_CLOSE argument to 
	  populate new member of decode_baton structure.  
	
	* subversion/include/svn_delta.h 
	
	  (svn_txdelta_parse_svndiff): Added ERROR_ON_EARLY_CLOSE argument to 
	  populate new member of decode_baton structure.  
	
	* subversion/libsvn_delta/xml_parse.c 
	
	  (do_begin_textdelta): Request an error if we close the svndiff 
	  stream too early.  
	
	* subversion/tests/libsvn_delta/random-test.c 
	
	  (main): Request an error if we close the svndiff stream too early.  
	
	* subversion/libsvn_fs/reps-strings.c 
	
	  (rep_read_range): Request that we do NOT get an error for closing 
	  the svndiff stream early.  This means we no longer need to trap an 
	  error when closing the stream.  
	
	* subversion/mod_dav_svn/repos.c 
	
	  (dav_svn_open_stream): Request that we do NOT get an error for 
	  closing the svndiff stream early.  

2001-08-27 11:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/clients/cmdline/status.c (1.8):

	When printing only modified files, show conflicted and even merged 
	files too.  
	
	This resolves issue #448, but we still need regression tests, so 
	instead of closing the issue, I've reblorgified it to be about
	tests.  

2001-08-27 11:10  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/schedule_tests.py (1.3):

	Just keeping myself busy here writing tests (read: Hey, if you're 
	wondering how *you* can contribute to Subversion, consider writing 
	tests) 
	
	* schedule_tests.py 
	
	  (delete_files, delete_dirs): New test functions.  
	
	  (test_list): Add references to new test functions.  

2001-08-27 11:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.28):

	(svn_fs__rep_deltify): Turn off deltification.  

2001-08-27 11:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.14):

	Revert accidental commit 1.13, now back to contents of rev 1.12.  

2001-08-27 10:11  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.194):

	* get_editor.c 
	
	  (svn_wc_get_actual_target): Fixes for Issue #444.  It isn't enough 
	  to simply check to see if the parent is under revision control. 
	  We gotta make the parent is versioned *as our parent* ! 

2001-08-26 19:02   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.38), subversion/clients/cmdline/subversion_client.dsp
	(1.6), subversion/libsvn_fs/libsvn_fs.dsp (1.15),
	subversion/libsvn_ra/libsvn_ra.dsp (1.2),
	subversion/libsvn_ra_dav/libsvn_ra_dav.dsp (1.2),
	subversion/libsvn_ra_local/libsvn_ra_local.dsp (1.2),
	subversion/libsvn_repos/libsvn_repos.dsp (1.6),
	subversion/svnadmin/svnadmin.dsp (1.5),
	subversion/svnlook/svnlook.dsp (1.3),
	subversion/tests/libsvn_test_main.dsp (1.6),
	subversion/tests/libsvn_fs/fs_test.dsp (1.6),
	subversion/tests/libsvn_fs/skel_test.dsp (1.6),
	subversion/tests/libsvn_repos/repos_test.dsp (1.2):

	Change from Roman Neuhauser &lt;cynic@mail.cz&gt;: 
	
	Update Win32 build to db-3.3.11, and remove the dependency on the 
	SVN_DB3_WIN32 environment variable.  
	
	* HACKING: New Win32 build instructions.  * *.dsp: Remove references
	to SVN_DB3_WIN32, ling win libdb33.  

2001-08-24 17:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/clients/cmdline/: cl.h (1.17), main.c (1.16),
	status-cmd.c (1.7), status.c (1.7):

	Stupid status tricks:  'svn st -M' is now equivalent to 'svn st |
	grep "^M"'.  Just a shortcut.  
	
	* cl.h (svn_cl__opt_state_t):  add 'modified' flag.  
	
	* main.c (main): add '--modified'/ '-M' commandline switch.  
	
	* status.c (svn_cl__print_status_list): filter if modify-flag set.  
	
	* status-cmd.c (svn_cl__status): pass opt_state-&gt;modified to above.  

2001-08-24 14:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.13):

	(svn_fs__rep_deltify): Turn off deltification.  

2001-08-24 13:21  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/libsvn_client/auth.c (1.7):

	Fix echoing of passwords to screen.  
	
		auth.c(auth_simple_password): Change HIDE flag to 1(true)when
			prompting for passwords.  
	
	This fixes Issue #464.  

2001-08-24 12:05  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/: clients/cmdline/basic_tests.py (1.13),
	libsvn_fs/fs-test.c (1.103):

	* clients/cmdline/basic_tests.py 
	
	  (test_list): Enable update_binary_file_2 test.  
	
	* libsvn_fs/fs-test.c 
	
	  (get_file_digest): Readjust back to a big buffer (with a 
	  docstring and bug report to boot).  
	
	  (large_file_integrity): Make filesize bigger than 
	  svn_txdelta__window_size for regression testing usefulness.  

2001-08-24 11:07  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_error_codes.h (1.15),
	libsvn_delta/svndiff.c (1.28), libsvn_fs/reps-strings.c (1.27):

	Woohoo.  I think this nails the svn_txdelta__window_size-ed files
	bug.  
	
	* include/svn_error_codes.h 
	
	  (SVN_ERR_SVNDIFF_INVALID_HEADER, SVN_ERR_SVNDIFF_CORRUPT_WINDOW, 
	  SVN_ERR_SVNDIFF_BACKWARD_VIEW, SVN_ERR_SVNDIFF_INVALID_OPS, 
	  SVN_ERR_SVNDIFF_UNEXPECTED_END): New error codes for svndiff data.  
	
	* libsvn_delta/svndiff.c 
	
	  (write_handler, close_handler): Use new SVN_ERR_SVNDIFF_* error
	  codes.  
	
	* libsvn_fs/reps-strings.c 
	
	  (rep_read_range): Fixed some early-loop-exit logic bugs.  Also, 
	  closing a delta stream early causes a specific error 
	  (SVN_ERR_SVNDIFF_UNEXPECTED_END) now, so we can test for that
	  error and handle it appropriately.  

2001-08-23 16:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.126):

	
	* adm_crawler.c (svn_wc_crawl_local_mods): apply gstein's change; 
	  if we have two return two errors, link them together and return
	  that.  

2001-08-23 15:59  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.76):

	Make pool debugging stuff print out more neatly.  
	
	* svn_error.c 
	
	  (svn_pool_create_debug, svn_pool_clear_debug,
	  svn_pool_destroy_debug): Make output columnar.  

2001-08-23 15:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.99):

	Working with Ben on the fs memory usage problem: 
	
	* tree.c (merge): Take a target node instead of target_root, now;
	use target_path only for conflict error reporting.  Also, just check
	for mutability instead of forcing it, since in normal operation
	anything we call merge on must be mutable.  This should result in
	many fewer calls to svn_fs__get_node_revision.  
	(get_dag_mutable): Remove this now-unused function.  
	(txn_body_merge): Change call to merge to match above.  Doc fix.  

2001-08-23 14:53  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.102):

	* fs-test.c 
	
	  (large_file_integrity): Oops.  Check in non-broken version.  

2001-08-23 14:51  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.101):

	* fs-test.c 
	
	  (large_file_integrity): Reverse order of final MD5 testing.  Test 
	  the trivial (fulltext) revision first, then increase in complexity 
	  as deltas are stored back to revision 1.  

2001-08-23 14:16  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.100):

	* fs-test.c 
	
	  (get_file_digest): Drop buffer size down to 4096.  
	
	  (random_data_to_buffer): Helper function for writing pseudo-random 
	  data to a buffer.  
	
	  (large_file_integrity): Make sure we are using a file bigger than 
	  svn_txdelta__window_size since we've had bugs with files that big.  
	  Also, use random_data_to_buffer() 'cause it makes debugging so
	  much easier (what, you won't want to step through a pseudo-random
	  number of for() loops?).  

2001-08-23 14:15  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/svndiff.c (1.27):

	* svndiff.c 
	
	  (window_handler): Docstring spelling fix.  

2001-08-23 13:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.98):

	(merge): We already have node IDs, so don't redundantly refetch
	them.  

2001-08-23 13:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/clients/cmdline/: prompt.c (1.4), trace-commit.c
	(1.8):

	Ben recommended fixing issue #450 a different way: 
	
	* trace-commit.c (replace_root): Revert change of 2001-08-20.  
	
	* prompt.c (svn_cl__prompt_user): Print a newline if user's newline 
	won't be shown.  

2001-08-23 12:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.97):

	(merge): Less inaccurate error code (this is subtly different from 
	being "more accurate", by the way).  

2001-08-23 11:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.96):

	(txn_body_merge): Add explanatory comments in the places where Ben
	had questions.  

2001-08-23 11:34  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/basic_tests.py (1.12):

	* basic_tests.py 
	
	  (update_binary_file_2): New test function.  
	
	  (test_list): Add reference to new test function,
	  update_binary_file_2().  Currently, this is commented out (cuz it
	don't pass).  

2001-08-22 12:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.125):

	
	* adm_crawler.c (svn_wc__crawl_local_mods):  main logic moved in
	here.  
	
	  (svn_wc_crawl_local_mods):  public API is now a wrapper that passes 
	  lockhash to static func, and catches *all* crawl errors and
	  unlocks dirs.  

2001-08-21 19:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.71):

	(svn_fs_close_fs): Oops, leave instrumenting off by default.  

2001-08-21 19:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.70):

	(svn_fs_close_fs): Remove inaccurate comment -- turned out to be a 
	case of installed libs interfering with local compilation again.  

2001-08-21 18:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.69):

	(svn_fs_close_fs): Set up lock and txn instrumentation, #ifdef'd out 
	for normal operation.  

2001-08-21 17:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.68):

	* fs.c (cleanup_fs): Add comment about wait time, so future readers 
	will know.  

2001-08-21 17:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.67):

	* fs.c (cleanup_fs): Whoa, revert previous change to wait time.  
	apr_sleep() takes microseconds, not milliseconds.  Thanks to Greg 
	Stein for pointing this out.  From now on, Karl relies on docs, not 
	his eminently fallible memory.  

2001-08-21 15:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.66):

	* fs.c (cleanup_fs): Just wait one minute, not sixteen, before 
	re-attempting a checkpoint.  

2001-08-21 15:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.65):

	* fs.c (cleanup_fs): Fix cut-and-pastos in error strings passed to 
	cleanup_fs_db.  Next, investigate the sleep() call in the 
	DB_INCOMPLETE case immediately following this fix, which Mike Pilato 
	just noticed over my shoulder...  

2001-08-21 14:55  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/svndiff.c (1.26):

	* svndiff.c 
	
	  (write_handler): Fixed formatting.  

2001-08-21 14:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/Makefile (1.7):

	Remove again, so this file doesn't appear in 'export -D tomorrow'.  

2001-08-21 14:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* dist.sh (1.6):

	Ensure successful `cd's before going further.  Ben accidentally had 
	"make distclean" run in the top level of his working copy (oops!)
	when we failed to cd into the dist sandbox's apr/ subdir for
	cleanup.  

2001-08-21 11:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/mod_dav_svn/util.c (1.18):

	Patch from Michael Parker &lt;parkerm@jump.net&gt;, fixes compile: 
	
	* util.c (dav_svn_simple_parse_uri):  apr-util symbol name change.  

2001-08-21 11:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.124):

	* adm_crawler.c (svn_wc_crawl_local_mods): replace all SVN_ERR calls 
	  with blocks that cleanup lockfiles.  This might resolve a 
	  locked-working-copy bug seen in very large commit tests.  Thanks
	  to Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt; for noticing this problem.  

2001-08-20 16:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: basic_tests.py (1.11),
	commit_tests.py (1.14), prop_tests.py (1.6), schedule_tests.py
	(1.2), svnadmin_tests.py (1.3), svntest/actions.py (1.13),
	svntest/main.py (1.20), svntest/tree.py (1.10):

	Tweak python tests:  *always* print unexpected errors, *never* print 
	expected errors.  This keeps our test output clean.  
	
	* main.py (run_svn):  take 'error_expected' arg, so we can control 
	  whether stderr is printed.  
	
	* actions.py, tree.py, basic_tests.py, commit_tests.py,
	  prop_tests.py, schedule_tests.py, svnadmin_tests.py:   change all
	callers.  

2001-08-20 16:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/clients/cmdline/trace-commit.c (1.7):

	This should fix issue #450.  

2001-08-20 15:32  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/feedback.c (1.6),
	clients/cmdline/trace-commit.c (1.6),
	tests/clients/cmdline/basic_tests.py (1.10),
	tests/clients/cmdline/commit_tests.py (1.13),
	tests/clients/cmdline/prop_tests.py (1.5),
	tests/clients/cmdline/svnadmin_tests.py (1.2),
	tests/clients/cmdline/svntest/tree.py (1.9):

	* clients/cmdline/feedback.c 
	
	  Added #defines and #includes for APR string function support.  
	
	* clients/cmdline/trace-commit.c 
	
	  (close_directory): Changed (sent?) verb "Changing" to "Sending" 
	  (issue #451).  
	
	  (close_file): Add "(bin)" to printed statement for files determined 
	  to be binary files.  Also, use "Sending" instead of "Changing".  
	
	  (struct file_baton): Added BINARY field.  
	
	  (add_file): Initialize BINARY field to NULL.  
	
	  (change_file_prop): Pay attention to special mime-type property 
	  setting.  
	
	* tests/clients/cmdline/basic_tests.py 
	
	  (basic_commit, commit_one_file, commit_multiple_targets, 
	  commit_multiple_targets_2, basic_update, basic_merge, 
	  basic_conflict, update_binary_file): Use "Sending" instead of 
	  "Changing" for commit output.  
	
	* tests/clients/cmdline/svntest/tree.py 
	
	  (build_tree_from_commit): Update regexp to support new 
	  output from commit trace editor.  
	
	* tests/clients/cmdline/svnadmin_tests.py 
	
	  (test_youngest, list_revs): Use "Sending" instead of "Changing" for 
	  commit output.  
	
	* tests/clients/cmdline/commit_tests.py 
	
	  (commit_one_file, commit_inclusive_dir, commit_top_dir): Use 
	  "Sending" instead of "Changing" for commit output.  
	
	* tests/clients/cmdline/prop_tests.py 
	
	  (commit_props, update_props, downdate_props): Use "Sending" instead 
	  of "Changing" for commit output.  

2001-08-20 15:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.28):

	Fix up doc building and cleaning; make sure it works when build dir
	is different from src dir.  Large portions of this change
	contributed by 
	C. Scott Ananian &lt;cananian@lesser-magoo.lcs.mit.edu&gt;.  
	
	* Makefile.in (DOC_DIRS): New var.  
	(mkdir-init): Make doc dirs too.  
	(doc-clean): New rule.  
	(local-clean): Depend on `doc-clean'.  
	(.texi.info): Do no cleanup, now that `doc-clean' works.  

2001-08-20 15:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/mod_dav_svn/util.c (1.17):

	Follow apr_uri_ rename.  Submitted by C. Scott Ananian 
	&lt;cananian@lesser-magoo.lcs.mit.edu&gt;, who writes: 
	
	  From: "C. Scott Ananian" &lt;cananian@lesser-magoo.lcs.mit.edu&gt; 
	  Subject:  path: apache 2.0 apr_uti_components name change 
	  To: dev@subversion.tigris.org 
	  Date: Mon, 20 Aug 2001 14:18:13 -0400 (EDT) 
	
	  In the most recent CVS version of apache 2.0, the type 
	  'apr_uri_components' mentioned in subversion/mod_dav_syn/util.c
	  has been renamed to 'apr_uri_t'.  The following patch against
	  current CVS is required to allow subversion + mod_dav_svn to
	   compile.  --s 

2001-08-20 12:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.20):

	* svnlook/main.c 
	
	  (INT_ERR, main): Explicitly clean up the FS before exiting.  

2001-08-20 12:29  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_client/commit.c (1.59):

	* libsvn_client/commit.c 
	
	  (import_file): Detect the mime-type on import, and send it up as a 
	  property of the file.  

2001-08-17 11:53   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.70):

	* fetch.c: Use apr_want.h rather than string.h, and fix comment.  

2001-08-17 11:50   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.69):

	* fetch.c (start_element): Fix uninitialized variable warning at 
	line 855.  

2001-08-17 11:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.19),
	tools/hook-scripts/commit-email.pl (1.4):

	* subversion/svnlook/main.c 
	
	  (svnlook_cmd_t): Added svnlook_cmd_info and svnlook_cmd_tree (new 
	  subcommands).  
	
	  (do_info): New function.  
	
	  (do_default): Use do_info() function.  
	
	  (do_usage): Renamed from usage().  Added TREE and INFO subcommands.  
	  Changed default output to be INFO + TREE.  
	
	  (main): Handle new subcommand cases.  
	
	* tools/hook-scripts/commit-email.pl 
	
	  Use svnlook's info command to get the author, date, and log in one 
	  foul swoop.  Also, uses arrays for tracking the changed nodes 
	  instead of a weird hash nonsense.  

2001-08-17 11:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.31):

	* build.conf 
	
	  Added schedule_tests.py to the test framework.  

2001-08-17 11:24  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/schedule_tests.py (1.1):

	* subversion/tests/clients/cmdline/schedule_tests.py 
	
	  New file.  Tests for WC scheduling stuff (add, unadd, delete, 
	  undelete).  

2001-08-17 05:16   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.59):

	Install a warning function for the FS so we can log problems rather 
	than abort() on them.  

2001-08-16 23:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.123):

	* adm_crawler.c (svn_wc_crawl_local_mods): Invalidate dir_baton when 
	the next target is not in the directory we had been processing.  
	
	This may be related to issue #444.  

2001-08-16 16:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* INSTALL (1.6):

	Add note about building statically.  

2001-08-16 14:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* autogen.sh (1.47):

	* autogen.sh 
	
	  Added some code to chmod +x scripts and such needed by autogen.sh.  
	  It sucks to check out the subversion tree and have to hack at it
	  to build it.  

2001-08-16 14:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.37):

	(Building from a working copy): Mention the autogen.sh x-bit 
	workaround.  

2001-08-16 14:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.12):

	More notes.  

2001-08-16 14:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* dist.sh (1.5):

	Make sure autogen.sh is executable, since later, when this dist
	script exports the tree using subversion, the permissions won't be
	right.  Until we get permission versioning done, at least. :-) 
	
	Also, format sections more clearly.  

2001-08-16 13:43  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_repos/libsvn_repos.dsp (1.5),
	svnlook/svnlook.dsp (1.2):

	* subversion/libsvn_repos/libsvn_repos.dsp 
	
	  (node_tree.c): Added to Source Files 
	
	* subversion/svnlook/svnlook.dsp 
	
	  (editors.c, nodetree.c): Removed obsolete Source Files 
	
	  (svnlook.h): Removed obsolete Header Files 

2001-08-16 12:38  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_repos.h (1.28),
	libsvn_ra_local/checkout.c (1.14), libsvn_repos/node_tree.c (1.5),
	libsvn_wc/adm_ops.c (1.84), svnlook/main.c (1.18):

	* subversion/libsvn_ra_local/checkout.c 
	
	  (walk_tree): Try a per-iteration pool out for size.  
	
	* subversion/include/svn_repos.h 
	
	  (svn_repos_node_t): Removed ID member.  
	
	  (svn_repos_node_editor): Added NODE_POOL argument.  Now memory used 
	  to build linked-list tree is not necessarily the same memory used
	  to during the editor drive.  
	
	* subversion/svnlook/main.c 
	
	  (print_tree): Remove SHOW_IDS and POOL argument.  This function 
	  won't handle ID printing anymore.  
	
	  (print_ids_tree): New function for printing trees with their IDs.  
	
	  (do_tree): Call print_ids_tree() if we're printing ids, else use 
	  print_tree().  
	
	* subversion/libsvn_repos/node_tree.c 
	
	  (struct edit_baton): Added NODE_POOL member.  
	
	  (replace_root, replace_directory, add_directory, replace_file, 
	  add_file): All calls to create_node(), create_child_node(), and 
	  create_sibling_node() use the editor's new NODE_POOL now instead
	  of the editor's POOL.  Removed all calls to svn_fs_node_id()
	  throughout (there's no longer an ID member in the svn_repos_node_t
	structure).  
	
	  (svn_repos_node_editor): Add NODE_POOL argument, used to initialize 
	  the edit baton's new NODE_POOL member.  
	
	* subversion/libsvn_wc/adm_ops.c 
	
	  (svn_wc_delete, svn_wc_unadd, svn_wc_undelete): Make sure ENTRY is 
	  non-NULL before dereferencing its members.  

2001-08-16 03:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/props.c (1.37):

	Fix a typo in an error message.  

2001-08-16 03:23   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_ra_dav/fetch.c (1.68), mod_dav_svn/update.c
	(1.10):

	Implement (fill in) the "missing WC files" functionality. The client
	sends svn:missing elements to the server to record the missing WC
	items.  
	
	Some bug fixes in the update report generation.  
	
	* libsvn_ra_dav/fetch.c (reporter_delete_path,
	    reporter_abort_report): implement these functions.  
	
	* mod_dav_svn/update.c (add_helper): the add-* element should not be
	    an empty element (leave it open).  
	  (upd_apply_textdelta): if the file was noted as "added", then
	    there is no reason to tell the client to fetch it -- it will
	  automagically do so.  
	(dav_svn__update_report): detect and handle svn:missing elements by 
	    calling svn_repos_delete_path.  

2001-08-15 22:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/node_tree.c (1.4):

	Use APR_WANT_STRFUNC and apr_want.h, as Greg Stein pointed out.  

2001-08-15 21:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.11):

	Turned into a short-term task list, now.  

2001-08-15 21:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* tools/hook-scripts/commit-email.pl (1.3):

	Documentation fix.  

2001-08-15 21:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* tools/hook-scripts/commit-email.pl (1.2):

	Finish remaining work; seems to be working now.  

2001-08-15 21:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_repos.h (1.27), libsvn_repos/hooks.c
	(1.17), mod_dav_svn/activity.c (1.11):

	Add the author name for a commit, and run the precommit hook.  
	
	* libsvn_repos/hooks.c (svn_repos_fs_begin_txn_for_commit): allow a
	    NULL log_msg since mod_dav_svn doesn't have it at the time it
	    creates the txn. (it comes along later, and we apply it directly to
	the txn props) 
	
	* include/svn_repos.h (svn_repos_fs_begin_txn_for_commit): update
	    docs to note the NULL log_msg 
	
	* mod_dav_svn/activity.c (dav_svn_create_activity): call 
	    svn_repos_fs_begin_txn_for_commit to run the precommit hooks,
	    and to attach the author name (which comes from
	    repos-&gt;username). no log_msg at this point, so pass NULL.  

2001-08-15 21:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/node_tree.c (1.3):

	#include &lt;string.h&gt;, for strcmp().  

2001-08-15 21:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.10):

	Bring up-to-date, getting closer...  

2001-08-15 21:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/prop_tests.py (1.4):

	(downdate_props): New test, but don't run it.  It doesn't actually 
	work yet.  

2001-08-15 21:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* tools/hook-scripts/: README (1.1), commit-email.pl (1.1):

	Committing work on commit-email script.  Mike Pilato really wrote 
	this, I'm just checking it in.  

2001-08-15 20:37   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/update.c (1.9):

	Fix some bugs related to updating.  
	
	(update_ctx_t {}): add 'anchor' member to note the base path when 
	  replace_root is called. all update paths will be built off this
	  path.  
	
	(upd_replace_root): use the new anchor member, rather than assuming
	"/" 
	
	(dav_svn__update_report): set up the uc.anchor member.  
	  HACK: if the node is a directory, then append "/." to it so that 
	  begin_report will see the correct directory after it does a split
	  on the param. Will fix post-M3 when begin_report grows another
	param.  

2001-08-15 18:06  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.66), session.c (1.36):

	* libsvn_ra_dav/commit.c: (commit_resource) Add cast to (void *) to
	make MSVC happy.  
	* libsvn_ra_dav/session.c: Include apr_general.h to pick up
	strcasecmp prototype.  

2001-08-15 17:25  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/node_tree.c (1.2):

	* node_tree.c (create_node): Use apr_pcalloc() to zero out memory.  

2001-08-15 16:23  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.30):

	* build.conf 
	
	  (svnlook): Removed the INSTALL line for this build target.  Hoping 
	  this means it will install the same way the `svn' binary does.  

2001-08-15 15:50  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.17):

	* main.c 
	
	  (do_diff): Fix for build warning.  

2001-08-15 15:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_dav/session.c (1.35):

	(dav_plugin):  remove AUTH_USERNAME support for M3.  We'll make the 
	client smarter later on;  right now it would attempt to use this 
	method, even though the hosting httpd process wouldn't accept it.  

2001-08-15 12:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* dist.sh (1.4):

	Defang the APR subtree so that it's no longer a working copy, as 
	suggested by Greg Stein.  

2001-08-15 12:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* dist.sh (1.3):

	Fix typo in comment.  

2001-08-15 11:48  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_repos.h (1.26), libsvn_repos/node_tree.c
	(1.1), svnlook/editors.c (1.4), svnlook/main.c (1.16),
	svnlook/nodetree.c (1.4), svnlook/svnlook.h (1.4):

	Moving code that from svnlook into the libsvn_repos library (because 
	we plan to make svnadmin use it, too) 
	
	* subversion/include/svn_repos.h 
	
	  (struct svn_repos_node_t): Moved from svnlook/svnlook.h (where it 
	  was just repos_node_t.  
	
	  (svn_repos_node_editor): Moved from svnlook/svnlook.h (where it was 
	  called svnlook_tree_delta_editor).  
	
	  (svn_repos_node_from_baton): Moved from svnlook/svnlook.h (where it 
	  was called svnlook_edit_baton_tree).  
	
	* subversion/libsvn_repos/node_tree.c 
	
	  New file (with contents + edits from subversion/svnlook/editors.c 
	  and subversion/svnlook/nodetree.c) 
	
	* subversion/svnlook/editors.c 
	* subversion/svnlook/nodetree.c 
	* subversion/svnlook/svnlook.h 
	
	  Removed obsolete files.  
	
	* subversion/svnlook/main.c 
	
	  Lots of renamed things (see above).  
	
	  (open_writable_binary_file, dump_contents): New helper functions.  
	
	  (contents_to_tmp_file): Removed obsolete function.  
	
	  (print_diff_tree): Updated to use new helper functions.  Diff output 
	  is prettier now.  
	
	  (do_diff): Cleanup temporary dirs.  

2001-08-15 10:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.59):

	Fix issue #439; bug report and fix both submitted by Yoshiki Hayashi 
	&lt;yoshiki@xemacs.org&gt;: 
	
	* questions.c (timestamps_equal_p): Check for null entry.  

2001-08-15 10:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* dist.sh (1.2):

	Append $VERSION to $DISTNAME, as Greg Stein suggested, so the
	tarball unpacks into subversion-&lt;ver&gt;/, not subversion/.  

2001-08-15 10:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/README (1.10):

	Update documentation.  

2001-08-15 10:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/main.py (1.19):

	More tweaks to work over ra_dav.  

2001-08-15 09:49  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_client/status.c (1.22):

	* status.c 
	
	  (svn_client_status): Bug fix.  If you can't get the ancestry from a 
	  file target, try looking in its parent.  

2001-08-15 09:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/: actions.py (1.12),
	main.py (1.18):

	Switch to the symlink method, for dav testing.  

2001-08-15 09:39  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.118):

	* entries.c 
	
	  (take_from_entry): Doc fix.  

2001-08-15 09:14  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_subr/io.c (1.45):

	* io.c 
	
	  (svn_io_detect_mimetype): Bug fix for Issue #440 

2001-08-14 19:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* INSTALL (1.5):

	Tweak.  

2001-08-14 19:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* INSTALL (1.4), Makefile.in (1.27), dist.sh (1.1):

	* dist.sh: New file, builds tarball.  
	
	* Makefile.in (dist): Just invoke dist.sh 
	
	* INSTALL: Say only true things.  

2001-08-14 17:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/: actions.py (1.11),
	main.py (1.17):

	Rewrite argv parsing.  take "--url" arg instead.  

2001-08-14 14:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.193):

	* get_editor.c (close_file): bugfix -- duh.  only execute the new 
	  textual merge logic if the update involved a textual change.  

2001-08-14 13:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.111), libsvn_subr/io.c (1.44),
	libsvn_wc/get_editor.c (1.192), libsvn_wc/props.c (1.36),
	libsvn_wc/questions.c (1.58), tests/clients/cmdline/basic_tests.py
	(1.9), tests/clients/cmdline/svntest/main.py (1.16),
	tests/clients/cmdline/svntest/tree.py (1.8):

	Finish issue #432:  make updates of binary files work.  
	
	If a file is locally modified, then a working text file will have 
	changes 'merged' in via diff/patch, and a working binary file will 
	simply be backed up to a unique '.orig' (right next to the newly 
	received version of the file.) 
	
	If has file has no local mods, then the newly received version just 
	overwrites the working file, regardless of text/binary type.  
	
	* get_editor.c (close_file):  rewrite logic as described above! 
	 to handle updates of 
	  binary files.  Also, if there are no local mods, then just
	  overwrite the working file *regardless* of text/binary type.  
	
	* svn_wc.h, questions.c (svn_wc_has_binary_prop):  new helper
	routine.  
	
	* basic_tests.py (update_binary_file):  new test for binary file 
	  updates;  checks for .orig file backup locally modified file.  
	
	  (detect_extra_files):  fancy singleton handler for verifying 
	  contents of the extra '.orig' file.  
	
	* tree.py (get_props):  split property on ' : ' instead of ':',
	  since prop names often have colons in them.  
	
	  (SVNTreeNode):  treenodes now contain 'path' field, a full path to 
	  itself in the tree.   how did we ever live without this? 
	
	* main.py (run_tests): bugfix. `try' clause was too big -- it was 
	  catching ValueErrors from the actual test being run! 
	
	* io.c (apr_copy_file): unrelated bugfix.  this routine wasn't 
	  truncating before, sometimes leaving trailing data.  
	
	* props.c (svn_wc_prop_list): unrelated bugfix.  remove bogus check, 
	  as it defeats correct behavior of svn_wc__prop_path.  

2001-08-14 13:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.26):

	(dist): Making this work...  

2001-08-14 12:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.25):

	(dist): Note emphemeral, fleeting nature.  

2001-08-14 11:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.117):

	* entries.c 
	
	  (svn_wc__entries_write): Remove dangerous and poorly though-out 
	  code.  Smack the author two or three times.  

2001-08-14 11:22  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.95):

	* tree.c 
	
	  (merge): Oops.  What, you mean I need to follow ANSI C coding 
	  conventions? 

2001-08-14 11:12  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: strings-table.c (1.12), tree.c (1.94):

	* strings-table.c 
	
	  (svn_fs__string_size): Removed obsolete "todo" comment.  
	
	* tree.c 
	
	  (txn_body_copy, svn_fs_apply_textdelta): Updated "todo" comment.  
	
	  (merge): Logic reorganization and some "todo" cleanups.  

2001-08-14 10:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/theta.png (1.1):

	Temporarily adding binary file for testing.  

2001-08-13 22:51   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/deadprops.c (1.16):

	BIG HACK. Map the incoming names from mod_dav's current scheme
	(NAMESPACE-ID ":" NAME) into a "normal" string for use in the FS.
	Also take care of the property values that mod_dav expects: they
	begin with a language value and contain embedded NUL characters.  
	
	This is a temporary solution. The final solution (in the next day, 
	hopefully) will be a reworking of the interface between mod_dav and
	its backend modules (e.g. mod_dav_svn).  
	
	(dav_db{}): add a working buffer for the various remapping 
	
	(fix_name): new function to tweak a property name from the mod_dav
	  style to the FS style.  
	
	(dav_svn_db_open): prep the working buffer 
	
	(dav_svn_db_fetch): if the "METADATA" pseudo-property is requested,
	  then return a fake one. (we no longer store this property). remap
	  the name via fix_name(). format the result value properly.  
	
	(dav_svn_db_store): don't store the "METADATA" pseudo-property.
	  remap the name. handle the value reformat.  
	
	(dav_svn_db_remove, dav_svn_db_exists): remap the name.  
	
	(get_key): pass in db to do the hack-work. remap the name from the
	  FS style to the mod_dav style.  
	
	(dav_svn_db_firstkey, dav_svn_db_nextkey): pass new param to
	get_key.  

2001-08-13 22:44   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.65):

	When sending properties to the server, don't use the custom
	namespace if the property name already begins with "svn:".  
	
	(do_setprop): test the name for "svn:" and use the right namespace
	prefix 
	
	(do_proppatch): define the "C" prefix for the custom namespace and
	  use "S" for the normal "svn:" namespace. For deletes, use the
	  correct prefix based on the property name.  

2001-08-13 22:41   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: mod_dav_svn/liveprops.c (1.23), mod_dav_svn/update.c
	(1.8), include/svn_xml.h (1.33), libsvn_ra_dav/fetch.c (1.67),
	libsvn_ra_dav/props.c (1.12), libsvn_ra_dav/ra_dav.h (1.37):

	Rationalize some of the XML namespaces and property name/prefix
	stuff.  
	
	WARNING: DAV-based working copies will be broken by this change
	  because of a local property name change.  
	
	
	* mod_dav_svn/update.c (dav_svn__update_report): update some error
	    text -- the svn:target-revision element name is lower-case.  
	
	* mod_dav_svn/liveprops.c (dav_svn_namespace_uris[]): use
	    SVN_PROP_PREFIX for the property prefix to ensure we get the
	    lower-cased prefix for the property names.  
	
	* libsvn_ra_dav/ra_dav.h (SVN_RA_DAV__LP_NAMESPACE): use
	    SVN_PROP_WC_PREFIX to ensure that we get the proper prefix; toss the
	    long URL in favor of a simpler prefix.  
	  (SVN_RA_DAV__CUSTOM_NAMESPACE, SVN_RA_DAV__PROP_BASELINE_RELPATH):
	    use SVN_PROP_PREFIX to get the lower-cased version of the prefix.  
	
	* libsvn_ra_dav/props.c (neon_descriptions[]): use SVN_PROP_PREFIX
	    to get the right case for the property prefix.  
	
	* libsvn_ra_dav/fetch.c (starting_props[]): use SVN_PROP_PREFIX to
	    get the right case for the property prefix.  
	
	* include/svn_xml.h (SVN_XML_NAMESPACE): use the simpler "svn:"
	prefix 

2001-08-13 22:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.58):

	add missing svn_repos.h header 

2001-08-13 19:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* INSTALL (1.3):

	Document installation procedure.  

2001-08-13 19:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.14):

	Mention libsvn_repos.  

2001-08-13 17:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.97):

	No more M3 stuff here.  A few administrative tasks remain; they're 
	listed in notes/m3-checklist.txt.  

2001-08-13 16:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.9):

	A few more M3 things.  

2001-08-13 16:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.8):

	Some more M3 stuff.  

2001-08-13 15:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/delta.c (1.54):

	Fix issue #431: 
	
	(delta_proplists): Pass null value to delete a property.  Also,
	check for trivial case first, though this is only a performance
	enhancement and doesn't affect behavior.  

2001-08-13 14:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.191):

	* get_editor.c 
	
	  (svn_wc_get_actual_target): Bug fix.  APR won't tell us that "" is a 
	  directory -- we need to supply ".".  

2001-08-13 14:40  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion.dsw (1.17), subversion/svnadmin/svnadmin.dsp (1.4),
	subversion/tests/libsvn_fs/fs-test.c (1.99),
	subversion/tests/libsvn_repos/repos_test.dsp (1.1),
	subversion/tests/libsvn_repos/tests_libsvn_repos_test.dsp (1.3):

	* subversion.dsw 
	
	  (__check__): Added repos test.  
	
	  (tests_libsvn_repos_repos): Renamed from tests_libsvn_repos_test.  
	
	* subversion/svnadmin/svnadmin.dsp 
	
	  Added include path to Berkeley.  
	
	* subversion/tests/libsvn_fs/fs-test.c 
	
	  (check_old_revisions): Windows compiler greatly frowned upon newline 
	  characters inside my string.  
	
	* subversion/tests/libsvn_repos/repos_test.dsp 
	
	  New file (with the old contents of tests_libsvn_repos_test.dsp).  
	
	* subversion/tests/libsvn_repos/tests_libsvn_repos_test.dsp 
	
	  Removed this file (see above).  

2001-08-13 13:50  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/libsvn_repos/libsvn_repos.dsp (1.4):

	* subversion/libsvn_repos/libsvn_repos.dsp: Add lock.c as another
	source file to bulid. This fixes the svn_repos_open symbol problem.  

2001-08-13 10:34  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/cmdline/feedback.c (1.5):

	* feedback.c 
	
	  (report_added_item, report_unadded_item, report_deleted_item, 
	  report_undeleted_item): Stop caring about file/directory-ness of
	  the reported item.  

2001-08-13 10:15  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/feedback.c (1.4), include/svn_io.h
	(1.42), include/svn_pools.h (1.4), include/svn_types.h (1.66),
	libsvn_subr/io.c (1.43), libsvn_subr/svn_error.c (1.75),
	libsvn_wc/adm_ops.c (1.83):

	* svn_io.h 
	
	  (svn_io_detect_mimetype): New function.  
	
	* io.c 
	
	  (svn_io_detect_mimetype): New function.  
	
	* svn_pools.h 
	
	  (svn_pool_feedback_t): Added new callback functions -- 
	  report_added_item(), report_unadded_item(), report_deleted_item(), 
	  report_undeleted_item().  
	
	* feedback.c 
	
	  (report_added_item, report_unadded_item, report_deleted_item, 
	  report_undeleted_item): New functions.  
	
	  (svn_cl__init_feedback_vtable): Initialize function pointers to new 
	  functions.  
	
	* svn_types.h 
	
	  (SVN_PROP_MIME_TYPE, SVN_PROP_CHARSET): New property #defines.  
	
	* adm_ops.c 
	
	  (mark_tree): Call feedback functions for reporting schedule changes.  
	
	  (svn_wc_add_file): Detect mimetype and store as a property on the 
	  file, then call the report_added_item() feedback function.  
	
	  (svn_wc_add_directory): Call report_added_item() feedback function.  
	
	  (svn_wc_unadd): Call report_unadded_item() feedback function.  
	
	  (svn_wc_undelete): Call report_undeleted_item() feedback function.  
	
	  (svn_wc_delete): Call report_deleted_item() feedback fction.  
	
	* svn_error.c 
	
	  (report_added_item, report_unadded_item, report_deleted_item, 
	  report_undeleted_item): New dummy functions.  
	
	  (svn_error_init_pool): Initialize new callback function pointers 
	  with new dummies.  

2001-08-13 06:02   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: mod_dav_svn/dav_svn.h (1.36),
	mod_dav_svn/deadprops.c (1.15), mod_dav_svn/repos.c (1.57),
	libsvn_ra_dav/commit.c (1.64), libsvn_ra_dav/fetch.c (1.66),
	libsvn_ra_dav/ra_dav.h (1.36):

	Send the log message to the server via a property on the working
	baseline.  
	
	* mod_dav_svn/dav_svn.h (dav_svn_root): add the FS transaction
	    handle for later use.  
	
	* mod_dav_svn/deadprops.c (dav_svn_db_open): baselines now have
	    properties, so allow them in. add a check for a R/W against R/O
	  sources.  
	(dav_svn_db_fetch, dav_svn_db_exists, dav_svn_db_firstkey): fetch 
	    properties from transaction and revision roots when applicable.  
	  (dav_svn_db_store, dav_svn_db_remove): remove properties from
	    transactions when applicable.  
	
	* mod_dav_svn/repos.c (dav_svn_prep_working): set up working
	    baselines.  remember the FS transaction handle.  
	
	* libsvn_ra_dav/commit.c (log_message_prop): new property name for
	    the log message (to be used in a PROPPATCH).  
	  (do_proppatch): use DEBUG_CR rather than EOL. minor formatting
	  nits.  
	(get_baseline_url): no longer needed; folded into apply_log_message 
	  (apply_log_message): new function to transfer the log message to
	    the server.  
	  (svn_ra_dav__get_commit_editor): shift baseline fetching and
	    checkout to the new apply_log_message function.  
	
	* libsvn_ra_dav/fetch.c, ra_dav.h (DEBUG_CR): move from fetch.c to
	ra_dav.h 

2001-08-12 22:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.25):

	* svnadmin/main.c: #include "db.h", for DB_RUNRECOVERY check.  
	(main.c): Ignore DB_RUNRECOVERY when opening fs.  Also, open db 
	lockfile for writing/appending, so the resulting filehandle is 
	suitable for obtaining an exclusive lock.  This resolves issue #429, 
	though I must admit I don't understand why the flags on the
	filehandle should affect the type of lock you can get.  Add new
	comment regarding issue #430.  

2001-08-12 22:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.105), libsvn_fs/fs.c (1.64),
	svnadmin/main.c (1.24):

	Finish db recovery code, at least in theory.  Thanks to Greg Stein
	for answering many questions.  
	
	In practice, whenever I run `svnadmin recover' on a repository -- 
	which should be a successful no-op when there's nothing to recover 
	from -- `svnadmin' fails in apr_file_lock(), which in turn fails 
	because fcntl() is returning -1, with errno set indicating "Bad file 
	descriptor".  I don't know why; the lockfile is certainly there. 
	Any thoughts, folks? 
	
	* svnadmin/main.c (main, usage): New `recover' subcommand.  
	
	* svn_fs.h (svn_fs_db_env_path): Declare new func.  
	(svn_fs_repository): Doc fix.  
	
	* fs.c (create_locks): Fix explanatory text in lockfile.  

2001-08-12 18:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.96), build.conf (1.29), subversion/include/svn_fs.h
	(1.104), subversion/include/svn_repos.h (1.25),
	subversion/libsvn_fs/fs.c (1.63),
	subversion/libsvn_ra_local/ra_plugin.c (1.43),
	subversion/libsvn_repos/hooks.c (1.16),
	subversion/libsvn_repos/lock.c (1.3),
	subversion/mod_dav_svn/repos.c (1.56), subversion/svnadmin/main.c
	(1.23), subversion/svnlook/main.c (1.15):

	More fs locking work: 
	
	* lock.c (clear_and_close): Replaces unlock_repository, finished.  
	
	* svn_repos.h (svn_repos_open): Doc fix.  
	
	* svn_fs.h (svn_fs_new, svn_fs_open_berkeley): Doc fixes.  
	
	* fs.c (svn_fs_open_berkeley): Set up hook and lock paths.  
	
	* svn_fs.h, fs.c (svn_fs_repository, svn_fs_conf_dir,
	svn_fs_lock_dir, svn_fs_db_lockfile, svn_fs_hook_dir): Take pool
	argument, allocate path in it; all callers changed.  This will
	lessen the impact of fixing issue #428, when we get around to that.  
	
	* ra_plugin.c (authenticate): Call svn_repos_open(), instead of 
	svn_fs_new() followed by svn_fs_open_berkeley().  
	
	* repos.c (dav_svn_get_resource): Same.  
	
	* svnlook/main.c (main): Same.  
	
	* svnadmin/main.c (main): Same.  
	
	* build.conf (svnadmin): Depend on libsvn_repos too.  

2001-08-11 08:41  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/clients/win32/svn_com/: SVN.cpp (1.9), SVNStatus.cpp
	(1.2):

	Fix the win32 build.  This fixes a Microsoft Bug, involving
	duplicate definitions for InlineIsEqualGUID.  For more information
	see: http://support.microsoft.com/support/kb/articles/q243/2/98.asp 
	
	Submitted by:	Cynic &lt;cynic@mail.cz&gt; Reviewed by:	Kevin Pilch-Bisson
	&lt;kevin@pilch-bisson.net&gt; 

2001-08-11 07:56  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/: clients/win32/svn_com/SVN.cpp (1.8),
	libsvn_subr/libsvn_subr.dsp (1.9):

	Catch up the win32 build a little, still not quite there.  
	
		* libsvn_subr.dsp - change base64.c to svn_base64.c 
	
		* SVN.cpp - Add g_pool argument to apr_hash_first 

2001-08-10 21:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error_codes.h (1.14), libsvn_fs/fs.c
	(1.62), libsvn_repos/lock.c (1.2):

	* fs.c (create_hooks): Improved initial contents of template files,
	as promised Mike on phone.  
	
	* lock.c (svn_repos_open): Added some more code, still unfinished.  
	
	* svn_error_codes.h (SVN_ERR_REPOS_LOCKED): New error.  

2001-08-10 21:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/config.c (1.2):

	#include &lt;string.h&gt; for strlen.  

2001-08-10 20:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.61):

	* fs.c (create_locks): Better initial contents for the lockfile.  

2001-08-10 20:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.60):

	Fix wronglets noticed by Greg Stein: 
	
	* fs.c (create_locks): Don't call apr_psprintf unnecessarily.  
	Unrelatedly, clarify scoping.  
	(svn_fs_db_lockfile, svn_fs_start_commit_hook,
	svn_fs_pre_commit_hook, svn_fs_post_commit_hook,
	svn_fs_read_sentinel_hook, svn_fs_write_sentinel_hook): Use
	apr_pstrcat, not apr_psprintf.  

2001-08-10 17:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.103), include/svn_repos.h
	(1.24), libsvn_fs/fs.c (1.59), libsvn_fs/fs.h (1.31),
	libsvn_repos/README (1.3), libsvn_repos/lock.c (1.1),
	tests/clients/cmdline/commit_tests.py (1.12),
	tests/clients/cmdline/svntest/main.py (1.15):

	Set up lock area in repository.  And while we're at it, set up hook 
	area separate from conf area.  
	
	* fs.h (SVN_FS__REPOS_LOCK_DIR, SVN_FS__REPOS_HOOK_DIR, 
	SVN_FS__REPOS_DB_LOCKFILE): New #defines.  
	(svn_fs_t): New fields `hook_path' and `lock_path'.  
	
	* fs.c (create_hooks, create_locks): Replaces create_conf().  
	(svn_fs_create_berkeley): Use new func create_hooks() to create the 
	hooks directory, and just create the conf dir by hand.  Also create 
	new lock directory by hand, and the single db file in it.  
	(svn_fs_hook_dir, svn_fs_lock_dir, svn_fs_db_lockfile): New funcs.  
	(svn_fs_start_commit_hook, svn_fs_pre_commit_hook, 
	svn_fs_post_commit_hook, svn_fs_read_sentinel_hook, 
	svn_fs_write_sentinel_hook): Fix to use new hook dir path.  
	
	* svn_fs.h (svn_fs_hook_dir, svn_fs_lock_dir): Declare new funcs.  
	
	* main.py (greek_tree): Fix paths to repository hooks.  
	
	* commit_tests.py (test_list): Comment out `hook_test'.  It's
	failing now, need to find out why, but want to get the rest of this
	stuff committed first.  
	
	These changes are also part of the new locking and DB_RUN_RECOVERY 
	work, but they have no effect yet and nothing above depends on them: 
	
	* lock.c (unlock_repository, svn_repos_open): New file, new funcs.  
	
	* README: Mention above.  
	
	* svn_repos.h (svn_repos_open): Declare new func.  

2001-08-10 17:40   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/activity.c (1.10):

	The SVN_FS__ symbol wasn't publicly available. All of those will be
	moved to libsvn_repos stuff post-M3. For now, just use a hard-coded
	string.  
	
	(ACTIVITY_DB): use "dav/activities" for the path to the activity db 

2001-08-10 16:54   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/mod_dav_svn/activity.c (1.9):

	Put activity.db in the dav/ subdirectory of the repository.  

2001-08-10 16:18   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.63):

	(record_prop_change): escape the property value that gets sent to
	  the server. Since we embed the value in XML, we must escape it.  
	
	(get_baseline_url): new function to fetch the URL of the most recent 
	  baseline.  
	
	(svn_ra_dav__get_commit_editor): check out the baseline.  
	  near future: we will be attaching the log_msg to it via PROPPATCH 

2001-08-10 16:09   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/include/svn_config.h (1.2):

	Doc fixes.  

2001-08-10 16:09   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_subr/config.c (1.1):

	Skeleton implementation of the configuration module.  This code is
	still untested; all I'm sure of is that it builds on Unix.  

2001-08-10 16:06   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: fetch.c (1.65), props.c (1.11),
	ra_dav.h (1.35):

	Add svn_ra_dav__get_one_prop() function to simplify some prop
	fetching.  
	
	* ra_dav.h (svn_ra_dav__get_one_prop): new declaration 
	  (svn_ra_dav__vcc_prop, svn_ra_dav__checked_in_prop): new
	    declaration of some (constant) structures for fetching a property.  
	
	* props.c (svn_ra_dav__get_one_prop): new function 
	  (svn_ra_dav__vcc_prop, svn_ra_dav__checked_in_prop): new constants 
	
	* fetch.c (vcc_props): removed; obsolete by intro of
	  svn_ra_dav__vcc_prop 
	(fetch_props): no longer needed since we fetch all props 
	  (version_name_prop): added. used to fetch just the
	  DAV:version-name prop 
	(begin_checkout): use svn_ra_dav__get_one_prop to fetch the baseline
	    URL from the VCC.  
	  (svn_ra_dav__get_latest_revnum): simplify by using
	  svn_ra_dav__get_one_prop 

2001-08-10 16:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/session.c (1.34):

	Add missing ne_auth.h header.  

2001-08-10 15:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/clients/cmdline/: cl.h (1.16), main.c (1.15),
	status-cmd.c (1.6):

	Implement nonrecursive commandline switch ('-n').  Make 'svn st' use
	 it.  ### Todo:  make 'up' and other subcommands notice it too
	someday.  
	
	* cl.h (svn_cl__opt_state_t):  add 'nonrecursive' commandline
	switch.  
	
	* main.c (main):  same.  
	
	* status-cmd.c (svn_cl__status): notice nonrecursive switch.  

2001-08-10 14:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/cmdline/util.c (1.7):

	* util.c 
	
	  (svn_cl__args_to_target_array): Canonicalize all incoming paths.  

2001-08-10 14:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.36):

	Fix Apache CVS location.  

2001-08-10 14:44  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/fs-helpers.c (1.9):

	* fs-helpers.c 
	
	  (svn_test__stream_to_string): Added some comments.  

2001-08-10 13:55  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_subr/path.c (1.40),
	tests/libsvn_subr/path-test.c (1.6):

	Bug fixes (and a test) for svn_path_split().  
	
	* path-test.c 
	
	  (test_path_is_child): Trivial edit.  
	
	  (test_path_split): New test function for svn_path_split().  
	
	  (test_funcs): Added reference to new test test_path_split().  
	
	* path.c 
	
	  (svn_path_split): Bug fixes.  

2001-08-10 11:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/commit_tests.py (1.11):

	* commit_tests.py 
	
	  (hook_test): Write out /bin/sh scripts for doing the "echo"s now.  
	
	  (test_list): Re-enable the hook_test().  

2001-08-10 11:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/hooks.c (1.15):

	* hooks.c 
	
	  (run_cmd_with_output): New helper function.  
	
	  (run_start_commit_hook, run_pre_commit_hook, run_post_commit_hook): 
	  Use new helper run_cmd_with_output().  

2001-08-10 11:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.35):

	Note about unspoken conventions.  

2001-08-10 11:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.34):

	Note about author lines, for the future.  

2001-08-10 11:16  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.14):

	* main.c 
	
	  (print_diff_tree): Use svn_io_run_cmd() instead of system().  

2001-08-10 11:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/hooks.c (1.14):

	* hooks.c 
	
	  (run_start_commit_hook, run_pre_commit_hook, run_post_commit_hook): 
	  Oops.  Cut-n-paste-o(h, no!) 

2001-08-10 10:58  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.58):

	* fs.c 
	
	  (create_conf): Update the text that appears in the .tmpl files.  

2001-08-10 10:34  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/main.py (1.14):

	* main.py 
	
	  (get_start_commit_hook_path, get_pre_commit_hook_path, 
	  get_post_commit_hook_path): Oops!  Defined these to return the
	  right thing.  

2001-08-10 09:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/diff.c (1.5), include/svn_fs.h
	(1.102), include/svn_io.h (1.41), include/svn_wc.h (1.110),
	libsvn_fs/fs.c (1.57), libsvn_fs/fs.h (1.30), libsvn_repos/hooks.c
	(1.13), libsvn_subr/io.c (1.42), libsvn_wc/log.c (1.109),
	tests/clients/cmdline/commit_tests.py (1.10),
	tests/clients/cmdline/svntest/main.py (1.13):

	Hooks in Subversion are now called as programs with ordered 
	arguments.  More to come on this soon.  
	
	* subversion/include/svn_fs.h 
	
	  (svn_fs_start_commit_hook): Renamed from svn_fs_start_commit_conf().  
	  (svn_fs_pre_commit_hook): Renamed from svn_fs_pre_commit_conf().  
	  (svn_fs_post_commit_hook): Renamed from svn_fs_post_commit_conf().  
	  (svn_fs_read_sentinel_hook): Renamed from
	  svn_fs_read_sentinel_conf().  
	(svn_fs_write_sentinel_hook): Renamed from
	svn_fs_write_sentinel_conf().  
	
	* subversion/libsvn_fs/fs.h 
	
	  (SVN_FS__REPOS_HOOK_START_COMMIT, SVN_FS__REPOS_HOOK_PRE_COMMIT, 
	  SVN_FS__REPOS_HOOK_POST_COMMIT, SVN_FS__REPOS_HOOK_READ_SENTINEL, 
	  SVN_FS__REPOS_HOOK_WRITE_SENTINEL): Renamed and redefined to have
	  no extension.  These refer to actual scripts or programs now, not
	  just a plaintext config file.  Users modified.  
	
	  (SVN_FS__REPOS_HOOK_DESC_EXT): New #define.  
	
	* subversion/libsvn_fs/fs.c 
	
	  (svn_fs_start_commit_hook): Renamed from svn_fs_start_commit_conf().  
	  (svn_fs_pre_commit_hook): Renamed from svn_fs_pre_commit_conf().  
	  (svn_fs_post_commit_hook): Renamed from svn_fs_post_commit_conf().  
	  (svn_fs_read_sentinel_hook): Renamed from
	  svn_fs_read_sentinel_conf().  
	(svn_fs_write_sentinel_hook): Renamed from
	svn_fs_write_sentinel_conf().  
	
	  (create_conf): Write new .tmpl template files for hook scripts.  
	
	* subversion/include/svn_io.h 
	* subversion/include/svn_wc.h 
	* subversion/libsvn_wc/log.c 
	* subversion/libsvn_subr/io.c 
	* subversion/clients/cmdline/diff.c 
	
	  (svn_io_run_cmd): Moved from libsvn_wc (where it was called 
	  svn_wc_run_cmd_in_directory().  Also, PATH argument changed to a 
	  const char * instead of svn_stringbuf_t *.  Callers changed.  
	
	* subversion/libsvn_repos/hooks.c 
	
	  (run_start_commit_hook, run_pre_commit_hook, run_post_commit_hook): 
	  Renamed from *_hooks (), and changed to call the hook as a
	  program, not a parse-able list of programs.  Callers changed.  
	
	  (svn_repos_fs_commit_txn): Abort transaction if the pre-commit hook 
	  fails.  
	
	  (svn_repos_fs_begin_txn_for_commit): Call to run_post_commit_hook(s) 
	  updated.  
	
	  (read_char, eat_to_eol, expand, is_irrelevant_line, read_hook_line, 
	  run_hook_file): I know Karl worked hard on these...but they are
	  now obsolete.  Functions removed.  
	
	* commit_tests.py 
	
	  (test_list): Commented out hook_test call -- this test is completely 
	  bogus now.  
	
	* main.py 
	
	  (get_post_commit_hook_path, get_pre_commit_hook_path, 
	  get_start_commit_hook_path): Removed the ".txt" from the paths
	  these functions return.  

2001-08-10 02:50  XelaRellum

	* subversion/bindings/java/jni/org/tigris/subversion/lib/:
	Client.java (1.2), Entry.java (1.2), Reporter.java (1.2),
	Revision.java (1.2), Status.java (1.2), TextdeltaHandler.java
	(1.2), TextdeltaOp.java (1.2), TextdeltaWindow.java (1.2),
	TreeDeltaEditor.java (1.2), WorkingCopy.java (1.2):

	Removed @author and @version tags 

2001-08-09 20:38   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_xml.h (1.32), libsvn_subr/xml.c (1.42):

	Const-ify the input value to svn_xml_escape_string() 
	
	* svn_xml.h (svn_xml_escape_string): add const to STRING param 
	* xml.c (svn_xml_escape_string): add const to STRING param 

2001-08-09 18:42   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/include/svn_config.h (1.1):

	GOANNA DREAMING 
	
	This painting tells the dreamtime story of our ancestors hunting for
	goanna in the sand hills mear Mt Lebig.  
	
	We certify that this original artwork belongs to the artist and 
	accordingle the copyright to this piece of art belongs to the artist
	and may not be reproduced without the artist's permission 
	
	Paul Ah Chee -- Manager Pwerte Marnte Marnte Aboriginal Corporation 

2001-08-09 17:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: clients/cmdline/status.c (1.6),
	libsvn_client/status.c (1.21):

	Close issue #383.  'svn status' no longer errors out if network is
	missing.  
	
	* cmdline/status.c (svn_cl__print_status): print '?' instead of
	  'none' if revnum is invalid.  
	
	* libsvn_client/status.c (svn_client_status):  if any network errors 
	  occur, ignore them, and set repository revision to
	  SVN_INVALID_REVNUM.  

2001-08-09 17:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.7):

	Remove finished stuff, so the checklist only shows unfinished tasks.  

2001-08-09 17:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: commit_tests.py (1.9),
	svntest/actions.py (1.10):

	
	* commit_tests.py (commit_inclusive_dir, commit_top_dir):  finish 
	  anchor/target commit tests.  this closes issue #400.  

2001-08-09 16:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.6):

	(DB_RUN_RECOVERY): note exactly how in progress.  

2001-08-09 16:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.5):

	(DB_RUN_RECOVERY): in progress.  

2001-08-09 15:56  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/reps-strings.c (1.26), svnlook/main.c
	(1.13):

	* subversion/svnlook/main.c 
	
	  (print_diff_tree): Okay.  Done testing.  We can clean up those 
	  temporary files now. *blush* 
	
	* subversion/libsvn_fs/reps-strings.c 
	
	  (window_handler): Some little logic rearrangements (read: bug 
	  fixes).  

2001-08-09 14:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: README (1.9),
	svntest/actions.py (1.9), svntest/main.py (1.12):

	Adjust python test system to work over DAV.  (issue #423) Of course,
	this isn't *really* tested until we know that ra_dav is working
	again.  :-) 
	
	* main.py (run_tests):  new global 'DAV_mode' variable.  
	
	* actions.py (guarantee_greek_repository):  in DAV mode, use http:// 
	  url for doing initial import.  
	
	  (make_repo_and_wc):  in DAV mode, use http:// for checkout.  
	                       also append to .htaccess file.  
	
	* README:  keep python-test documentation up-to-date.  

2001-08-09 14:27   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/subversion-diagram.png (1.3):

	Updated the diagram at Ben's request to the latest and greatest
	general high-level not-too-detailed design of Subversion. :) 

2001-08-09 12:24  XelaRellum

	* subversion/bindings/java/jni/org/tigris/subversion/: .cvsignore
	(1.1), .dir_nonempty (1.2), SubversionException.java (1.1),
	lib/.cvsignore (1.1), lib/Client.java (1.1), lib/Entry.java (1.1),
	lib/Reporter.java (1.1), lib/Revision.java (1.1), lib/Status.java
	(1.1), lib/TextdeltaHandler.java (1.1), lib/TextdeltaOp.java (1.1),
	lib/TextdeltaWindow.java (1.1), lib/TreeDeltaEditor.java (1.1),
	lib/WorkingCopy.java (1.1):

	First checkin of the Java interface definitions and very basic
	classes.  Caution: right now these files are only interfaces and
	they are not at the right place in the directory yet.  

2001-08-09 12:19  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.25):

	* reps-strings.c 
	
	  (window_handler): Optimization.  Don't handle any more ops if we 
	  know their results won't fit into our output buffer.  

2001-08-09 12:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.24), build.conf (1.28), gen-make.py (1.21),
	doc/user/manual/dirversioning.texi (1.2):

	Get "make doc" to work: 
	
	* Makefile.in (.texi.info, .texi.dvi, .texi.txt, .texi.html): Fix 
	include paths.  
	(doc-info, doc-dvi, doc-txt, doc-html, doc-ps, doc-pdf): Build user 
	manual too.  
	
	* build.conf, gen-make.py: Revert my changes of yesterday, they were 
	unnecessary.  
	
	* dirversioning.texi (Directory Versioning): Fix menu format.  

2001-08-09 12:00  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.12):

	* subversion/svnlook/main.c 
	
	  (contents_to_tmp_file): Create tmp files based on the basenames of 
	  the originals, not the full paths.  
	
	  (print_diff_tree): Print "Added", "Deleted", or "Modified" instead 
	  of "Index" in the headers of file diffs for whom we know the 
	  relevant action.  

2001-08-09 12:00  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.24):

	* reps-strings.c 
	
	  (window_handler): Bug fix.  This function was never discarding 
	  data that was part of a necessary window and that appeared
	  *before* the requested range.  
	
	  (svn_fs__rep_contents): Fixed spelling in error string.  

2001-08-09 11:50  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.98):

	* fs-test.c 
	
	  (large_file_integrity): Oops.  We were never testing the head 
	  revision.  

2001-08-09 10:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/bindings/java/jni/: README (1.1),
	org/tigris/subversion/.dir_nonempty (1.1):

	Sandbox for JNI bindings.  Alexander Mueller 
	&lt;Alexander.Mueller@littleblue.de&gt; is working on these.  

2001-08-09 06:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: ra_dav.h (1.34), session.c (1.33):

	More tweaks for the user/pass stuff in ra_dav.  
	
	* ra_dav.h (svn_ra_session_t): add fields for the user and pass 
	
	* session.c (request_auth): new callback function for Neon to do 
	    authentication.  
	  (auth_authenticate): set up the Neon authentication callback 

2001-08-09 06:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.35), repos.c (1.55),
	update.c (1.7):

	Add username field to dav_svn_repos so that we can have a user
	throughout the FS operations.  
	
	* dav_svn.h (dav_svn_repos): add username field 
	
	* repos.c (dav_svn_get_resource): remember the username 
	
	* update.c (dav_svn__update_report): use the stored username for
	    running the report.  

2001-08-09 05:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/merge.c (1.15):

	Add missing parameter to svn_repos_dir_delta(). Currently a NULL (no 
	specific entry; diff the whole dir), but it probably should be
	something else...  

2001-08-09 05:57   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/version.c (1.31):

	Add svn_repos.h to pick up a prototype.  

2001-08-09 03:18   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/clients/cmdline/cl.h (1.15):

	tweak the path to svn-dev.el 

2001-08-08 19:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.65), libsvn_client/auth.c (1.6),
	libsvn_ra_dav/session.c (1.32), libsvn_ra_local/ra_plugin.c (1.42):

	Revamp the authenticator stuff. Enable the use of constant
	structures so that it is easier to return vtables. Splitting the
	baton out helps with this.  
	
	* svn_ra.h (svn_ra_username_authenticator_t, 
	    svn_ra_simple_password_authenticator_t): remove the pbaton
	    field.  add "const" to the username/password fields.  
	  (svn_ra_plugin_t): get_authenticator now returns a baton. the 
	    authenticator is now "const" 
	
	* libsvn_ra_local/ra_plugin.c (get_authenticator, set_username):
	    update for above changes 
	
	* libsvn_ra_dav/session.c (svn_ra_get_authenticator,
	    auth_set_username, auth_set_password, auth_authenticate): implement
	new functions.  
	
	* libsvn_client/auth.c (authorize_username,
	    authorize_simple_password): update for above changes -- take a baton
	    field and constify the authenticator.  
	  (svn_client_authenticator): get an auth_baton from the
	    get_authenticator.  constify the authenticator.  

2001-08-08 17:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.95):

	I'd rather be rich than stupid.  

2001-08-08 17:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.94):

	Clean up my stack, note remaining M3 items.  

2001-08-08 17:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* build.conf (1.27), gen-make.py (1.20):

	Try to get "make doc" working in the new build system, but not done 
	yet.  Hints from Greg Stein most welcome, naturally.  
	
	* gen-make.py (main): Start handling .texi files where the objects 
	list is built.  But not working yet.  
	(Target): Start handling `doc' type.  But not working yet.  
	
	* build.conf (svn-design, user-manual, svnlook-manual): New
	sections, for docs.  

2001-08-08 17:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/svnadmin/main.c (1.22):

	Make svnadmin print log messages attached to revisions and 
	transactions.  

2001-08-08 16:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_path.h (1.40), include/svn_wc.h (1.109),
	libsvn_wc/adm_files.c (1.85), libsvn_wc/adm_ops.c (1.82),
	libsvn_wc/wc.h (1.160):

	Write authentication data into the SVN/ area atomically.  
	
	* wc.h, adm_files.c (svn_wc__open_auth_file,
	  svn_wc__close_auth_file): new interface, consistent with existing
	'atomic' write interfaces.  
	
	* adm_ops.c (svn_wc_set_auth_file): use the new interface.  
	
	* svn_wc.h (svn_wc_get_auth_file, svn_wc_set_auth_file):
	  documentation clarification.  
	
	* svn_path.h (svn_path_add_component):  same.  
	
	* adm_files.c (v_extend_with_adm_name): same.  

2001-08-08 15:48  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.11):

	* main.c 
	
	  Include apr_thread_proc.h and svn_private_config.h.  
	
	  (do_diff): Get base root to pass along.  
	
	  (contents_to_tmp_file): New helper function.  
	
	  (print_diff_tree): Began putting real guts in this function.  
	  Calling discipline modified.  
	
	  (do_diff): Call to print_diff_tree() obeys new calling discipline.  

2001-08-08 15:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.23), configure.in (1.103),
	subversion/libsvn_subr/base64.c (1.21),
	subversion/libsvn_subr/svn_base64.c (1.1),
	ac-helpers/berkeley-db.m4 (1.10):

	Patch from Mo DeJong &lt;mdejong@cygnus.com&gt; to build Berkeley DB in
	the subversion source tree if it is present as top-level subdir
	`db'.  My memory is that there was consensus on this being a good
	thing, but that no one got around to applying it.  See Mo's original
	mail to dev: 
	
	   
	
	
	http://subversion.tigris.org/servlets/ReadMsg?msgId=28881&listName=dev
	
	See also my mail with the subject line 
	
	   Subject: applied Mo DeJong's built-in DB patch 
	
	for some discussion related to this commit.  
	
	
	* Makefile.in (EXTERNAL_PROJECT_DIRS): list optional @DB_SUBDIR@.  
	
	* configure.in: Configure DB_SUBDIR.  
	
	* ac-helpers/berkeley-db.m4: Look for db in the subversion source 
	tree.  
	
	Associated change, but not part of Mo's patch: 
	
	* subversion/libsvn_subr/svn_base64.c: New name for base64.c, to
	avoid linker conflict with neon's base64.c.  

2001-08-08 13:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/actions.py (1.8):

	Python tests:  Check for errors from initial 'svn import'.  

2001-08-08 13:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/: commit.c (1.58), import.c (1.5):

	
	* import.c:  delete this old crufty file.  
	
	* commit.c (send_to_repos):  duh, don't call the auth storage
	  callback when finished with an import! 

2001-08-08 13:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.84), lock.c (1.25), log.c
	(1.108), wc.h (1.159):

	When creating SVN/auth/ and SVN/tmp/auth/, set perms to 700.  
	
	* adm_files.c, wc.h (svn_wc__make_adm_thing):  add PERMS argument.  
	
	 (init_adm, init_adm_temp_area):  change calls to above as
	 appropriate.  
	
	* lock.c (svn_wc__lock):  change call.  
	
	* log.c (log_do_committed): change call.  

2001-08-08 12:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.57):

	Fix bug #421.  
	
	* questions.c (svn_wc_props_modified_p):  if property file exists
	  and prop-base doesn't, this does NOT mean that local mods have 
	  happened.  The property file might be empty... check for this.  

2001-08-08 11:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/auth.c (1.5):

	Little bugfix on authentication storage.  
	
	* auth.c (store_auth_info):  don't call svn_wc_set_auth_file() on a 
	  path unless it's a directory.  
	  (authorize_username):  tolerate any failure of
	  svn_wc_get_auth_file().  
	(authorize_simple_password): same.  

2001-08-07 17:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.22):

	(dist): New rule, still in progress.  Do not try to make a dist with 
	this; there's a whole release procedure doc still to be written.  

2001-08-07 17:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.4):

	Remove some obsolete verbiage.  

2001-08-07 16:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* build.conf (1.26),
	subversion/tests/clients/cmdline/svnadmin_tests.py (1.1),
	notes/dav_setup.txt (1.11), notes/m3-checklist.txt (1.3),
	subversion/tests/clients/cmdline/svntest/main.py (1.11):

	New python tests for 'svnadmin'.  
	
	* svnadmin_tests.py:  four new tests.  
	
	* main.py (run_svnadmin):  return stdout, stderr.  
	
	* build.conf:  add svnadmin tests to 'make check' rule.  
	
	* m3-checklist.txt:  tweaking.  

2001-08-07 16:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_repos/repos-test.c (1.12):

	(verify_hooks): Removed; hooks are tested in the python suite now.  
	(test_funcs): Adjust for above.  

2001-08-07 15:35  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.10):

	* main.c 
	
	  (do_diff): Put some cheesy skeleton code in place.  Woohoo.  

2001-08-07 13:19  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.9):

	* subversion/svnlook/main.c 
	
	  (do_date): Stop using 'time' as a variable name.  FreeBSD doesn't 
	  really like that.  

2001-08-07 10:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_repos.h (1.23),
	libsvn_ra_local/ra_plugin.c (1.41), libsvn_repos/hooks.c (1.12),
	libsvn_repos/reporter.c (1.15):

	New repos wrapper for creating temporary 'update' transactions.  
	
	[ Note to gstein: this is the third wrapper that mod_dav_svn should
	be using (see the bottom of svn_repos.h for all three.)  However, if 
	mod_dav_svn is already using the 'reporter' within libsvn_repos,
	then you don't need to do a thing here -- the reporter has been
	upgraded. ] 
	
	* hooks.c (svn_repos_fs_begin_txn_for_update): new wrapper, stores 
	  username property on transaction.  This is a Good Thing, since 
	  updates often take longer, and are more likely to be orphaned from
	  a dropped connection.  A sysadmin 'svnadmin rmtxn' will want to
	  know the txn's creator when cleaning it up.  
	
	* reporter.c, svn_repos.h (svn_repos_begin_report): add username
	  arg.  
	(svn_repos_report_baton_t): add username field.  
	  (svn_repos_set_path):  call new wrapper when creating update txn.  
	
	* ra_plugin.c (do_update): pass session_baton-&gt;username into
	reporter.  

2001-08-07 10:43  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.8):

	* subversion/svnlook/main.c 
	
	  (print_changed_tree): Only print the node if it has text or property 
	  modifications.  Docstring edit.  
	
	  (print_tree): Docstring edit.  

2001-08-07 09:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.81), entries.c (1.116):

	* entries.c 
	
	  (svn_wc__entries_write): If there is no "this dir" entry in our 
	  entries hash, assume this directory is no longer under revision 
	  control, and simply destroy the administrative area.  
	
	* adm_ops.c 
	
	  (mark_tree): Pay attention to the order in which state changes need 
	  to happen during recursion.  

2001-08-07 09:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: clients/cmdline/checkout-cmd.c (1.7),
	clients/cmdline/cl.h (1.14), clients/cmdline/commit-cmd.c (1.9),
	clients/cmdline/import-cmd.c (1.8), clients/cmdline/main.c (1.14),
	clients/cmdline/prompt.c (1.3), clients/cmdline/status-cmd.c (1.5),
	clients/cmdline/update-cmd.c (1.7), include/svn_client.h (1.45),
	libsvn_client/auth.c (1.4), libsvn_client/checkout.c (1.23),
	libsvn_client/commit.c (1.57), libsvn_client/status.c (1.20),
	libsvn_client/update.c (1.25), libsvn_wc/adm_ops.c (1.80):

	Expand authentication design: allow top-level applications to 
	(optionally) provide authentication data to libsvn_client.  (e.g.
	via command-line arguments.) 
	
	* svn_client.h (svn_client_auth_t): new class^H^H^H^H^H struct to
	  hold authentication data and callback methods.  :-) 
	
	  (svn_client_authenticate): new prototype, greatly simplified by 
	  using svn_client_auth_t.  
	
	* auth.c (authorize_username, authorize_simple_password): rewrite to 
	  use new struct.  
	
	* checkout.c (svn_client_checkout):  tweak to use new struct.  
	
	* update.c (svn_client_update): same.  
	
	* commit.c (send_to_repos):  same.  
	
	* status.c (svn_client_status): same.  
	
	* cl.h (enum svn_cl__longopt_t, svn_cl_opt_state_t):  create 
	  username/password fields for commandline args.  
	
	* main.c (main):  add auth args to options[], and to switch
	statement.  
	
	* prompt.c, cl.h (svn_cl__make_auth_obj): new helper routine.  
	
	* checkout-cmd.c (svn_cl__checkout):  call the helper.  
	
	* update-cmd.c (svn_cl__update): same.  
	
	* import-cmd.c (svn_cl__import): same.  
	
	* commit-cmd.c (svn_cl__commit): same.  
	
	* status-cmd.c (svn_cl__status): same.  
	
	* adm_ops.c (svn_wc_set_auth_file):  bugfixes.  

2001-08-07 09:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/README (1.62):

	Document 'auth/' subdirectory.  

2001-08-06 16:53  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.25), subversion/tests/clients/cmdline/prop_tests.py
	(1.3):

	* build.conf 
	
	  (paths): Added prop_tests.py to the test framework.  
	
	* subversion/tests/clients/cmdline/prop_tests.py 
	
	  (update_props): Bug fixes for this test (hey, who tests the tests?) 

2001-08-06 16:13  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/: editors.c (1.3), main.c (1.7), svnlook.h
	(1.3):

	Yep, still more work on the svnlook program.  She now works with 
	transactions.  
	
	* main.c 
	
	  (INT_ERR): Actually return on error.  
	
	  (generate_delta_tree): New function.  
	
	  (do_tree, print_tree): Added SHOW_IDS boolean parameter (and use
	  it).  
	
	  (do_default): Call do_tree() with id display disabled.  
	
	  (print_changed_tree): Make output look like 'svn update'.  
	
	  (do_dirs_changed, do_changed, do_tree): Now use
	  generate_delta_tree().  
	
	  (svnlook_cmd_t): Add svnlook_cmd_ids for new "ids" subcommand.  
	
	  (usage): Add "ids" to usage display.  
	
	  (main): Parse and understand new "ids" subcommand.  Call do_tree() 
	  with id display enabled.  
	
	* svnlook.h 
	
	  (repos_node_t): Added node id field ID.  
	
	  (svnlook_txn_changes_editor): Removed.  
	
	  (svnlook_tree_delta_editor): Renamed from
	  svnlook_rev_changes_editor().  
	
	* editors.c 
	
	  (struct window_handler_baton): New structure.  
	
	  (window_handler): Check for non-NULL windows before claiming text 
	  mods.  
	
	  (apply_textdelta): Actually use the window handler baton.  
	
	  (svnlook_txn_changes_editor): Removed.  
	
	  (svnlook_tree_delta_editor): Renamed from
	  svnlook_rev_changes_editor().  

2001-08-06 15:55  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_fs.h (1.101), libsvn_fs/dag.c (1.122),
	libsvn_fs/tree.c (1.93), libsvn_repos/delta.c (1.53):

	Some changes to the props and contents diff-detection functions.  
	
	* include/svn_fs.h 
	
	  (svn_fs_contents_changed, svn_fs_props_changed): Make these 
	  functions take one path for each root.  
	
	* libsvn_fs/tree.c 
	
	  (svn_fs_contents_changed, svn_fs_props_changed, ): Make these 
	  functions take one path for each root.  
	
	  (struct things_changed_args): Removed PATH, Added PATH1 and PATH2.  
	
	  (txn_body_contents_changed, txn_body_props_changed): Use two 
	  different paths under their respective roots for the comparison.  
	
	* libsvn_fs/dag.c 
	
	  (svn_fs__things_different): Implemented this function.  
	
	* libsvn_repos/delta.c 
	
	  (delta_proplists): Use svn_fs_props_changed() to optimize the search 
	  for property differences.  
	
	  (delta_files): Use svn_fs_contents_changed() to avoid sending text 
	  delta windows when there are no textual diffs.  

2001-08-06 15:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/skel.c (1.35):

	(svn_fs__skels_are_equal): Check for the trivial case first.  

2001-08-06 14:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/svnadmin/main.c (1.21):

	svnadmin:  bikeshed touchup.  

2001-08-06 13:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.100):

	Get rid of tmp comment.  

2001-08-06 13:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.99), libsvn_fs/dag.c (1.121),
	libsvn_fs/dag.h (1.50), libsvn_fs/tree.c (1.92):

	* svn_fs.h (svn_fs_props_changed, svn_fs_contents_changed): New 
	declarations.  
	
	* tree.c (svn_fs_props_changed, svn_fs_contents_changed, 
	props_changed_args, contents_changed_args, txn_body_props_changed, 
	txn_body_contents_changed): New funcs.  
	
	* dag.h, dag.c (svn_fs__things_different): New func, still skeletal.  

2001-08-06 12:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_repos/md5args.c (1.3):

	#include &lt;string.h&gt;.  

2001-08-06 12:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/svnadmin/main.c (1.20):

	New svnadmin subcommands:  'rmtxn', 'createtxn'.  Finally, this tool 
	is no longer read-only.  :-) 

2001-08-06 12:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha-checklist.txt (1.8):

	Notes about svnadmin features 

2001-08-03 16:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.44), include/svn_wc.h
	(1.108), libsvn_client/auth.c (1.3), libsvn_client/checkout.c
	(1.22), libsvn_client/commit.c (1.56), libsvn_client/status.c
	(1.19), libsvn_client/update.c (1.24), libsvn_wc/adm_files.c
	(1.83), libsvn_wc/adm_ops.c (1.79), libsvn_wc/wc.h (1.158):

	New libsvn_client feature: ability to store authentication data in 
	working copy, after prompting for it the first time.  This code path 
	has not yet been tested, but will be on Monday.  
	
	* svn_client.h (svn_client_authenticate):  now (possibly) returns a 
	  callback that allows authenticator-driver to store info in working 
	  copy.  
	
	  (svn_client_auth_storage_callback_t):  new function type.  
	
	* auth.c (authorize_username): take same args as other authenticator 
	  driver, for consisitency.  Return NULL for storage callback.  
	
	  (authorize_simple_password):  complexification.  
	
	  (store_auth_info):  new helper and baton.  
	
	* svn_wc.h, adm_ops.c (svn_wc_get_auth_file, svn_wc_set_auth_file): 
	  declare and implement new API.  
	
	* adm_files.c (init_adm, init_adm_tmp_area):  create ADM_AUTH_DIR in
	SVN/.  
	
	* checkout.c (svn_client_checkout): call storage_callback if
	non-NULL.  
	
	* update.c (svn_client_update): same.  
	
	* commit.c (send_to_repos): same.  
	
	* status.c (svn_client_status): same.  

2001-08-03 16:06  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.6):

	More work toward getting svnlook working with transactions.  
	
	* subversion/svnlook/main.c 
	
	  (svnlook_ctxt_t): Store the TXN_NAME now.  
	
	  (do_dirs_changed, do_changed): Now works for transactions, too.  
	
	  (do_tree): Little bug fix.  
	
	  (main): Bug fixes.  

2001-08-03 15:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/m3-checklist.txt (1.2):

	Don't be in outline mode.  

2001-08-03 15:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: alpha-checklist.txt (1.7), m3-checklist.txt (1.1):

	Moved M3 stuff to its own file for the home stretch, leave alpha
	stuff in alpha-checklist.txt.  

2001-08-03 01:27  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_fs.h (1.98), libsvn_fs/dag.c (1.120),
	libsvn_fs/dag.h (1.49), libsvn_fs/txn.c (1.46),
	tests/libsvn_fs/fs-test.c (1.97):

	Reveal a way for folks to figure out what revision (if any) a 
	transaction was based upon.  This is very useful for
	svn_fs_dir_delta() as used in svnlook.  
	
	* subversion/include/svn_fs.h 
	
	  (svn_fs_txn_base_revision): New function.  
	
	* subversion/libsvn_fs/txn.c 
	
	  (struct svn_fs_txn_t): Added BASE_REV field.  
	
	  (svn_fs_txn_base_revision): New function.  
	
	  (make_txn): Added BASE_REV argument for populated svn_txn_t
	  structure.  
	
	* subversion/libsvn_fs/dag.h 
	* subversion/libsvn_fs/dag.c 
	
	  (svn_fs__dag_get_revision): New function.  
	
	* subversion/libsvn_fs/fs-test.c 
	
	  (check_root_revision): New test function.  
	
	  (test_funcs): Reference new test function.  

2001-08-02 09:35  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/props.c (1.6), include/svn_hash.h
	(1.18), libsvn_client/status.c (1.18), libsvn_fs/tree.c (1.91),
	libsvn_ra/ra_loader.c (1.11), libsvn_ra_dav/fetch.c (1.64),
	libsvn_ra_dav/merge.c (1.14), libsvn_ra_local/checkout.c (1.13),
	libsvn_repos/delta.c (1.52), libsvn_subr/hashdump.c (1.26),
	libsvn_subr/sorts.c (1.4), libsvn_subr/svn_error.c (1.74),
	libsvn_subr/xml.c (1.41), libsvn_wc/adm_crawler.c (1.122),
	libsvn_wc/adm_ops.c (1.78), libsvn_wc/entries.c (1.115),
	libsvn_wc/log.c (1.107), libsvn_wc/props.c (1.35),
	libsvn_wc/status.c (1.39), mod_dav_svn/deadprops.c (1.14),
	mod_dav_svn/repos.c (1.54), svnadmin/main.c (1.19),
	tests/fs-helpers.c (1.8), tests/libsvn_subr/hashdump-test.c (1.23):

	Catching up with APR API changes.  apr_hash_first() now takes an 
	apr_pool_t * argument, and apr_pool_sub_make() is now populates a
	pool pointer (instead of just returning it).  The following files
	where changed.  
	
	* subversion/clients/cmdline/props.c 
	* subversion/libsvn_client/status.c 
	* subversion/libsvn_fs/tree.c 
	* subversion/libsvn_ra/ra_loader.c 
	* subversion/libsvn_ra_dav/fetch.c 
	* subversion/libsvn_ra_dav/merge.c 
	* subversion/libsvn_ra_local/checkout.c 
	* subversion/libsvn_repos/delta.c 
	* subversion/libsvn_subr/hashdump.c 
	* subversion/libsvn_subr/sorts.c 
	* subversion/libsvn_subr/svn_error.c 
	* subversion/libsvn_subr/xml.c 
	* subversion/libsvn_wc/adm_crawler.c 
	* subversion/libsvn_wc/adm_ops.c 
	* subversion/libsvn_wc/entries.c 
	* subversion/libsvn_wc/log.c 
	* subversion/libsvn_wc/props.c 
	* subversion/libsvn_wc/status.c 
	* subversion/mod_dav_svn/deadprops.c 
	* subversion/mod_dav_svn/repos.c 
	* subversion/svnadmin/main.c 
	* subversion/tests/fs-helpers.c 
	* subversion/tests/libsvn_subr/hashdump-test.c 
	
	  These contains calls to apr_hash_first() or apr_pool_sub_make().  
	
	* subversion/include/svn_hash.h 
	* subversion/libsvn_subr/hashdump.c 
	
	  (svn_hash_write): Added POOL argument (to pass to apr_hash_first).  

2001-08-01 16:54   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha-checklist.txt (1.6):

	tweaking checklist some more.  

2001-08-01 15:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha-checklist.txt (1.5):

	tweaking checklist.  

2001-08-01 15:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion.dsw (1.16),
	subversion/clients/cmdline/subversion_client.dsp (1.5),
	subversion/include/svn_error.h (1.110),
	subversion/libsvn_client/libsvn_client.dsp (1.11),
	subversion/libsvn_subr/svn_error.c (1.73):

	Keeping this here Winderz build up-to-date.  
	
	* subversion.dsw 
	
	  (__build__): Added 'svnlook' dependency.  
	
	* subversion/clients/cmdline/subversion_client.dsp 
	
	  (prompt.c): Added to Source Files.  
	
	* subversion/include/svn_error.h 
	* subversion/libsvn_subr/svn_error.c 
	
	  (svn_error_compose): Rename NEW args to NEW_ERR to prevent MSVC++ 
	  from fussing about the use of "new" as a symbol.  
	
	Index: subversion/libsvn_client/libsvn_client.dsp 
	
	  (auth.c): Added to Source Files.  

2001-08-01 14:35  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/: commit_tests.py (1.8),
	svntest/actions.py (1.7), svntest/main.py (1.10):

	* subversion/tests/clients/cmdline/commit_tests.py 
	
	  (hook_test): New test.  
	
	  (test_list): Reference new test.  
	
	* subversion/tests/clients/cmdline/svntest/actions.py 
	
	  (guarantee_greek_repository): Bug fix.  
	
	* subversion/tests/clients/cmdline/svntest/main.py 
	
	  (svnlook_binary): New global variable for location of svnlook 
	  binary.  
	
	  (get_start_commit_hook_path, get_pre_commit_hook_path, 
	  get_post_commit_hook_path): New functions.  

2001-08-01 14:34  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/cmdline/: checkout-cmd.c (1.6), cl.h (1.13),
	commit-cmd.c (1.8), import-cmd.c (1.7), main.c (1.13),
	propdel-cmd.c (1.2), propset-cmd.c (1.5), util.c (1.6):

	Added a 'quiet' option to the command-line client.  This may morph 
	into something with better granularity in the future.  
	
	* subversion/clients/cmdline/cl.h 
	
	  Added "quiet" option.  
	
	* subversion/clients/cmdline/checkout-cmd.c 
	
	  (svn_cl__checkout): Only use the trace editor when not asked to be 
	  quiet.  
	
	* subversion/clients/cmdline/commit-cmd.c 
	
	  (svn_cl__commit): Only use the trace editor when not asked to be 
	  quiet.  
	
	* subversion/clients/cmdline/import-cmd.c 
	
	  (svn_cl__import): Only use the trace editor when not asked to be 
	  quiet.  
	
	* subversion/clients/cmdline/main.c 
	
	  (main): Added "quiet" option to option list.  Also, parse 
	  command-line options for 'q' (which sets the quiet option) 
	
	* subversion/clients/cmdline/propdel-cmd.c 
	
	  (svn_cl__propdel) 
	
	* subversion/clients/cmdline/propset-cmd.c 
	
	  (svn_cl__propset) 
	
	* subversion/clients/cmdline/util.c 
	
	  Trivial formatting changes.  

2001-08-01 14:33  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_repos/md5args.c (1.2):

	* subversion/tests/libsvn_repos/md5args.c 
	
	  (main): Information errors...this applet is sure to die soon.  

2001-08-01 14:33  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/main.c (1.5):

	* subversion/svnlook/main.c 
	
	  Added '### todo' docstring.  

2001-08-01 13:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: clients/cmdline/cl.h (1.12),
	clients/cmdline/prompt.c (1.2), include/svn_client.h (1.43),
	libsvn_client/auth.c (1.2), libsvn_ra_dav/session.c (1.31),
	libsvn_wc/wc.h (1.157):

	Start working on username/password authentication module.  
	
	* wc.h (SVN_WC__ADM_AUTH_DIR): new subdirectory of SVN/.  
	  (SVN_WC__ADM_AUTH_USERNAME): name of file to store username.  
	  (SVN_WC__ADM_AUTH_PASSWORD): name of file to store password.  
	
	* prompt.c, cl.h (svn_cl__prompt_user): try using apr_password_get() 
	  if HIDE flag is set.  it might work.  also use const char *prompt, 
	  and make tweaks to ensure the HIDE flag works.  
	
	* svn_client.h (svn_client_auth_info_callback_t): use const char *.  
	
	* auth.c (authorize_simple_password): implement simple draft.  
	  (authorize_username):  take callback arg for consistency.  

2001-08-01 11:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: clients/cmdline/checkout-cmd.c (1.5),
	clients/cmdline/cl.h (1.11), clients/cmdline/commit-cmd.c (1.7),
	clients/cmdline/import-cmd.c (1.6), clients/cmdline/prompt.c (1.1),
	clients/cmdline/status-cmd.c (1.4), clients/cmdline/update-cmd.c
	(1.6), include/svn_client.h (1.42), include/svn_error_codes.h
	(1.13), include/svn_ra.h (1.64), libsvn_client/auth.c (1.1),
	libsvn_client/checkout.c (1.21), libsvn_client/commit.c (1.55),
	libsvn_client/status.c (1.17), libsvn_client/update.c (1.23),
	libsvn_ra_dav/commit.c (1.62), libsvn_ra_dav/props.c (1.10),
	libsvn_ra_dav/ra_dav.h (1.33), libsvn_ra_dav/session.c (1.30),
	libsvn_ra_dav/util.c (1.7), libsvn_ra_local/ra_local.h (1.17),
	libsvn_ra_local/ra_plugin.c (1.40), libsvn_subr/target.c (1.12),
	svnadmin/main.c (1.18):

	Big changes: new authentication architecture based on the PAM model.  
	RA_local now uses "username only" authentication, and now usernames 
	are passed all the way through to transactions and revisions. 
	RA_dav compiles, but is (temporarily) non-functional until we
	upgrade it to use either "username only" and/or "username/password"
	authentication.  
	
	The next step on the agenda is to allow storage of usernames & 
	passwords in the working copy.  
	
	* svn_ra.h 
	
	  (svn_ra_simple_password_authenticator): "authenticator" vtable
	  object.  
	
	  (svn_ra_username_authenticator):  another "authenticator" object.  
	
	  (svn_ra_plugin_t):  remove open().  
	                      new replacement method: get_authenticator().  
	                      new 'auth_methods' flag.  
	
	* auth.c:  new file and routines, the implementation of...  
	
	* svn_client.h (svn_client_authenticate):  new master interface.  
	
	  (svn_client_auth_info_callback_t):  new function type, added as a 
	  new argument to all svn_client.h interfaces that use repositories.  
	
	* svn_error_codes.h (SVN_ERR_RA_NOT_AUTHORIZED):  renamed, added RA
	  part.  
	(SVN_ERR_RA_UNKNOWN_AUTH):  new error val.  
	
	* libsvn_ra_dav/props.c (svn_ra_dav__get_props): rename to 
	  SVN_ERR_RA_NOT_AUTHORIZED.  
	  (process_results): comment out pc variable to remove warning.  
	
	* libsvn_ra_dav/util.c (svn_ra_dav__parsed_request): rename to 
	  SVN_ERR_RA_NOT_AUTHORIZED.  
	
	* libsvn_ra_dav/session.c (svn_ra_get_authenticator): dummy func.  
	  (svn_ra_open): now deprecated and unused.  needs to be rewritten
	  as dummy func above.  
	
	* libsvn_ra_dav/commit.c, ra_dav.h (svn_ra_dav__get_commit_editor): 
	  remove the bogus user argument.  It should already be living in
	  'cc' after authentication finishes.  
	
	* libsvn_ra_local/ra_plugin.c (get_authenticator):  implement.  
	  (authenticate):  essentially renamed & hacked from open().  
	  (set_username):  implement.  
	  (close):  don't free whole pool, since we're no longer subpooling.  
	  (get_commit_editor):  send session_baton-&gt;username to
	  libsvn_repos! 
	
	* libsvn_ra_local/ra_local.h (svn_ra_local__session_baton_t): add 
	  username field.  
	
	* commit.c (send_to_repos): replace ra-&gt;open() call with 
	  svn_client_authenticate() call.  
	
	* status.c (svn_client_status): same.  
	
	* update.c (svn_client_update): same.  
	
	* checkout.c (svn_client_checkout): same.  
	
	* prompt.c (svn_cl__prompt_user):  new file and callback routine.  
	
	* cl.h (svn_cl__prompt_user): declare.  
	
	* checkout-cmd.c (svn_cl__checkout):  send callback to
	svn_client_*() call.  
	
	* commit-cmd.c (svn_cl__commit): same.  
	
	* import-cmd.c (svn_cl__import): same.  
	
	* update-cmd.c (svn_cl__update): same.  
	
	* status-cmd.c (svn_cl__status): same.  
	
	* target.c (svn_path_get_absolute): rename to
	SVN_ERR_RA_NOT_AUTHORIZED.  
	
	* svnadmin/main.c (main):  make svnadmin print authors.  

2001-08-01 10:10  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* notes/alpha-checklist.txt (1.4):

	* alpha-checklist.txt 
	
	  cvs2svn is now a 1.0 requirement, not M3.  

2001-07-31 16:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_repos/hooks.c (1.11),
	tests/libsvn_repos/repos-test.c (1.11):

	Hook system now passes all hand-tests.  
	
	The automated test (see tests/libsvn_repos/repos-test.c) is
	commented out because it still doesn't pass.  I think it's something
	to do with the test itself, or maybe with the fact that "$user"
	isn't usefully expanded yet because the auth system is still being
	worked on.  
	
	* hooks.c: include ctype.h, for character class tests.  
	(read_char, eat_to_eol, expand, is_irrelevant_line): New funcs.  
	(read_hook_line): Rewrite, using above new funcs.  

2001-07-31 12:28  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.24), subversion/tests/libsvn_repos/.cvsignore
	(1.3), subversion/tests/libsvn_repos/md5args.c (1.1),
	subversion/tests/libsvn_repos/repos-test.c (1.10):

	* build.conf 
	
	  (md5args): New binary for repos hook testing.  
	
	* subversion/tests/libsvn_repos/md5argcs.c 
	
	  New file (for new binary, md5args).  
	
	* subversion/tests/libsvn_repos/.cvsignore 
	
	  Ignore new binary md5args.  
	
	* subversion/tests/libsvn_repos/repos-test.c 
	
	  (verify_hooks): New function.  
	
	  (test_funcs): References new test function, verify_hooks() -- 
	  currently #ifdef'd out because the test fails.  

2001-07-31 11:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.97):

	(svn_fs_repository): Doc fix.  

2001-07-31 09:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.46):

	Fix APR cvs checkout instructions.  Thanks to Frank Finger for the 
	patch; this finally fixes issue #415.  

2001-07-30 22:51  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/svnlook.dsp (1.1):

	* svnlook.dsp 
	
	  Did I forget to 'cvs add' this new file earlier? 

2001-07-30 19:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/hooks.c (1.10):

	(read_hook_line): Note improvements to make tomorrow morning, when 
	have Mike's test suite to lean on.  

2001-07-30 19:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.109), libsvn_repos/hooks.c
	(1.9), libsvn_subr/svn_error.c (1.72):

	* svn_error.h, svn_error.c (svn_error_compose): New func.  
	
	* hooks.c (read_hook_line, run_hook_file): Make these work.  

2001-07-30 16:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.96), libsvn_fs/fs.c (1.56),
	libsvn_fs/fs.h (1.29), libsvn_repos/hooks.c (1.8):

	More hook driver coding: 
	
	* svn_fs.h (svn_fs_repository): Declare new func.  
	
	* fs.h (svn_fs_t): New `path' field.  
	
	* fs.c (svn_fs_create_berkeley): Initialize path.  
	(svn_fs_repository): New func.  
	(svn_fs_open_berkeley): Initialize all paths.  
	
	* hooks.c (read_hook_line): Filled in.  
	(run_hook_file): Filling in.  

2001-07-30 15:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.95), include/svn_repos.h (1.22),
	libsvn_fs/fs.c (1.55), libsvn_fs/fs.h (1.28), libsvn_repos/hooks.c
	(1.7):

	Started writing hook driver code, with Mike Pilato: 
	
	* svn_fs.h (svn_fs_begin_txn): Doc fix.  
	(svn_fs_start_commit_conf): Declare.  
	
	* svn_repos.h (svn_repos_fs_begin_txn_for_commit): Doc fix.  
	
	* hooks.c (read_hook_line, run_hook_file): New funcs, skeletal.  
	(run_start_commit_hooks): New func.  
	(svn_repos_fs_begin_txn_for_commit): Use it.  
	(run_pre_commit_hooks, run_post_commit_hooks): Implement.  
	
	* fs.c (create_conf): Create a start-commit-hooks.txt file again,
	now that we have the svn_repos_fs_begin_txn_for_commit() wrapper. 
	This is essentially a reversion of the 1.53 change, plus some more
	code.  
	(svn_fs_start_commit_conf): New func.  
	
	* fs.h (SVN_FS__REPOS_CONF_PRE_COMMIT_HOOKS, 
	SVN_FS__REPOS_CONF_POST_COMMIT_HOOKS, 
	SVN_FS__REPOS_CONF_READ_SENTINELS, 
	SVN_FS__REPOS_CONF_WRITE_SENTINELS): Change extensions so these
	don't claim to be ".conf" files.  
	(SVN_FS__REPOS_CONF_START_COMMIT_HOOKS): Restored; this is
	essentially a reversion of the 1.92 change, plus see change to fs.c
	above.  

2001-07-30 11:46  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/svnlook/: editors.c (1.2), main.c (1.4), svnlook.h
	(1.2):

	* editors.c 
	
	  (edit_baton): Add BASE_ROOT field.  
	
	  (delete_entry): Check for file/dir in the BASE_ROOT (since it 
	  doesn't exist in ROOT).  
	
	  (svnlook_rev_changes_editor): Add BASE_ROOT parameter for baton 
	  stuffing.  
	
	* main.c 
	
	  (INT_ERR): Geez...not every error is fatal, C-Mike.  
	
	  (do_dirs_changed, do_changed, do_tree) 
	
	  (print_tree): Only indent 1 space now.  
	
	* svnlook.h 
	
	  (svnlook_rev_changes_editor): Add BASE_ROOT parameter for baton 
	  stuffing.  

2001-07-30 09:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnlook/nodetree.c (1.3):

	#include &lt;string.h&gt;, for strcmp.  

2001-07-30 09:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnlook/nodetree.c (1.2):

	Fix svn-dev.el load path.  

2001-07-30 09:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/hooks.c (1.6):

	#include &lt;string.h&gt;, for strlen.  

2001-07-29 15:34  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_repos.h (1.21), libsvn_repos/delta.c
	(1.51), libsvn_repos/reporter.c (1.14), svnlook/main.c (1.3),
	tests/libsvn_repos/repos-test.c (1.9):

	* include/svn_repos.h 
	
	  (svn_repos_dir_delta): Finally got around to merging the old 
	  svn_repos_dir_delta() and svn_repos_update() functions back into
	  one routine.  
	
	  (svn_repos_update): ...is no more.  
	
	* libsvn_repos/delta.c 
	
	  (add_file_or_dir, replace_file_or_dir): Swapped some argument 
	  ordering for consistency with other functions in this suite.  All 
	  callers changed.  
	
	  (not_a_dir_error): New little helper function.  
	
	  (svn_repos_dir_delta): Revamped to merge functionality of old 
	  svn_repos_dir_delta() and svn_repos_update() functions.  
	
	  (svn_repos_update): ...lives only in the shadows of revision 
	  control.  
	
	* libsvn_repos/reporter.c 
	* svnlook/main.c 
	* tests/libsvn_repos/repos-test.c 
	
	  Callers of svn_repos_update() or svn_repos_dir_delta() changed.  

2001-07-26 23:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion.dsw (1.15),
	subversion/clients/cmdline/subversion_client.dsp (1.4),
	subversion/libsvn_client/libsvn_client.dsp (1.10),
	subversion/libsvn_repos/libsvn_repos.dsp (1.3),
	subversion/svnadmin/svnadmin.dsp (1.3):

	Trying to keep the Win32 build up-to-date...  
	
	* subversion.dsw 
	
	  (subversion_client.dsp): Fixed incorrect location for this project.  
	
	  (svnlook.dsp): New project for svnlook binary.  
	
	* subversion/clients/cmdline/subversion_client.dsp 
	
	  (revert-cmd.c): Added to Source Files 
	
	* subversion/libsvn_client/libsvn_client.dsp 
	
	  (revert.c): Added to Source Files 
	
	* subversion/libsvn_repos/libsvn_repos.dsp 
	
	  (hooks.c): Added to Source Files 
	
	* subversion/svnadmin/svnadmin.dsp 
	
	  Link with libsvn_fs, not libsvn_client.  

2001-07-26 14:25  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/hooks.c (1.5):

	This insignificant change is shorter than the log message that
	mentions it 

2001-07-26 14:21  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_repos.h (1.20),
	libsvn_repos/commit_editor.c (1.17), libsvn_repos/hooks.c (1.4):

	Changes so that RADAV and RALocal can both share code for setting
	the commit's author and log message.  This code brought to you by
	Sussilato.  
	
	* include/svn_repos.h 
	* libsvn_repos/hooks.c 
	
	  (svn_repos_fs_begin_txn_for_commit): New wrapper function for 
	  svn_fs_begin_txn() in the commit case.  Using this, both RALocal
	  and RADAV can set authors and log messages.  
	
	* libsvn_repos/commit_editor.c 
	
	  (replace_root): Call svn_repos_fs_begin_txn_for_commit() instead of 
	  svn_fs_begin_txn().  
	
	  (close_edit): Don't mess with author and log message properties 
	   anymore -- they were already set by replace_root().  

2001-07-26 12:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.61), fetch.c (1.63),
	props.c (1.9), ra_dav.h (1.32):

	Committing Joe Orton's R/W dav props patch;  it's a good place to 
	start for making dav props work.  
	
	* ra_dav.h (SVN_RA_DAV__CUSTOM_NAMESPACE): new svn prop namespace 
	
	* commit.c (do_proppatch): use custom namespace for svn props 
	
	* fetch.c (add_props): new function.  
	  (fetch_dirents): get all props, so SVN:custom ones can be found.  
	  (fetch_file): add the properties.  
	
	* props.c (create_private):   use different pool (?) 
	  (add_to_hash): new func.  
	  (process_results): call ne_propset_iterate().  
	  (svn_ra_dav__get_props):  possibly get specific props.  

2001-07-26 12:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_error_codes.h (1.12):

	Change over-specific error description.  

2001-07-26 11:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.23), subversion/svnlook/editors.c (1.1),
	subversion/svnlook/main.c (1.2), subversion/svnlook/nodetree.c
	(1.1), subversion/svnlook/svnlook.h (1.1),
	doc/user/svnlook/svnlook.texi (1.2):

	Start to really fill out the svnlook program.  
	
	* build.conf 
	
	  (svnlook): Link with libsvn_repos.  
	
	* doc/user/svnlook/svnlook.texi 
	
	  Update DATE format to reflect GMT time usage.  
	
	* subversion/svnlook/main.c 
	
	  (struct svnlook_ctxt_t): New context structure.  
	
	  (get_property, get_root, do_log, do_date, do_author, 
	  print_dirs_changed_tree, do_dirs_changed, print_changed_tree, 
	  do_changed, do_diff, print_tree, do_tree, do_default): New 
	  functions.  
	
	  (usage): Update usage message.  
	
	  (main): Lots of parsing changes, changed to use the context 
	  structure, and tons of other goodies.  This function now has guts.  
	
	* subversion/svnlook/editors.c 
	* subversion/svnlook/nodetree.c 
	* subversion/svnlook/svnlook.h 
	
	  New files.  

2001-07-25 13:19  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/commit_editor.c (1.16):

	* commit_editor.c 
	
	  (close_edit): Minor variable rename.  

2001-07-25 12:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.94), libsvn_fs/fs.c (1.54):

	* svn_fs.h, fs.c (svn_fs_conf_dir, svn_fs_pre_commit_conf, 
	svn_fs_post_commit_conf, svn_fs_conf_read_sentinel_conf, 
	svn_fs_conf_write_sentinel_conf): New functions.  
	
	* fs.c (create_conf): Use them.  

2001-07-25 12:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/index.html (1.31):

	Note about i18n and multi-lingual support.  

2001-07-25 10:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_tasks.html (1.8):

	Remove task "Send usage to stdout or stderr as appropriate", which
	was issue #402.  
	
	The patch to fix it was submitted by Chris Conrad 
	&lt;cconrad@valinux.com&gt;, applied by Brian Fitzpatrick 
	&lt;fitz@red-bean.com&gt;, and reviewed with only minor tweaks by Karl
	Fogel &lt;kfogel@collab.net&gt;.  See related commits of today and
	yesterday.  

2001-07-25 10:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/clients/cmdline/help-cmd.c (1.5):

	(svn_cl__help): Make `-v' and `--version' work again.  Make `help' 
	print a full usage message to stdout, like `-h' and `--help'.  
	(print_version_info): Shorter version message, remove leading
	newline.  

2001-07-25 10:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error_codes.h (1.11), include/svn_fs.h
	(1.93), include/svn_repos.h (1.19), libsvn_fs/hooks.c (1.2),
	libsvn_fs/hooks.h (1.2), libsvn_fs/tree.c (1.90), libsvn_fs/txn.c
	(1.45), libsvn_repos/commit_editor.c (1.15), libsvn_repos/hooks.c
	(1.3), mod_dav_svn/version.c (1.30),
	tests/libsvn_repos/repos-test.c (1.8):

	Re-acquire grip on sanity (confessing a faint hope that Brane will 
	make some re-mark about how "re" is a prefix and needs no hyphen).  
	
	We will indeed do hooks and sentinels in libsvn_repos, adding a few 
	public accessor functions to the fs interface where necessary.  This 
	is basically a partial reversion of my change of 2001-07-24 18:36, 
	plus some more coding.  
	
	* include/svn_fs.h (svn_fs_commit_txn): Doc fix.  
	(svn_fs_txn_pool): New func.  
	
	* svn_error_codes.h (svn_errno_t): New error 
	SVN_ERR_REPOS_HOOK_FAILURE.  
	
	* libsvn_fs/tree.c (svn_fs_commit_txn): Don't run pre- and
	post-commit hooks here, we'll do it in libsvn_repos instead.  
	
	* libsvn_fs/txn.c (svn_fs_txn_pool): Define.  
	
	* libsvn_fs/hooks.c, libsvn_fs/hooks.h: Remove these files.  
	
	* libsvn_repos/hooks.c: Restore this file.  
	(run_pre_commit_hooks, run_post_commit_hooks): New funcs.  
	(svn_repos_fs_commit_txn): Define.  
	
	* include/svn_repos.h (svn_repos_fs_commit_txn): Re-declare.  
	
	* libsvn_repos/commit_editor.c (close_edit): Use 
	svn_repos_fs_commit_txn, instead of svn_fs_commit_txn.  
	
	* mod_dav_svn/version.c (dav_svn_merge): Same.  

2001-07-24 23:56   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/project_tasks.html (1.7):

	'Whack.' Ball's in your court, Karl.  

2001-07-24 23:49   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/clients/cmdline/help-cmd.c (1.4):

	This patch submitted by Christopher Conrad &lt;cconrad@valinux.com&gt; 
	
	Issue 402 has been worked out as follows: 
	
	svn --no-such-option -&gt; stderr, non-zero exit code svn --help
	-&gt;stdout, zero exit code svn help -&gt; stdout, zero exit code (it
	prints the same message as svn help help) 
	
	* clients/cmdline/help-cmd.c (print_command_info,
	print_generic_help): Added FILE *stream to parameter lists to allow
	callers to select the output stream to use.  Switched all printf's
	to fprintf's to take advantage of the new parameter.  
	* clients/cmdline/help-cmd.c (svn_cl__help): Added a case to handle
	when svn is invoked with help or --help.  Updated calls to
	print_generic_help and print_command_info to use new parameter list.  
	* clients/cmdline/help-cmd.c (svn_cl__subcommand_help): Updated call 
	to print_command_info to use new parameter list.  

2001-07-24 18:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: hooks.c (1.1), hooks.h (1.1), tree.c
	(1.89):

	* hooks.c, hooks.h: New files, with empty hook driver definitions.  
	
	* tree.c (svn_fs_commit_txn): Run hooks.  

2001-07-24 18:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.92), include/svn_repos.h (1.18),
	libsvn_fs/fs.c (1.53), libsvn_fs/fs.h (1.27), libsvn_fs/tree.c
	(1.88), libsvn_repos/commit_editor.c (1.14), libsvn_repos/hooks.c
	(1.2), mod_dav_svn/version.c (1.29),
	tests/libsvn_repos/repos-test.c (1.7):

	Remove start-commit hooks.  They are useless -- we don't know at 
	txn-creation time whether the txn is being created for reading or 
	writing purposes, so we can't put a write guard there.  Instead, the 
	write sentinels will take care of that.  
	
	Remove the recent svn_repos_fs_commit_txn() function, change all 
	callers back to svn_fs_commit_txn().  We will run the hooks from 
	libsvn_fs, not libsvn_repos; put notes at those spots.  

2001-07-24 18:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: clients/cmdline/commit-cmd.c (1.6),
	clients/cmdline/import-cmd.c (1.5), include/svn_client.h (1.41),
	include/svn_fs.h (1.91), include/svn_ra.h (1.63),
	include/svn_repos.h (1.17), include/svn_types.h (1.65),
	libsvn_client/commit.c (1.54), libsvn_ra_dav/commit.c (1.60),
	libsvn_ra_dav/ra_dav.h (1.31), libsvn_ra_local/ra_plugin.c (1.39),
	libsvn_repos/commit_editor.c (1.13), libsvn_repos/hooks.c (1.1),
	mod_dav_svn/version.c (1.28), tests/libsvn_repos/repos-test.c
	(1.6):

	Pass a username around, in anticipation of hooks that use it, and
	wrap svn_fs_commit_txn() with svn_repos_fs_commit_txn().  The latter
	honors hooks.  
	
	Note that the user arg added everywhere is `const char *'.  This is 
	inconsistent with the many `svn_string_buf_t *' args around it, but 
	there's no point perpetuating the insanity, even though we haven't 
	gotten around to cleaning up the svn_string_t/svn_stringbuf_t stuff 
	yet.  
	
	* libsvn_ra_local/ra_plugin.c (get_commit_editor): Take new `user' 
	arg, pass it along.  
	
	* include/svn_ra.h (svn_ra_plugin_t): Adjust prototype and doc for 
	get_commit_editor.  
	
	* include/svn_repos.h (svn_repos_get_editor): New `user' arg.  
	(svn_repos_fs_commit_txn): New prototype.  
	
	* libsvn_client/commit.c (send_to_repos): Take new `user' arg.  
	
	* libsvn_ra_dav/commit.c (commit_ctx_t): New `user' field.  
	(svn_ra_dav__get_commit_editor): Take new `user' arg.  
	
	* libsvn_ra_dav/ra_dav.h (svn_ra_dav__get_commit_editor): Adjust 
	prototype for above.  
	
	* libsvn_client/commit.c (svn_client_import, svn_client_commit):
	Take new `user' arg, pass it along.  
	
	* include/svn_client.c (svn_client_import, svn_client_commit): Doc 
	fixes.  
	
	* libsvn_repos/commit_editor.c (edit_baton): New `user' field.  
	(svn_repos_get_editor): Take new `user' arg, store in edit baton.  
	(close_edit): Set author prop on the txn, as well as date.  
	
	* libsvn_repos/hooks.c (svn_repos_fs_commit_txn): Define.  
	
	* clients/cmdline/commit-cmd.c (svn_cl__commit): Pass new `user'
	arg.  
	
	* clients/cmdline/import-cmd.c (svn_cl__import): Pass new `user'
	arg.  
	
	* include/svn_types.h (SVN_PROP_REVISION_AUTHOR): New #define.  
	
	* include/svn_fs.h (svn_fs_commit_txn): Warn callers that they 
	probably want to use svn_repos_fs_commit_txn.  All callers changed 
	except for fs tests.  

2001-07-24 17:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_tasks.html (1.6):

	Note that Chris Conrad has taken issue 402.  

2001-07-24 16:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/node-rev.c (1.23), libsvn_fs/tree.c
	(1.87), tests/clients/cmdline/prop_tests.py (1.2):

	Fix two genuine filesystem bugs.  Ben drives, Karl finds.  
	
	(`prop_tests.py 2' now passes.  prop_tests.py #3, however, still
	fails due to ancient bug #352.  This needs to be fixed.) 
	
	* node-rev.c (deltify):  don't deltify identical reps.  
	
	* tree.c (svn_fs_commit_txn):  return *all* errors from commit, 
	  preventing false positives.  
	
	* prop_tests.py (commit_props, update_props):  a number is not a
	string.  

2001-07-24 16:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_repos.h (1.16):

	(svn_repos_commit_hook_t, svn_repos_get_editor): Doc fixes.  

2001-07-24 15:30  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.22), subversion/svnlook/.cvsignore (1.1),
	subversion/svnlook/main.c (1.1):

	Beginning work on 'svnlook' repos inspection tool.  
	
	* build.conf 
	
	  (svnlook): New section for building 'svnlook' repos inspection tool.  
	
	* subversion/svnlook/.cvsignore 
	* subversion/svnlook/main.c 
	
	  New files.  

2001-07-24 14:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: fs.c (1.52), fs.h (1.26):

	* fs.h (SVN_FS__REPOS_CONF_START_COMMIT_HOOKS): New #define for a
	conf file.  
	(SVN_FS__REPOS_CONF_PRE_COMMIT_HOOKS, 
	SVN_FS__REPOS_CONF_POST_COMMIT_HOOKS): Replace 
	SVN_FS__REPOS_CONF_PRECOMMIT_HOOKS and 
	SVN_FS__REPOS_CONF_POSTCOMMIT_HOOKS respectively; an underscore was 
	added to each.  
	
	* fs.c (create_conf): Create new conf file.  Improve initial
	contents of other conf files.  

2001-07-24 14:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: basic_tests.py (1.8),
	prop_tests.py (1.1), svntest/actions.py (1.6):

	
	* prop_tests.py: new file with (for now) three new tests that verify 
	  property behaviors.  (The last two are known to fail right now,
	  but this bug will be fixed shortly.) 
	
	* actions.py (run_and_verify_update):  add `check_props' arg that
	  can be passed through to build_tree_from_wc().  Change all callers.  

2001-07-24 14:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.h (1.25):

	(svn_fs_t): Doc fix.  

2001-07-24 14:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: fs.c (1.51), fs.h (1.24):

	More repository organization, including a new conf area, in 
	preparation for hooks: 
	
	* fs.h (SVN_FS__REPOS_CUSTOM_DIR, SVN_FS__REPOS_CONF_DIR, 
	SVN_FS__REPOS_DAV_DIR): New #defines, for new standard subdirs in
	the repository.  
	(SVN_FS__REPOS_CONF_PRECOMMIT_HOOKS, 
	SVN_FS__REPOS_CONF_POSTCOMMIT_HOOKS, 
	SVN_FS__REPOS_CONF_READ_SENTINELS, 
	SVN_FS__REPOS_CONF_WRITE_SENTINELS): New #defines, for standard conf 
	files.  
	(svn_fs_t): New `dav_path' and `conf_path' fields.  
	
	* fs.c (create_conf): New function, helper for below.  
	(svn_fs_create_berkeley): Create aforementioned new directories and 
	conf files.  

2001-07-24 14:17  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* doc/user/svnlook/svnlook.texi (1.1):

	* svnlook.texi 
	
	  A(n intentionally) misnamed file for tracking the design of the 
	  'svnlook' binary.  

2001-07-24 13:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/hooks.txt (1.2):

	Trivial change, in anticipation of larger upcoming commit.  

2001-07-24 10:00  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/cl.h (1.10),
	clients/cmdline/cleanup-cmd.c (1.4), clients/cmdline/main.c (1.12),
	clients/cmdline/revert-cmd.c (1.1), include/svn_client.h (1.40),
	include/svn_wc.h (1.107), libsvn_client/revert.c (1.1),
	libsvn_wc/adm_ops.c (1.77), tests/clients/cmdline/basic_tests.py
	(1.7):

	Initial code for 'svn revert' subcommand.  
	
	* clients/cmdline/main.c 
	
	  (svn_cl__cmd_table):  Added 'revert' subcommand.  
	
	* clients/cmdline/cl.h 
	
	  (svn_cl__revert):  New function prototype.  
	
	* include/svn_client.h 
	
	  (svn_client_revert): New function prototype.  
	
	* clients/cmdline/revert-cmd.c 
	* libsvn_client/revert.c 
	
	  New file(s).  
	
	* libsvn_wc/adm_ops.c 
	
	  (svn_wc_revert): New function.  
	
	* include/svn_wc.h 
	
	  (svn_wc_revert): New function prototype.  
	
	* clients/cmdline/cleanup-cmd.c 
	
	  Drop the unnecessary #includes.  
	
	* tests/clients/cmdline/basic-tests.py 
	
	  (basic_revert): New test function.  
	
	  (test_list): Add reference to new test basic_revert().  

2001-07-23 15:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/: README (1.2), hooks.txt (1.1):

	* hooks.txt: New file, describe the hook system.  
	
	* README: Reword, point to new file hooks.txt.  

2001-07-23 15:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/alpha-checklist.txt (1.3):

	Bring up-to-date.  

2001-07-23 10:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_wc/log.c (1.106),
	tests/clients/cmdline/basic_tests.py (1.6):

	* libsvn_wc/log.c 
	
	  (svn_wc_cleanup): Slap NULL onto end of va_args-y function call.  
	
	* tests/clients/cmdline/basic_tests.py 
	
	  (basic_cleanup): Print stderr output if any exists after running
	  cleanup.  

2001-07-23 10:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/dav_setup.txt (1.10):

	Duh, change these addresses too.  

2001-07-23 10:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/dav_setup.txt (1.9):

	Update location of httpd-2.0 tree.  

2001-07-23 10:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/cleanup-cmd.c (1.3),
	libsvn_wc/adm_files.c (1.82), libsvn_wc/log.c (1.105),
	libsvn_wc/wc.h (1.156):

	Some little changes to make the `svn cleanup' subcommand clean out
	the tmp area as part of its duties.  
	
	* clients/cmdline/cleanup-cmd.c 
	
	  (svn_cl__cleanup): Push the implied '.' target when no other target 
	  is supplied.  
	
	* libsvn_wc/wc.h 
	
	  (svn_wc__adm_cleanup_tmp_area): New function prototype.  
	
	* libsvn_wc/adm_files.c 
	
	  (init_adm_tmp_area): Helper func for a touch o' abstraction.  
	
	  (init_adm): Use helper func init_adm_tmp_area().  SVN_ERR'd a bunch 
	  of "if err return err" chunks.  
	
	  (svn_wc__adm_cleanup_tmp_area): New function.  
	
	* libsvn_wc/log.c 
	
	  (svn_wc_cleanup): Clean out "tmp" area, too.  

2001-07-23 10:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/commit_tests.py (1.7):

	* commit_tests.py 
	
	  (get_standard_status_list, nested_dir_replacements): Add 'locked' 
	  attribute to new node's status.  

2001-07-20 17:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.32):

	Update weekly status page.  

2001-07-20 16:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/user/manual/: dirversioning.texi (1.1), model.texi (1.3),
	svn-manual.texi (1.5):

	New user-manual documentation on the Greg Hudson Problems.  

2001-07-20 16:07  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/status.c (1.5), include/svn_wc.h
	(1.106), libsvn_wc/status.c (1.38),
	tests/clients/cmdline/basic_tests.py (1.5),
	tests/clients/cmdline/commit_tests.py (1.6),
	tests/clients/cmdline/svntest/actions.py (1.5),
	tests/clients/cmdline/svntest/main.py (1.9),
	tests/clients/cmdline/svntest/tree.py (1.7):

	Added new column to status reporting to show locked directories 
	(means, "go run cleanup") 
	
	* clients/cmdline/status.c 
	
	  (generate_status_codes): Add (and use) LOCKED paramater.  Callers 
	  changed.  
	
	* include/svn_wc.h 
	
	  (svn_wc_status_t): Add LOCKED field.  
	
	* libsvn_wc/status.c 
	
	  (assemble_status): Determine if a directory is locked.  
	
	* tests/clients/cmdline/basic_tests.py 
	
	  (basic_cleanup): New test for cleanup subcommand.  
	
	  (test_list): Added reference to new cleanup test.  
	
	* tests/clients/cmdline/commit_tests.py 
	
	  (hudson_part_1_variation_2): Bug fix.  Expect the right revision.  
	
	* tests/clients/cmdline/svntest/actions.py 
	
	  (get_virginal_status_list): Add 'locked' attribute 
	
	  (lock_admin_dir): New function.  
	
	* tests/clients/cmdline/svntest/main.py 
	
	  (get_admin_name): New function.  
	
	* tests/clients/cmdline/svntest/tree.py 
	
	  (build_tree_from_status): Modified to notice 'locked' attribute in 
	  status output.  

2001-07-20 14:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.17):

	(usage, main): Make it "lstxns" instead of "lstxn", because more 
	intuitive and consistent with "lsrevs".  

2001-07-20 14:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.45):

	Use PREREQ_FAILED to report on multiple problems at once, instead of 
	only reporting the earliest-detected problem in each run.  

2001-07-20 14:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.44):

	Resolve issue #415 by pointing to new apr site.  

2001-07-20 14:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/tree.c (1.86),
	libsvn_repos/commit_editor.c (1.12),
	tests/clients/cmdline/basic_tests.py (1.4):

	Resolve issue #416: 
	
	* commit_editor.c (replace_file): Use svn_fs_link.  
	
	* tree.c (merge): Fix comments.  
	
	* basic_tests.py (basic_merge): Unbreak.  

2001-07-20 14:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.96):

	(link_test): New test.  
	(test_funcs): Run it.  

2001-07-20 12:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.16):

	(print_tree): Print node id.  

2001-07-20 11:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.155), include/svn_fs.h
	(1.90), libsvn_fs/dag.c (1.119), libsvn_fs/dag.h (1.48),
	libsvn_fs/tree.c (1.85), libsvn_repos/commit_editor.c (1.11),
	libsvn_repos/reporter.c (1.13),
	tests/libsvn_repos/dir-delta-editor.c (1.6):

	Resolve issue #417, by implementing svn_fs_link() and calling it 
	instead of svn_fs_copy() where appropriate: 
	
	* svn_fs.h (svn_fs_link): New func.  
	(svn_fs_copy): Doc fix.  
	
	* tree.c (copy_args): New field `preserve_history'.  
	(txn_body_copy): Pass it along.  
	(svn_fs_copy, svn_fs_link): Use above new field.  
	
	* dag.h, dag.c (svn_fs__dag_copy): Take new `preserve_history' 
	parameter, use it to determine whether to copy or just link.  
	
	* dir-delta-editor.c (add_or_replace_dir, add_or_replace_file): 
	Removed.  
	(test_add_directory, test_replace_directory, test_add_file, 
	test_replace_file): Unfactored.  Handle base_revision, 
	copyfrom_revision, and copyfrom_path correctly.  
	
	* svn_delta.h (svn_delta_edit_fns_t): Doc fixes for add_directory, 
	replace_directory, add_file, replace_file.  
	
	* commit_editor.c (replace_directory): Use svn_fs_link.  
	
	* reporter.c (svn_repos_set_path): Same.  
	
	* dir-delta-editor.c (add_or_replace_dir): 

2001-07-20 11:12  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.114):

	* libsvn_wc/entries.c 
	
	  (fold_state_changes): Recent changes to Subversion (namely, actually
	  using the existence field in WC entries) highlight some login
	  flaws that this patch attempts to repair.  

2001-07-20 10:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/xmltests/svn-test2.sh (1.4):

	Redirect stderr to stdout, so it ends up in tests.log, as Brane 
	suggested.  

2001-07-20 09:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/main.py (1.8):

	* main.py (run_tests):  what an embarrassing bug.  :-) 

2001-07-20 09:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/README (1.8):

	Update contents of README.  

2001-07-20 09:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_error_codes.h (1.10):

	* svn_error_codes.h (SVN_ERR_WC_BAD_ADM_LOG):  improve description.  
	Logfiles are almost never "corrupted".  Instead, this is the
	top-level error returned whenever *anything* goes wrong while
	running a log.  

2001-07-19 17:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/xmltests/svn-test2.sh (1.3):

	Redirect stderr to Albemuth where necessary.  

2001-07-19 16:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.76), wc.h (1.155):

	Make xml test number 9 in svn-test.sh pass again, by making 
	svn_wc_remove_from_revision_control() more robust: 
	
	* adm_ops.c (remove_file_if_present): New helper func.  
	(svn_wc_remove_from_revision_control): Rewrite file case.  
	
	* wc.h (svn_wc__text_base_path): Indentation fix.  

2001-07-19 15:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/skel.c (1.34), libsvn_fs/tree.c (1.84),
	tests/clients/cmdline/commit_tests.py (1.5):

	Fix part 2 of the Greg Hudson Directory Versioning Problem.  
	
	* tree.c (merge): new logic check --merge will fail if target dir's 
	  and ancestor dir's prop-keys aren't the same, i.e. if a propchange 
	  was committed on an out-of-date directory.  (see issue #418 about 
	  the inelegance of this.) 
	
	* commit_tests.py (hudson_part_2):  new regression test for this
	problem.  
	
	* skel.c (svn_fs__skels_are_equal):  fix braino.  

2001-07-19 15:15  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/tree.c (1.83), tests/libsvn_fs/fs-test.c
	(1.95):

	* subversion/libsvn_fs/tree.c 
	
	  (merge): Allow as a non-conflicting case where: 
	
	     Entry E exists in ANCESTOR but has been deleted from SOURCE.  
	     Entry E exists in ANCESTOR and in TARGET, but is not the same
	     node.  
	
	* subversion/tests/libsvn_fs/fs-test.c 
	
	  (merging_commit): Modify this test to verify the above new
	  allowance.  

2001-07-19 13:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/main.py (1.7):

	(svn_binary, svnadmin_binary): Make paths absolute, so tests can 
	safely chdir.  

2001-07-19 12:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/main.py (1.6):

	(svn_binary, svnadmin_binary): Fix paths.  

2001-07-19 12:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_client/add.c (1.18), libsvn_client/commit.c
	(1.53), libsvn_delta/default_editor.c (1.10),
	libsvn_fs/nodes-table.c (1.24), libsvn_fs/txn-table.c (1.28),
	libsvn_ra/ra_loader.c (1.10), libsvn_repos/rev_hunt.c (1.3),
	libsvn_subr/io.c (1.41), libsvn_subr/time.c (1.4),
	libsvn_wc/adm_crawler.c (1.121), libsvn_wc/adm_ops.c (1.75),
	libsvn_wc/entries.c (1.113), libsvn_wc/log.c (1.104),
	libsvn_wc/questions.c (1.56), libsvn_wc/status.c (1.37),
	tests/svn_test_editor.c (1.27), tests/libsvn_subr/path-test.c
	(1.5), tests/libsvn_wc/commit-test.c (1.34):

	#include &lt;string.h&gt;, to eliminate warnings about mem* and str*
	functions 

2001-07-19 12:36  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_subr/getdate.cw (1.2):

	* subversion/libsvn_subr/getdate.cw 
	
	  Little docstring edit.  

2001-07-19 12:26  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* svn_config.dsp (1.5), subversion/libsvn_repos/libsvn_repos.dsp
	(1.2), subversion/libsvn_subr/getdate.cw (1.1),
	subversion/libsvn_subr/libsvn_subr.dsp (1.8):

	NOW the Win32 build is up-to-date.  Thanks for the (perhaps 
	inadvertant) push on this, Bill Tutt. 
	
	* subversion/libsvn_subr/getdate.cw 
	
	  New file. 
	
	* svn_config.dsp 
	
	  (getdate.cw): Added to Source Files.  A custom build step copies
	  this to getdate.c (which is generated by yacc in Unix) 
	
	* subversion/libsvn_repos/libsvn_repos.dsp 
	
	  (rev_hunt.c): Added to Source Files. 
	
	* subversion/libsvn_subr/libsvn_subr.dsp 
	
	  (getdate.c, time.c): Added to Source Files.  

2001-07-19 12:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/skel.h (1.24):

	(svn_fs__skels_are_equal): Doc fix.  

2001-07-19 12:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: skel.c (1.33), skel.h (1.23):

	(svn_fs__skels_are_equal): New func, for Ben.  

2001-07-18 19:17  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/subversion_client.dsp (1.3),
	libsvn_client/libsvn_client.dsp (1.9), libsvn_wc/libsvn_wc.dsp
	(1.5):

	Trying to catch up the Win32 build again.  NOTE:  I was not entirely 
	successful, since the getdate.c (generated from getdate.y) has no
	way of appearing under non-cygwin Win32 at this point in time.  
	
	* subversion/clients/cmdline/subversion_client.dsp 
	
	  (cleanup-cmd.c, propdel-cmd.c): Added to Win32 Source Files 
	
	* subversion/libsvn_client/libsvn_client.dsp 
	
	  (cleanup.c): Added to Win32 Source Files 
	
	* subversion/libsvn_wc/libsvn_wc.dsp 
	
	  (local_changes.c): Removed from Win32 Source Files 

2001-07-18 16:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/commit_tests.py (1.4):

	
	* commit_tests.py (hudson_part_1, hudson_part_1_variation_1, 
	  hudson_part_1_variation_2):   new tests for the first part of the 
	  "Greg Hudson" directory versioning problem.  
	
	   NOTE:  the last test is currently known to fail, due to a bug in 
	   the logic of the fs's merge() routine.  Karl/Mike will fix this
	   bug tomorrow.  

2001-07-18 15:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.39), include/svn_wc.h
	(1.105), libsvn_client/commit.c (1.52), libsvn_client/update.c
	(1.22), libsvn_wc/adm_crawler.c (1.120), libsvn_wc/adm_ops.c
	(1.74), libsvn_wc/entries.c (1.112), libsvn_wc/get_editor.c
	(1.190), libsvn_wc/log.c (1.103), libsvn_wc/props.c (1.34),
	libsvn_wc/status.c (1.36):

	Solve the "Greg Hudson Paradox", part 1.  Tests forthcoming.  
	
	* log.c (log_do_committed): new code for marking "existence=deleted" 
	  whenever a committed, deleted object has a different version
	  number than its parent directory.  If the revisions are the same,
	  however, then it's safe to remove the object's entry completely.  
	
	* adm_ops.c (svn_wc__ensure_uniform_revision): if an updated item 
	  still has a `deleted' flag, remove the whole entry from revision 
	  control.  
	
	* svn_wc.h (svn_wc_entry, svn_wc_entries_read): 
	
	  Change ALL callers of these two routines, especially those that loop 
	  over entries.  Make sure that they are properly ignoring `deleted' 
	  entries: 
	
	      /* If the entry's existence is `deleted', skip it. */ 
	      if (entry-&gt;existence == svn_wc_existence_deleted) 
	        continue;  /* or maybe return an error instead */ 
	
	  List of changed callers (most callers changed, but not all): 
	
	  * adm_ops.c (svn_wc__ensure_uniform_revision, mark_tree, 
	               svn_wc_delete, svn_wc_add_directory, svn_wc_add_file) 
	  * props.c (svn_wc__get_existing_prop_reject_file) 
	  * status.c (svn_wc_statuses, svn_wc_status) 
	  * adm_crawler.c (verify_tree_deletion, crawl_dir,
	  svn_wc_crawl_local_mods) 
	* commit.c (send_to_repos) 
	  * status.c (svn_client_status) 
	  * update.c (svn_client_update) 
	
	* entries.c (svn_wc__atts_to_entry):  fix copy-and-paste-o from
	Mike. :-) 
	
	* status.c (assemble_status):  status `D' for existence==deleted,
	  not just schedule==delete.  
	
	  (svn_wc_statuses, svn_wc_status): `deleted' entries are no longer 
	  printed by recursive status commands; they can only be seen if
	  they are the direct target of `svn st'.  However, if entry is
	  `deleted' and scheduled for `add' simultaneously, then it's ok to
	show.  
	
	* svn_wc.h, status.c (svn_wc_statuses):  if any children of PATH are 
	  `deleted', do *not* return them in the hash.  
	
	* get_editor.c (add_or_replace_file): add comments.  If the user 
	  updates to a tree where a `deleted' file exists again, the 
	  update-editor should simply re-create the entry.  
	
	* adm_crawler.c (report_single_mod):  if a target is both `deleted' 
	  and schedule for addition, then the crawler must delete() and
	  add() to ensure a correct transaction.  
	
	  (report_revisions):  if an entry is `deleted', report it as missing 
	  to the transaction.  

2001-07-18 15:21  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/cleanup-cmd.c (1.2),
	include/svn_client.h (1.38), include/svn_error_codes.h (1.9),
	include/svn_wc.h (1.104), libsvn_client/cleanup.c (1.1),
	libsvn_wc/log.c (1.102), libsvn_wc/wc.h (1.154):

	`svn cleanup' command.  This is untested, but doesn't really affect 
	any current code branches.  
	
	* clients/cmdline/cleanup-cmd.c 
	
	  (svn_cl__cleanup): Actually call the cleanup code.  
	
	* libsvn_client/cleanup.c 
	
	  New file with cleanup interface code.  
	
	* include/svn_client.h 
	
	  (svn_client_cleanup): New function.  
	
	* include/svn_error_codes.h 
	
	  (SVN_ERR_WC_IS_NOT_DIRECTORY, SVN_ERR_WC_IS_NOT_FILE): New error
	  codes.  
	
	* include/svn_wc.h 
	* libsvn_wc/log.c 
	
	  (svn_wc_cleanup): Was non-public function svn_wc__cleanup().  
	  Cleaned up (heh!) and made production-ready.  
	
	* Index: libsvn_wc/wc.h 
	
	  Some ittybitty formatting changes, corrected misspeelngs, and 
	  removed svn_wc__cleanup()'s obsolete prototype.  

2001-07-18 14:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_subr/.cvsignore (1.6):

	* libsvn_subr/.cvsignore 
	
	  Ignore getdate.c (which is generated from some Python script
	  somewhere...) 

2001-07-18 10:40  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/cmdline/: cl.h (1.9), cleanup-cmd.c (1.1),
	main.c (1.11):

	Skeleton for the `svn cleanup' sub-command.  
	
	* clients/cmdline/main.c 
	
	  (svn_cl__cmd_table):  Added "cleanup" command.  
	
	* clients/cmdline/cl.h 
	
	  (svn_cl__cleanup):  New function declaration.  
	
	* clients/cmdline/cleanup-cmd.c 
	
	  New file (containing svn_cl__cleanup).  

2001-07-18 10:10  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.94):

	* tests/libsvn/fs-test.c 
	
	  (attempt_merge, merge_trees): Removed obsolete functions.  
	
	  (unexpected_node_id): New helper function.  
	
	  (merge_re_id): New test function.  
	
	  (merging_commit): Kick up the filesize to 100,000 bytes, and drop 
	  the number of commits from 100 to 10.  
	
	  (test_funcs): Removed reference to merge_trees(), add reference to 
	  merge_re_id().  

2001-07-17 20:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error_codes.h (1.8),
	libsvn_wc/adm_crawler.c (1.119), libsvn_wc/entries.c (1.111),
	tests/clients/cmdline/basic_tests.py (1.3),
	tests/clients/cmdline/commit_tests.py (1.3),
	tests/clients/cmdline/svntest/actions.py (1.4),
	tests/clients/cmdline/svntest/main.py (1.5),
	tests/clients/cmdline/svntest/tree.py (1.6):

	Fix segmentation fault reported by Jon Trowbridge.  This bug didn't 
	last long enough to get an issue number, so here's the report info: 
	
	   From: Jon Trowbridge &lt;trow@ximian.com&gt; 
	   To: dev@subversion.tigris.org 
	   Date: 17 Jul 2001 03:20:55 -0500 
	   Subject:  svn segfaults if you commit a file that hasn't been
	   added Message-Id: &lt;995358055.16975.5.camel@morimoto&gt; 
	
	This is the fix: 
	
	* svn_error_codes.h (svn_errno_t): New error 
	SVN_ERR_UNVERSIONED_RESOURCE.  
	
	* adm_crawler.c (svn_wc_crawl_local_mods): If target is an
	unversioned resource, throw the appropriate error.  
	
	With Ben Collins-Sussman &lt;sussman@collab.net&gt;, write a regression
	test for above.  This entailed a genreal improvement to the
	error-checking in the Python test framework: 
	
	* commit_tests.py (commit_unversioned_thing): New test.  
	
	* basic_tests.py (basic_merge): Expect a conflict error halfway 
	through, though this is not known to be correct.  See issue #416.  
	
	* actions.py (run_and_verify_commit): Handle errors too.  
	
	* main.py (run_svn): Return stderr as well as stdout.  All callers 
	changed.  
	
	Unrelated: 
	
	* entries.c (svn_wc_entry): Silly comment fix.  

2001-07-17 19:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/clients/cmdline/main.c (1.10):

	(main): Print error to stderr, not stdout.  

2001-07-17 17:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_client/status.c (1.16):

	(svn_client_status): Indentation fixes.  

2001-07-17 17:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_client/status.c (1.15):

	(svn_client_status): If no such entry, just return without
	attempting to fill in more status information.  

2001-07-17 17:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.89), libsvn_fs/dag.c (1.118),
	libsvn_fs/dag.h (1.47), libsvn_fs/node-rev.h (1.12),
	libsvn_fs/nodes-table.c (1.23), libsvn_fs/structure (1.51),
	libsvn_fs/tree.c (1.82), tests/libsvn_fs/fs-test.c (1.93):

	Do history-preserving fs copies: 
	
	* svn_fs.h (svn_fs_node_copied_from): New func.  
	
	* dag.c (stabilize_node): Don't special-case copies.  
	(dag_node_kind_t): Remove `dag_node_kind_copy'.  
	(svn_fs__dag_get_node): Don't handle copy nodes anymore.  
	(node_rev_make_mutable): Remove copy history from the node rev.  
	
	* dag.c, dag.h (svn_fs__dag_is_copy, svn_fs__dag_make_copy, 
	svn_fs__dag_get_copy): Removed these obsolete functions.  
	(svn_fs__dag_copy, svn_fs__dag_copied_from): New funcs.  
	
	* tree.c (copied_from_args, txn_body_copied_from, 
	svn_fs_node_copied_from): New struct and functions.  
	(txn_body_copy): Use the new dag copying interface.  
	
	* node-rev.h: Doc fixes for all the accessor macros.  
	(SVN_FS__NR_HDR_COPY): New accessor macro.  
	
	* nodes-table.c (is_valid_option): Replaces is_valid_flag(), all 
	callers changed.  Test for copy option now, instead of obsolete 
	mutability flag.  
	
	* fs-test.c (copy_test): Test copy history preservation.  
	
	* structure: Minor clarification.  

2001-07-17 12:17  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.81):

	* libsvn_fs/tree.c 
	
	  (merge, txn_body_merge): After merge() returns, we can re-ID the 
	  target's node to reflect its new true ancestry information.  I
	  have about 60% confidence in this change -- Karl or Jim, **please
	review**.  

2001-07-16 14:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.50):

	Settle on a plan for ancestry-recording fs copies.  

2001-07-16 14:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.117), dag.h (1.46), tree.c
	(1.80):

	* dag.c (svn_fs__dag_set_entry): Constify id parameter.  
	
	* tree.c (txn_body_copy): Remove now-unnecessary cast from id 
	parameter.  Also, abort when source of copy is a txn root.  
	(merge): Add comment for Ben, who is about to add an extra safeguard 
	to the logic here.  

2001-07-16 10:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_client.h (1.37):

	Change API docstrings:  before & after editors are *optional*.  

2001-07-16 09:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* HACKING (1.33):

	Remove BSD comment.  

2001-07-13 14:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/reps-strings.c (1.23),
	tests/libsvn_fs/fs-test.c (1.92):

	Well, some testing of large(r) files revealed some more little buggy 
	boogers in the deltification code.  I *think* all that remains to be 
	addressed is some efficiency/memory usage stuff.  
	
	* libsvn_fs/reps-strings.c 
	
	  (window_handler): More bug fixes.  Window relevance check was a 
	  touch off, and now the function is careful not to overrun the
	  output buffer.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (get_file_digest): New helper function.  
	
	  (large_file_integrity): New test function.  
	
	  (test_funcs): Added reference to new test, large_file_integrity().  

2001-07-13 11:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.22):

	Pool optimizations: 
	
	(window_handler_baton_t): Redocument `pool' field.  
	(window_handler): Clear pool for reuse.  
	(rep_read_range): Initialize pool to a subpool of trail-&gt;pool.  

2001-07-13 10:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.32):

	(Participating in the community): Update, mention commit access 
	procedure.  

2001-07-13 09:52  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* notes/guis/planning.txt (1.2):

	* notes/guis/planning.txt 
	
	  Use grammar common to educated Americans in the year 2001.  

2001-07-13 09:49  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* notes/guis/planning.txt (1.1):

	* notes/guis/planning.txt 
	
	  New file for tracking developers interested in assisting with 
	  Subversion GUIs and related topics.  

2001-07-12 19:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.31):

	Update status.  

2001-07-12 19:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.21):

	(window_handler): Finish documenting, clarify comments.  
	(rep_read_range): Clarify comment.  
	(svn_fs__rep_deltify): Protect against cycles.  

2001-07-12 16:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/variance-adjusted-patching.html (1.1),
	notes/variance-adjusted-patching.html (1.3):

	Moved this document from notes/ to www/.  

2001-07-12 15:13  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/reps-strings.c (1.20), tests/fs-helpers.h
	(1.5), tests/libsvn_fs/fs-test.c (1.91):

	* libsvn_fs/reps-strings.c 
	
	  (svn_fs__rep_deltify): Enable deltification for all the world to 
	  use.  Confidence or stupidity -- you be the judge.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (validate_revisions): New helper function.  
	
	  (check_all_revisions): New test function.  
	
	  (test_funcs): Added reference to new test check_all_revisions().  
	
	* tests/fs-helpers.h 
	
	  Minor docstring correction.  

2001-07-12 14:06  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/: fs-helpers.c (1.7), fs-helpers.h (1.4),
	libsvn_repos/repos-test.c (1.5):

	Some little changes to assist in forthcoming test cases.  
	
	* fs-helpers.c 
	
	  (svn_test__txn_script_exec): Use new command codes, support fs copy.  
	
	* fs-helpers.h 
	
	  (svn_test__txn_script_command_t): Redefine command codes (adding 
	  support for "copy"), rename CONTENTS to PARAM1.  
	
	* libsvn_repos/repos-test.c 
	
	  Changed use of command codes in svn_test__txn_script_command_t 
	  arrays throughout.  

2001-07-12 10:59  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/reps-strings.c (1.19), tests/fs-helpers.c
	(1.6), tests/libsvn_fs/fs-test.c (1.90):

	Hey, hey -- does this mean that deltified storage is all good?! 
	Future commits of test cases will be the judge...  
	
	* libsvn_fs/reps-strings.c 
	
	  (window_handler): Fix off-by-one error in window relevance check, 
	  couple of other small (yet significant) bugs.  
	
	  (svn_fs__rep_deltify): Keep the database clean when not deltifying.  
	
	* tests/fs-helpers.c 
	
	  (validate_tree_entry): Changed argument list to take PATH and 
	  CONTENTS instead of svn_test__tree_entry_t *ENTRY.  
	
	  (svn_test__validate_tree): Make this function give much more details 
	  about any problems it finds while validating repository trees.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (check_old_revisions): Added another small test sub-case.  

2001-07-11 15:38   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/clients/cmdline/: cl.h (1.8), main.c (1.9):

	Rename --setlocale to --locale.  (Branko said I could paint the bike
	shed this color.) 

2001-07-11 10:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* build.conf (1.21):

	Add commit_tests.py to `make check`.  

2001-07-11 09:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: commit_tests.py (1.2),
	svntest/actions.py (1.3), svntest/tree.py (1.5):

	
	* commit_test.py (nested_dir_replacements):  new regression test for
	bug #391 
	
	* actions.py (path_index):  new utility func for hash-like lookup.  
	
	* tree.py (attribute_merge, SVNTreeNode.add_child): allow tree-node 
	  attributes to "stack" and create new values.  (i.e. "Deleting" + 
	  "Adding" ==&gt; "Replacing") 

2001-07-10 21:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.18):

	Grammar and wording fix.  

2001-07-10 21:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.17):

	More undeltification work, very close now: 
	
	Note: to debug this code, you have to toggle deltification on, see
	the end of svn_fs__rep_deltify().  Toggling it on will cause some
	fs-tests to fail, most notably fs-test 26, check_old_revisions().  
	
	Mike Pilato, Brane, and anyone else, feel free to rip into this
	stuff.  I will be effectively out of this code for a couple of days,
	so I'll just see what you did when I go back to it on Friday.  
	
	* reps-strings.c: Fix long explanatory comment; #include assert.h.  
	(window_handler): Changed some field names, added new fields.  
	(window_handler_baton_t): Progress.  
	(rep_read_range): Set up new fields in baton.  Prototype early in
	the file.  

2001-07-10 20:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.16):

	* reps-strings.c (window_handler_baton_t, window_handler): New
	struct and func, respectively.  In progress.  
	(rep_read_range): Parse svndiff data, using above handler and
	struct.  
	(write_string): Remove old debugging check.  
	(ACTUALLY_DO_DELTIFICATION): Remove this #define, see below.  
	(svn_fs__rep_deltify): Just mark out deltification with #if 0, see 
	above.  

2001-07-10 19:55   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/clients/cmdline/: cl.h (1.7), main.c (1.8):

	Added option --setlocale. For now, the initial locale at program
	start-up remains "C", but using this option actually does change the
	locale. Later on, when `svn' becomes localisable, we should set the
	locale from the environment at start-up.  
	
	* clients/cmdline/cl.h (svn_cl__longopt_t): New enumerator 
	svn_cl__setlocale_opt.  
	* clients/cmdline/main.c (main): Handle option --setlocale.  

2001-07-10 18:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/reps-strings.c (1.15),
	libsvn_fs/reps-strings.h (1.15), libsvn_fs/structure (1.49),
	tests/libsvn_fs/fs-test.c (1.89):

	Prepare for undeltification code, but keep the switch points 
	conditioned out with `ACTUALLY_DO_DELTIFICATION', a #define which
	was introduced in the previous commit (rev 1.14 of reps-strings.c),
	but which Mike and I forgot to mention in that log message. 
	Remaining undeltification work is now isolated to one case in
	rep_read_range().  
	
	* structure: Describe new SIZE field in DELTA representations.  
	
	* reps-strings.c: (svn_fs__rep_deltify): Record the fulltext size.  
	Also, build the checksum the way `structure' says to; Mike and I
	both missed this one when we were tandem coding earlier today.  
	(svn_fs__rep_contents_size): Get size from delta reps too.  
	(rep_write): Error if reach delta case, since that "can't happen".  
	(rep_read_range): Expand delta case in preparation for code.  
	(svn_fs__rep_contents): Rewrite to handle all cases.  
	(string_key): Return error, so can complain usefully if see 
	non-svndiff delta.  All callers changed.  
	(make_mutable_fulltext_rep_skel): New helper func.  
	(svn_fs__get_mutable_rep): Handle the delta case; also, improve code 
	flow, and use above helper func.  
	(read_rep_args): Indentation fix.  
	
	* reps-strings.h (svn_fs__rep_contents): Doc fix.  
	(svn_fs__get_mutable_rep): Doc fix.  
	
	* fs-test.c (check_old_revisions): New test, can be expected to
	break if undeltification is implemented wrong.  
	(test_funcs): Add new test.  
	(commit_date): Fix cut-and-paste-o.  

2001-07-10 18:24   Joe Orton &lt;joe@light.plus.com&gt;

	* Makefile.in (1.21):

	Fix insanity. Run python tests in the appropriate subdirectory
	again, and remove need for the eval mess.  

2001-07-10 18:11   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/clients/cmdline/propset-cmd.c (1.4):

	Fix another svn-dev.el path.  

2001-07-10 18:11   Joe Orton &lt;joe@light.plus.com&gt;

	* Makefile.in (1.20):

	Minor cleanups for ChangeLog rules. Include ac-helpers directory in 
	changes tracked.  

2001-07-10 17:52   Joe Orton &lt;joe@light.plus.com&gt;

	* Makefile.in (1.19):

	* Makefile.in (check): Run any tests containing '.py' using
	configure python binary.  

2001-07-10 17:46   Joe Orton &lt;joe@light.plus.com&gt;

	* configure.in (1.102):

	* configure.in: Check for a "python2" binary then a "python" binary, 
	substitute as PYTHON into Makefile.  

2001-07-10 16:51   Joe Orton &lt;joe@light.plus.com&gt;

	* configure.in (1.101):

	* configure.in: Expand comment on passing down arguments to neon's 
	configure script.  

2001-07-10 15:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/cmdline/: cl.h (1.6), main.c (1.7),
	propdel-cmd.c (1.1), propset-cmd.c (1.3):

	Empower users of the command-line client with the ability to delete 
	properties with a new "propdel" subcommand.  Code by Joe Orton.  
	
	* clients/cmdline/main.c 
	
	  (svn_cl__cmd_table): Add subcommand info for "propdel".  
	
	* clients/cmdline/propset-cmd.c 
	
	  (svn_cl__propset): Don't worry about property deletions any more.  
	
	* clients/cmdline/cl.h 
	
	  (svn_cl__cmd_proc_t): Added svn_cl__propdel to list of command 
	  procedures.  
	
	* clients/cmdline/propdel-cmd.c 
	
	  New file for property deletion subcommand.  

2001-07-10 15:12  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* configure.in (1.100):

	* configure.in 
	
	  Changed use of $host_alias to $host.  Patch submitted by Mo DeJong.  

2001-07-10 13:06  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_delta.h (1.154),
	include/svn_error_codes.h (1.7), libsvn_delta/text_delta.c (1.36),
	libsvn_fs/node-rev.c (1.22), libsvn_fs/reps-strings.c (1.14):

	Implement checksums in deltification and bring FS deltification code 
	closer to actually working.  
	
	* include/svn_delta.h 
	
	  (svn_txdelta_md5_digest): New function prototype.  
	
	* include/svn_error_codes.h 
	
	  (SVN_ERR_DELTA_MD5_CHECKSUM_ABSENT): New error code.  
	
	* libsvn_delta/text_delta.c 
	
	  (struct svn_txdelta_stream_t):  Added MD5 stuffs.  
	
	  (svn_txdelta): Initialize MD5 processing.  
	
	  (svn_txdelta_md5_digest): New function.  
	
	  (svn_txdelta_next_window): Calculate MD5 digest "on-the-fly".  
	
	* libsvn_fs/reps-strings.c 
	
	  (svn_fs__rep_deltify): Prepare new representation skel.  Also, abort 
	  the deltification if the result will be a bigger chunk o' data
	  than what we started out with.  
	
	Unrelated bug fix: 
	
	* libsvn_fs/node-rev.c 
	
	  (deltify): Only call deltification functions when we know that we 
	  have a) something to deltify, and b) something to deltify against.  

2001-07-09 15:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.101):

	Fix bug #391.  Test coming soon.  
	
	* log.c (log_do_committed):  if a (R)eplaced directory contains any 
	  immediate children scheduled for deletion, then remove them from 
	  revision control.  

2001-07-07 17:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: reps-strings.c (1.13), reps-strings.h
	(1.14):

	Hide those parts of the representations code which no longer need to 
	be exposed: 
	
	* reps-strings.h, reps-strings.c (string_key): Replaces 
	svn_fs__string_key_from_rep, now static.  All callers changed.  
	(rep_read_range, rep_write): Just use string_key func.  
	(rep_is_mutable): Replaces svn_fs__rep_is_mutable, now static.  All 
	callers changed.  
	
	(svn_fs__get_mutable_rep, svn_fs__make_rep_immutable 
	svn_fs__delete_rep_if_mutable, svn_fs__rep_contents_size 
	svn_fs__rep_contents, svn_fs__rep_contents_read_stream 
	svn_fs__rep_contents_write_stream, svn_fs__rep_contents_clear, 
	svn_fs__rep_deltify): Doc and parameter name fixes.  

2001-07-07 17:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: node-rev.c (1.21), reps-strings.c (1.12),
	reps-strings.h (1.13):

	Move deltification code from node-rev.c to reps-strings.c.  Now only 
	representation code knows how deltified storage is done.  
	
	* reps-strings.h, reps-strings.c (svn_fs__rep_deltify): New func.  
	
	* node-rev.c (deltify): Call svn_fs__rep_deltify to do the real
	work.  

2001-07-07 16:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.18):

	(check): Make output more compact.  

2001-07-07 16:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.116), node-rev.c (1.20),
	reps-strings.c (1.11), reps-strings.h (1.12):

	Give the rep contents storage and retrieval functions consistent 
	names, to distinguish them from the stuff in reps-table.h.  
	
	* reps-strings.h, reps-strings.c: 
	(svn_fs__rep_contents_size): Replaces svn_fs__rep_size.  
	(svn_fs__rep_contents_read_stream): Replaces
	svn_fs__rep_read_stream.  
	(svn_fs__rep_contents_write_stream): Replaces
	svn_fs__rep_write_stream.  
	(svn_fs__rep_contents_clear): Replaces svn_fs__rep_clear.  
	
	All callers changed.  

2001-07-07 16:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.115), reps-strings.c (1.10),
	reps-strings.h (1.11):

	Finish converting dag.c over to the rep contents interface.  Now 
	nothing in dag.c touches a string directly -- all storage and 
	retrieval is done through the representations code.  
	
	* dag.c (svn_fs__dag_set_proplist, delete_entry, 
	svn_fs__dag_file_length, svn_fs__dag_set_contents): Use 
	representations interface instead of manipulating strings directly.  
	
	* reps-strings.h, reps-strings.c (svn_fs__rep_size): New func.  
	(svn_fs__rep_contents): Replaces svn_fs__string_from_rep(), now
	takes a rep key instead of rep skel.  All callers changed.  

2001-07-07 16:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.88):

	Removed exclamation points from test descriptions.  

2001-07-07 15:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.114), reps-strings.c (1.9),
	reps-strings.h (1.10), structure (1.48):

	* reps-strings.h, reps-strings.c (svn_fs__rep_clear): New func.  
	(svn_fs__string_key_from_rep): Handle delta case.  
	
	* dag.c (set_entry): Use only the rep-writing interface, don't touch 
	any strings directly.  

2001-07-07 14:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/getdate.y (1.3):

	Get rid of "function declaration isn't a prototype" warnings: 
	
	(ToSeconds, Convert, DSTcorrect, RelativeDate, RelativeMonth, 
	LookupWord, difftm, svn_parse_date, main): Use ANSI prototypes.  

2001-07-07 06:17   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/clients/cmdline/: diff-cmd.c (1.3), diff.c (1.4),
	import-cmd.c (1.4), propget-cmd.c (1.3), proplist-cmd.c (1.4),
	props.c (1.5), status-cmd.c (1.3), status.c (1.4), update-cmd.c
	(1.5), util.c (1.5):

	Fix more svn-dev.el locations.  

2001-07-07 06:15   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/clients/cmdline/: add-cmd.c (1.3), checkout-cmd.c
	(1.4), commit-cmd.c (1.5), delete-cmd.c (1.3), feedback.c (1.3),
	help-cmd.c (1.3), trace-commit.c (1.5), trace-update.c (1.5):

	Fix svn-dev.el locations.  

2001-07-07 06:03   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_subr/getdate.y (1.2):

	Fix the most of the warnings.  
	
	* getdate.y: Make prototypes proper ANSI prototypes, and constify
	some strings.  

2001-07-07 05:39   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/clients/cmdline/props.c (1.4):

	* props.c: Fix comment.  

2001-07-07 05:35   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/clients/cmdline/proplist-cmd.c (1.3):

	* proplist-cmd.c: Fix comment.  

2001-07-06 18:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.30):

	Adjust bar widths.  

2001-07-06 18:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.29):

	Edit for recent status.  

2001-07-06 18:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.113), dag.h (1.45), node-rev.c
	(1.19), reps-strings.c (1.8), reps-strings.h (1.9), tree.c (1.79):

	Hide the hideable parts of the rep/string reading and writing 
	interfaces, expose only the streams.  Again, in preparation for
	making dag.c respect the representation boundary and stop
	manipulating strings on its own: 
	
	* reps-strings.h, reps-strings.c (svn_fs__rep_read_stream, 
	svn_fs__rep_write_stream): New funcs.  
	
	Old public interface now strictly internal to reps-strings.c: 
	
	   (rep_read_baton):        replaces   struct svn_fs__rep_read_baton_t 
	   (rep_read_get_baton):    replaces   svn_fs__rep_read_get_baton 
	   (rep_read_contents)      replaces   svn_fs__rep_read_contents 
	   (rep_write_baton):       replaces   svn_fs__rep_write_baton_t 
	   (rep_write_get_baton):   replaces   svn_fs__rep_write_get_baton 
	   (rep_write_contents):    replaces   svn_fs__rep_write_contents 
	
	* node-rev.c (deltify): Use above new interface.  
	
	* dag.c (svn_fs__dag_get_contents): Same.  
	
	Unrelated: fix pool lifetime issue: 
	
	* dag.c, dag.h (svn_fs__dag_get_contents): Take a pool, allocate the 
	returned stream in it.  
	
	* tree.c (file_contents_baton_t): New `pool' field.  
	(svn_fs_file_contents): Store pool in baton.  
	(txn_body_get_file_contents): Pass pool along to 
	svn_fs__dag_get_contents().  
	(txn_body_get_mutable_source_stream): Same.  
	
	* svn_fs.h (svn_fs_file_contents): Remove note from doc string.  
	
	Also unrelated: 
	
	(svn_fs__rep_write_contents): Doc fix.  

2001-07-06 18:12   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/commit.c (1.59):

	Fix some code formatting, no functional change.  

2001-07-06 17:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error_codes.h (1.6), libsvn_fs/dag.c
	(1.112), libsvn_fs/node-rev.c (1.18), libsvn_fs/reps-strings.c
	(1.7), libsvn_fs/reps-strings.h (1.8):

	Make a generic rep/string writing interface, to match the one
	offered by svn_fs__rep_read_contents() and friends.  This is part of
	isolating all deltification/undeltification knowledge into the
	representations code, so it doesn't clutter up dag.c, node-rev.c,
	etc: 
	
	* svn_error_codes.h (svn_errno_t): Add SVN_ERR_FS_REP_NOT_MUTABLE.  
	
	* reps-strings.h (svn_fs__rep_write_baton_t): New struct.  
	(svn_fs__rep_write_get_baton): New func, constructor for above.  
	(svn_fs__rep_write_contents): New func, svn_write_fn_t.  
	(rep_write, txn_body_write_rep): New funcs.  
	
	* dag.c (set_entry): Use above new interface to initialize the
	entries list.  This is the first step of a larger change to replace
	all direct string writes here.  
	
	Unrelated: 
	
	* reps-strings.h (svn_fs__rep_read_contents): Doc fix.  
	
	* node-rev.c (write_string): Remove printf.  

2001-07-06 17:44   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/commit.c (1.58):

	Commit the right file this time.  
	
	* commit.c: (resource_baton_t): Use a table for name/value pairs of 
	properties to change, and an array for properties to delete.  
	(record_prop_change):  Take resource baton, modify array and table 
	appropriately.  (do_setprop): New function.  (do_proppatch): Take a 
	resource baton, build up the PROPPATCH body appropriately and
	dispatch the request.  (all callers modified) 

2001-07-06 17:34   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/props.c (1.8):

	Revert back to rev1.6 of props.c.  

2001-07-06 17:24   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/: props.c (1.7), ra_dav.h (1.30):

	Add support for setting properties. The namespace SVN:custom is used
	for property names. (Deleting properties is untested) 
	
	* ra_dav.h: Add a pool to the svn_ra_dav_resource_t.  
	
	* commit.c: (resource_baton_t): Use a table for name/value pairs of 
	properties to change, and an array for properties to delete.  
	(record_prop_change):  Take resource baton, modify array and table 
	appropriately.  (do_setprop): New function.  (do_proppatch): Take a 
	resource baton, build up the PROPPATCH body appropriately and
	dispatch the request.  (all callers modified) 

2001-07-06 16:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.111):

	(set_entry): Remove useless assert(), in preparation for new 
	rep-writing interface.  

2001-07-06 16:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.h (1.7):

	(svn_fs__get_mutable_rep): Doc fix.  

2001-07-06 16:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/node-rev.c (1.17):

	(deltify): Remove spurious comment.  

2001-07-06 16:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.110), node-rev.c (1.16),
	reps-strings.c (1.6), reps-strings.h (1.6):

	Write svndiffs into the strings table, but don't hook them up to 
	representations yet: 
	
	* node-rev.c (write_string_baton, write_string): New struct and 
	svn_write_fn_t func, respectively.  
	(deltify): Write deltified data to new target string.  
	
	* reps-strings.c (svn_fs__rep_read_get_baton): Return the baton.  
	
	* reps-strings.h (svn_fs__get_mutable_rep): Doc fix.  
	
	In the You've-Got-To-Be-Kidding-Me-Right? Department: 
	
	* dag.c (svn_fs__dag_set_contents): Fix confusion between rep keys
	and string keys.  You're not going to *believe* the bug that was
	latent here: 
	
	The fs tests have been passing only because, by sheer coincidence, 
	they always created exactly the same number of reps and strings, and 
	did so in such a way that new rep keys were always the same as the
	new strings to which the reps referred.  Thus, even though this
	function got a rep key ... mistook it for a string key and wrote
	data to that string ... then innocently stored the rep key in the
	node revision ... everything still worked, because the rep and
	string happened to be a matching pair anyway! 
	
	It all fell apart when deltify() finally started writing svndiff
	data into new strings.  Even though the code was not "hooked up" and
	those new strings were not yet referred to by any representations,
	merely creating them was enough to throw the correspondence off, so
	files contents started being randomly wrong.  Whew.  

2001-07-06 15:54   Joe Orton &lt;joe@light.plus.com&gt;

	* STACK (1.93):

	Stuff I'm working on.  

2001-07-06 13:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.99):

	Patch to fix builddir != srcdir, from Mo DeJong
	&lt;mdejong@cygnus.com&gt;.  

2001-07-06 12:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/node-rev.c (1.15):

	(deltify): Code rearrangement, plus remember to initialize
	variables.  
	
	This probably fixes issue #410; Ben will confirm before closing the 
	issue, however.  

2001-07-06 12:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: reps-table.c (1.5), strings-table.c
	(1.11):

	Note code affected by issue #409.  

2001-07-06 11:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/dav_setup.txt (1.8):

	Updating & modernizing the Subversion Server HOWTO.  

2001-07-06 10:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* autogen.sh (1.43):

	Add pointer to dav_setup.txt, to avoid developer confusion.  

2001-07-05 16:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.109), node-rev.c (1.14),
	reps-strings.c (1.5), reps-strings.h (1.5):

	* reps-strings.h, reps-string.c (svn_fs__rep_read_baton_t): Moved 
	structure definition into .c file, type in header is now just a 
	forwarding declaration.  
	(svn_fs__rep_read_get_baton): New func.  
	
	* dag.c (svn_fs__dag_get_contents): Use above new constructor func.  
	
	* node-rev.c (deltify): Get delta windows.  

2001-07-05 16:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.88):

	(svn_fs_file_contents): Note concern in doc string.  

2001-07-05 16:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: commit_tests.py (1.1),
	svntest/actions.py (1.2), svntest/main.py (1.4):

	
	* commit_tests.py:  new suite of commit tests, testing 
	  anchor/targets.  not finished, but we're ready to write them now 
	  when Mike P. gets back.  
	
	* svntest/main.py:  stop specifying exact svn binary;  use the one
	in $PATH.  
	
	* actions.py (run_and_verify_status):  don't pass `None' args to 
	  compare trees.  

2001-07-05 15:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.108):

	(svn_fs__dag_get_contents): Clarifying comment.  

2001-07-05 13:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error_codes.h (1.5), libsvn_fs/dag.c
	(1.107), libsvn_fs/libsvn_fs.dsp (1.14), libsvn_fs/node-rev.c
	(1.13), libsvn_fs/node-rev.h (1.11), libsvn_fs/nodes-table.c
	(1.22), libsvn_fs/nodes-table.h (1.11), libsvn_fs/reps-strings.c
	(1.4), libsvn_fs/reps-strings.h (1.4):

	Take the file reading code from dag.c, generalize it to do generic 
	representation reading, and put it in reps-strings.[ch].  Prepare to 
	use the newly generalized code in the now-resurrected files 
	node-rev.[ch], as part of deltification: 
	
	* svn_error_codes.h (svn_errno_t): New, more general error 
	SVN_ERR_FS_REP_CHANGED replaces SVN_ERR_FS_FILE_CONTENTS_CHANGED.  
	
	* dag.c (NR_HEADER, NR_PROP_KEY, NR_DATA_KEY, HDR_KIND, HDR_REV): 
	Moved to resurrected node-rev.h and renamed.  All callers changed.  
	(file_content_baton_t, read_file_contents_args, 
	txn_body_read_file_contents, read_file_contents): Moved to 
	reps-strings.h and reps-strings.c, there to be renamed and tweaked.  
	All callers changed.  
	(svn_fs__dag_get_contents): Set the new `trail' field to null in the 
	svn_fs__rep_read_baton_t, which was formerly a file_content_baton_t.  
	
	* reps-strings.h, reps-strings.c: 
	(svn_fs__rep_read_baton_t): New name for `file_content_baton_t'.  
	(svn_fs__rep_read_contents): New name for `read_file_contents'.  If 
	received a trail, use it, otherwise do svn_fs__retry_txn() as
	before.  
	(rep_read_range): Replaces svn_fs__rep_read_range, now static.  
	
	* nodes-table.c, nodes-table.h (svn_fs__create_node, 
	svn_fs__create_successor, deltify, svn_fs__stable_node, 
	svn_fs__delete_node_revision): Moved to node-rev.c, node-rev.h, see 
	below.  
	
	* node-rev.c, node-rev.h: Resurrected these files: 
	
	* node-rev.h (SVN_FS__NR_HEADER, SVN_FS__NR_PROP_KEY, 
	SVN_FS__NR_DATA_KEY, SVN_FS__NR_HDR_KIND, SVN_FS__NR_HDR_REV): 
	Accessor macros moved here from dag.c.  
	
	* node-rev.c (deltify): Take new `fs' parameter; caller changed.  
	Finish, but leave deactivated while we finish undeltification.  
	
	* libsvn_fs.dsp: Notice node-rev.c and node-rev.h again.  

2001-07-05 12:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.106):

	(svn_fs__dag_get_contents): Use the NR_DATA_KEY accessor macro.  

2001-07-05 10:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.28):

	Fix broken link.  

2001-07-04 15:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_tasks.html (1.5):

	Fix bad html comment termination.  

2001-07-04 15:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.87), libsvn_fs/id.c (1.27),
	libsvn_fs/nodes-table.c (1.21):

	Deltification code path: 
	
	* svn_fs.h, id.c (svn_fs_predecessor_id): New func.  
	
	* nodes_table.c (deltify): New func, incomplete.  
	(svn_fs__stable_node): Call deltify() on the predecessor of the
	stable node.  

2001-07-04 15:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/clients/cmdline/main.c (1.6):

	Cast parameter to svn_parse_date() to avoid warning; see issue #408.  

2001-07-04 15:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_tasks.html (1.4):

	Add new task.  

2001-07-04 14:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.47):

	Slight clarification.  

2001-07-04 14:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_tasks.html (1.3):

	Add new task.  

2001-07-04 14:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_tasks.html (1.2):

	Don't include image.  

2001-07-04 14:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/: index.html (1.30), project_nav.html (1.9),
	project_tasks.html (1.1):

	New task list page, plus links to it.  

2001-07-04 13:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.27):

	Update milestones based on new information about resource
	scheduling.  

2001-07-04 08:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/txn.c (1.44), svnadmin/main.c (1.15),
	tests/libsvn_fs/fs-test.c (1.87):

	
	* libsvn_fs/txn.c (svn_fs_begin_txn): automatically put a datestamp 
	  property on newly created transactions.  This will help admin 
	  identify long-abandoned txns that may need to be hand-removed. 
	  When a txn is promoted to a revision, this property will be
	  automatically overwritten with a revision datestamp.  
	
	* svnadmin/main.c (main):  make `lsrevs' print revision datestamps.  
	                           make `lstxn' print transaction
	                           datestamps.  
	
	* fs_test.c (transaction_props):  make fs-test #13 pass, by telling
	  it to expect a datestamp among the properties.  

2001-07-04 07:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* autogen.sh (1.42), subversion/clients/cmdline/checkout-cmd.c
	(1.3), subversion/clients/cmdline/cl.h (1.5),
	subversion/clients/cmdline/main.c (1.5),
	subversion/clients/cmdline/update-cmd.c (1.4),
	subversion/include/svn_client.h (1.36),
	subversion/include/svn_error_codes.h (1.4),
	subversion/include/svn_ra.h (1.62), subversion/include/svn_repos.h
	(1.15), subversion/include/svn_time.h (1.2),
	subversion/libsvn_client/checkout.c (1.20),
	subversion/libsvn_client/update.c (1.21),
	subversion/libsvn_fs/dag.c (1.105),
	subversion/libsvn_ra_dav/fetch.c (1.62),
	subversion/libsvn_ra_dav/ra_dav.h (1.29),
	subversion/libsvn_ra_dav/session.c (1.29),
	subversion/libsvn_ra_local/ra_plugin.c (1.38),
	subversion/libsvn_repos/rev_hunt.c (1.2),
	subversion/libsvn_subr/getdate.y (1.1):

	Add date-parsing to subversion, and the ability to checkout or
	update using dates.  (`svn co URL -D 17-03-2001' or `svn up -D last
	tuesday') 
	
	* getdate.y:  a parser of human-readable dates.  stolen from CVS
	              (code is public domain, no copyright.)  slightly tweaked.  
	
	* autogen.sh:  invoke bison or yacc to produce getdate.c 
	
	* svn_time.h (svn_parse_date):  declare API in getdate.y 
	
	* dag.c (txn_body_dag_init_fs):  put a datestamp on revision 0, too! 
	
	* rev_hunt.c: (svn_repos_dated_revision): add boundary checks.  
	
	* svn_ra.h (get_dated_revision):  new RA vtable routine.  
	
	* libsvn_ra_local/ra_plugin.c (get_dated_revision):  implement as a 
	  simple pass-through to svn_repos_dated_revision().  
	
	  (ra_local_plugin):  add get_dated_revision.  
	
	* libsvn_ra_dav/fetch.c (svn_ra_dav__get_dated_revision): dummy
	  func, to be marshalled over network later.  
	
	  ra_dav.h (svn_ra_dav__get_dated_revision):  declare.  
	
	  session.c (dav_plugin):  add svn_ra_dav__get_dated_revision.  
	
	* svn_repos.h (svn_repos_dated_revision):  change `time' var to
	`tm'.  
	
	* main.c (main):  add -D flag.  (wow!  how often do we get to edit
	main()?) 
	
	* cl.h (svn_cl__opt_state_t):  add 'date' field.  
	
	* svn_error_codes.h (SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS):  new
	error.  
	
	* svn_client.h, checkout.c (svn_client_checkout):  add time field! 
	
	* checkout-cmd.c (svn_cl__checkout):  pass date to
	svn_client_checkout() 
	
	* svn_client.h, update.c (svn_client_update):  add time field! 
	
	* update-cmd.c (svn_cl__update):  pass date to svn_client_update() 

2001-07-04 02:32   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_subr/time.c (1.3), tests/libsvn_fs/fs-test.c
	(1.86):

	Fix even more timestamp breakage -- make sure we read what we wrote.  
	We were usiing %03d to print/scan the tm_usec field and, while
	(apr_p)sprintf will expand the field to print all significant
	digits, it seems sscanf was confused.  
	
	This should really, finally fix issue 404.  
	
	* libsvn_subr/time.c (timestamp_format): Use %06d for tm_usec.  
	* tests/libsvn_fs/fs-test.c (commit_date): Remove the #if 0 and
	comment.  

2001-07-03 15:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_repos.h (1.14), libsvn_repos/rev_hunt.c
	(1.1):

	
	* svn_repos.h (svn_repos_dated_revision):  declare.  
	
	* rev_hunt.c (svn_repos_dated_revision):  implement, with helper.  

2001-07-03 15:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.26):

	Make milestone dates fall on weekdays.  

2001-07-03 14:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.25):

	Update dates to be more conservative (and therefore more reliable).  

2001-07-03 14:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/alpha-checklist.txt (1.2):

	Update based on recent progress.  

2001-07-03 14:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: alpha-checklist.txt (1.1), alpha_short (1.9):

	Renamed alpha_short to alpha-checklist, as we always planned to.  

2001-07-02 16:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.46):

	Note about the one-to-one mapping of reps to strings.  

2001-07-02 16:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.12):

	Remove obsolete stuff.  

2001-07-02 16:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/time.c (1.2):

	Mention the APR dev discussions between Branko and David Reid in the 
	comment here, for context.  

2001-07-02 15:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_time.h (1.1), include/svn_types.h
	(1.64), libsvn_fs/dag.c (1.104), libsvn_fs/rev-table.c (1.16),
	libsvn_fs/rev-table.h (1.8), libsvn_subr/time.c (1.1),
	libsvn_wc/entries.c (1.110), libsvn_wc/local_changes.c (1.33),
	libsvn_wc/questions.c (1.55), libsvn_wc/wc.h (1.153),
	tests/libsvn_fs/fs-test.c (1.85):

	Librarize the time/date helpers that used to live in libsvn_wc. 
	They are now part of libsvn_subr: 
	
	* wc.h, local_changes.c (svn_wc__time_to_string, 
	svn_wc__string_to_time): Moved to the new svn time library below.  
	
	* svn_time.h, time.c: New files.  
	(svn_time_from_string, svn_time_to_string): Replace 
	svn_wc__string_to_time and svn_wc__time_to_string respectively, all 
	callers changed.  
	
	Record the date of each commit, as requested by Ben: 
	
	* rev-table.h, rev-table.c (svn_fs__set_rev_prop): New func.  
	
	* rev-table.c (txn_body_change_rev_prop): Just call above new func.  
	
	* svn_types.h (SVN_PROP_REVISION_DATE): New #define.  
	
	* fs-test.c: #include apr_time.h and svn_time.h.  
	(commit_date): New test.  
	(test_funcs): Add it.  
	(revision_props, transaction_props): Allow the presence of other 
	revision properties.  

2001-07-02 15:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/basic_tests.py (1.2):

	* basic_tests.py:  auto-generate more intelligible names for each 
	test's repository and working copy.  

2001-07-02 14:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_path.h (1.39):

	Use SVN_PATH_H, not SVN_PATHS_H.  

2001-07-02 12:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* build.conf (1.20):

	* build.conf:  tell `make check` the new name of our python tests.  

2001-07-02 12:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: README (1.7), basic_tests.py
	(1.1), local_tests.py (1.19), svntest/__init__.py (1.3),
	svntest/actions.py (1.1), svntest/main.py (1.3), svntest/tree.py
	(1.4):

	Big reorganization of python test suite.  Move most of the testing
	API out of local_tests.py and into the `svntest' module.  This will
	make it easier to test ra_dav and xml access someday -- since all
	but one function are inspecific to ra_local already.  
	
	* svntest/actions.py:   the big API calls live here now.  
	
	* svntest/main.py:   inherit some globals from local_tests.py 
	
	* svntest/__init__.py:  add actions.py 
	
	* basic_tests.py:  renamed from `local_tests.py'.  Change all calls 
	  into svntest module -- svntest.actions.*() 
	
	* README:  keep our documentation up-to-date.  :-) 

2001-07-02 12:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error_codes.h (1.3), libsvn_fs/dag.c
	(1.103), libsvn_fs/reps-strings.c (1.3), libsvn_fs/reps-strings.h
	(1.3), libsvn_fs/structure (1.45):

	Make the world safe for deltification.  Now background deltification 
	will not interfere with file content reading, because we re-read the 
	representation each time we access the contents.  If the file gets 
	deltified, the representation will simply be different on the next 
	fetch, which is fine -- that's why we have reps in the first place.  
	
	* reps-strings.h, reps-strings.c (svn_fs__rep_read_range): Take a
	rep key instead of a rep skel.  
	
	* dag.c (file_content_baton_t): Store a rep key, instead of a rep
	skel.  
	(txn_body_read_file_contents): Use a rep key instead of a rep skel. 
	Better error checking.  Document.  
	(svn_fs__dag_get_contents): Store rep key into baton, not rep skel.  
	
	* svn_error_codes.h (svn_errno_t): New error
	SVN_ERR_FILE_CONTENTS_CHANGED.  
	
	* structure: Update for above.  

2001-07-02 12:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/proplist.h (1.8):

	(svn_fs__get_prop): Doc fix.  

2001-07-02 11:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.153), include/svn_fs.h
	(1.86), include/svn_wc.h (1.103), libsvn_fs/proplist.h (1.7):

	* svn_fs.h (svn_fs_revision_prop): Note issue #406.  
	(svn_fs_revision_proplist): Same as above, plus doc fix.  
	
	* svn_delta.h (svn_prop_t, svn_delta_edit_fns_t): Note issue #406.  
	
	* svn_wc.h (svn_wc_get_prop, svn_wc_set_prop): Note issue #406.  
	(svn_wc_prop_list): Same as above, plus doc fix.  
	
	* proplist.h (svn_fs__get_prop): Note issue #406.  
	(svn_fs__make_prop_hash): Same as above, plus doc fix.  

2001-07-02 11:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.102):

	* dag.c (NR_HEADER, NR_PROP_KEY, NR_DATA_KEY, HDR_KIND, HDR_REV): 
	Paranoid parenthesization.  

2001-06-30 04:55   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_wc/local_changes.c (1.32):

	I hope this clears up issue 404.  
	
	* libsvn_wc/local_changes.c (svn_wc__string_to_time): Use
	apr_implode_gmt instead of apr_implode_time.  

2001-06-29 15:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/win32/svn_com/: SVN.cpp (1.7), StdAfx.h (1.3):

	What the heck...may as well get SVN-COM building in Windows, too...  
	
	* subversion/clients/win32/svn_com/SVN.cpp 
	
	  Some minor fixes throughout to get this to build.  
	
	* subversion/clients/win32/svn_com/StdAfx.h 
	
	  Include svn_pools.h now.  

2001-06-29 15:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: local_tests.py (1.18),
	svntest/main.py (1.2), svntest/tree.py (1.3):

	Fix a design flaw in our python trees.  
	
	* tree.py: (SVNTreeNode): extend class to contain *two* distinct 
	  hashes.  "props" are now actual subversion properties, while
	  "atts" holds the status information we've been using all along to
	  parse commandline output.  
	
	  (compare_file_nodes):       update accordingly.  
	  (create_from_path):         update accordingly.  
	  (build_generic_tree):       update accordingly.  
	  (build_tree_from_checkout): update accordingly.  
	  (build_tree_from_commit):   update accordingly.  
	  (build_tree_from_status):   update accordingly.  
	
	* main.py (greek_tree):  update accordingly.  
	
	* local_tests.py 
	
	  (get_virginal_status_list):   update accordingly.  
	  (make_repo_and_wc):           update accordingly.  
	  (guarantee_greek_repository): update accordingly.  
	  (basic_commit):               update accordingly.  
	  (commit_one_file):            update accordingly.  
	  (commit_multiple_targets):    update accordingly.  
	  (commit_mulitple_targets2):   update accordingly.  
	  (basic_update):               update accordingly.  
	  (basic_merge):                update accordingly.  
	  (basic_conflict):             update accordingly.  

2001-06-29 13:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* Makefile.in (1.17), build.conf (1.19),
	subversion/tests/clients/cmdline/xmltests/svn-test.sh (1.2),
	subversion/tests/clients/cmdline/xmltests/svn-test2.sh (1.2):

	Finish cleanup of `make check` rule, as per older email discussion.  
	
	* svn-test.sh, svn-test2.sh:  stop requiring a $srcdir argument.  
	
	* Makefile.in (check):  stop passing $srcdir to every single test.  
	
	* build.conf:  update with new locations of xml test scripts.  
	
	(As I mentioned before, nobody freak over this please.  We don't
	have vpath builds working yet, and these xml-scripts will be
	converted to python soon anyway.) 

2001-06-29 13:46  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.101), structure (1.44):

	Mike and Karl whipping up on revision numbers and flags in 
	NODE-REVISION skels.  
	
	* libsvn_fs/structure 
	
	  Generally updated to reflect changes to the NODE-REVISION skels.  
	  Namely, there is now a REV item in the header, and there are no 
	  FLAGs.  
	
	* libsvn_fs/dag.c 
	
	  (HDR_FLAGS): ...is no more.  
	
	  (node_rev_is_mutable): Replaces (with some edits) 
	  node_rev_has_mutable_flag.  All callers changed.  
	
	  (node_rev_make_mutable): Replaces (with some edits) 
	  node_rev_set_mutable_flag.  No longer takes a parent id or a pool.  
	
	  (make_node_immutable): Now takes a REV argument, and uses that to 
	  set the revision for the node (which indicates its freshly
	  acquired immutability).  
	
	  (stabilize_node): Now takes a REV argument (to pass to 
	  make_node_immutable).  
	
	  (svn_fs__dag_commit_txn): Call stabilize_node *after* acquiring the 
	  new revision number.  
	
	  (make_entry): Build the NODE-REVISION skels properly (no flags).  

2001-06-29 13:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: xml_tests.py (1.4),
	xmltests/.cvsignore (1.1), xmltests/svn-test.sh (1.1),
	xmltests/svn-test2.sh (1.1):

	
	* clients/cmdline/tests/:  nuke this directory and tests.  
	* tests/clients/cmdline/xmltests/:  move them over here.  

2001-06-29 13:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.17):

	Cleanup tmp_dir preemptively at startup.  This problem was causing 
	occasional what-looked-like-bugs.  

2001-06-29 12:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/get_editor.c (1.189),
	tests/clients/cmdline/local_tests.py (1.16),
	tests/clients/cmdline/svntest/tree.py (1.2):

	Task: get local_test.py #9 to pass, by exercising control over
	backup file names (from conflicts) and improving the way we detect
	them.  
	
	* get_editor.c (close_file):  when subversion invokes GNU `patch', 
	  force backup files to be prefixed with ".#" 
	
	* tree.py (compare_trees):  singleton_handler funcs now take batons.  
	
	  (default_singleton_handler):  take a baton.  
	
	* local_tests.py (basic_conflict): tweaky cleanup, formatting,
	comments.  
	
	  (detect_conflict_files): renamed (and completely rewritten) from 
	                           verify_rej_file().  
	
	  (extra_files):  no longer a global hash;  now local list.  
	
	  (basic_conflict):  pass extra_files as a baton to
	  detect_conflict_files.  
	
	  (run_and_verify_checkout):  take singleton batons.  
	  (run_and_verify_update):    take singleton batons.  
	  (run_and_verify_commit):    take singleton batons.  

2001-06-29 11:04  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.100):

	* libsvn_fs/dag.c 
	
	  (txn_body_dag_init_fs): Initialize root node to revision `0' (not 
	  `0.0' -- CVS what?) 
	
	  (make_entry): Updated docstring.  
	
	  (make_node_immutable): Oops -- missed opportunity for use of new 
	  accessor macros! 

2001-06-29 10:19  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.50):

	* subversion/libsvn_fs/fs.c 
	
	  (cleanup_fs): Don't forget to clean up our new tables.  

2001-06-29 09:48  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/libsvn_fs.dsp (1.13):

	Catching up the Windows build after the recent libsvn_fs branch
	merge.  
	
	* libsvn_fs.dsp 
	
	  (node-rev.c, convert-size.h, node-rev.h, revision.h): Removed from 
	  build.  
	
	  (reps-strings.c, reps-strings.h): Added to build.  

2001-06-28 19:12   Joe Orton &lt;joe@light.plus.com&gt;

	* configure.in (1.98):

	* configure.in: Fix ra_dav when --disable-shared isn't given (the 
	default).  neon now defaults to not building shared libraries, so
	force it to do whatever we do.  

2001-06-28 18:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.99), libsvn_fs/dag.h (1.44),
	libsvn_fs/err.c (1.30), libsvn_fs/fs.c (1.49), libsvn_fs/key-gen.c
	(1.3), libsvn_fs/node-rev.c (1.12), libsvn_fs/node-rev.h (1.10),
	libsvn_fs/nodes-table.c (1.20), libsvn_fs/nodes-table.h (1.10),
	libsvn_fs/proplist.c (1.12), libsvn_fs/reps-strings.c (1.2),
	libsvn_fs/reps-strings.h (1.2), libsvn_fs/reps-table.c (1.4),
	libsvn_fs/reps-table.h (1.4), libsvn_fs/strings-table.c (1.10),
	libsvn_fs/strings-table.h (1.10), libsvn_fs/structure (1.43),
	libsvn_fs/this-branch.txt (1.2), libsvn_fs/tree.c (1.78),
	libsvn_fs/txn.c (1.43), tests/libsvn_fs/strings-reps-test.c (1.9)
	(utags: postmerge_strings-reps-dev):

	Merged `strings-reps-dev' branch into trunk.  

2001-06-28 18:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, structure (strings-reps-dev.[18,2])
	(utags: strings-reps-dev-done):

	* dag.c (NR_HEADER, NR_PROP_KEY, NR_DATA_KEY, HDR_KIND, HDR_REV, 
	HDR_FLAGS): New macros.  Use them everywhere, instead of unpacking 
	node revision skels by hand.  
	
	* structure: Notes on deltification.  

2001-06-28 17:17   Joe Orton &lt;joe@light.plus.com&gt;

	* configure.in (1.97):

	* configure.in: Fix diffutils URL.  

2001-06-28 16:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.96), ac-helpers/gnu-diff.sh (1.1):

	* configure.in:  require (and locate) non-hacked version of GNU diff 

2001-06-28 16:17  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* svn_config.dsp (1.4),
	subversion/clients/cmdline/subversion_client.dsp (1.2),
	subversion/libsvn_client/libsvn_client.dsp (1.8),
	subversion/libsvn_fs/libsvn_fs.dsp (1.12,
	postmerge_strings-reps-dev, premerge_strings-reps-dev):

	Getting the Windows build up-to-date.  
	
	* svn_config.dsp 
	
	  (svn_private_config.h): Exclude this file from the build.  
	
	* subversion/clients/cmdline/subversion_client.dsp 
	
	  This got moved from another location.  
	
	* subversion/libsvn_client/libsvn_client.dsp 
	
	  (feedback.c): Added to Source Files 
	
	* subversion/libsvn_fs/libsvn_fs.dsp 
	
	  (convert-size.c): Remove.  
	
	  (key-gen.c, rep-table.c): Added to Source Files 
	
	  (key-gen.h, rep-table.h): Added to Header Files 

2001-06-28 13:43   Joe Orton &lt;joe@light.plus.com&gt;

	* configure.in (1.95):

	* configure.in: Get any extra libraries that neon needs from the 
	'neon-config' script and use these if building statically.  

2001-06-28 12:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (strings-reps-dev.17):

	(node_rev_has_mutable_flag): Got rid of last ### tweakit comment.  

2001-06-28 12:53   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/: include/svn_ra.h (1.61), libsvn_ra/ra_loader.c
	(1.9), libsvn_ra_dav/session.c (1.28), libsvn_ra_local/ra_plugin.c
	(1.37):

	Change RA interface to allow plugins to handle &gt;1 URL scheme.  
	
	* ra_loader.c (svn_ra_init_ra_libs): Pass through the scheme-&gt;plugin 
	hash table to the plugin's init function.  
	
	* svn_ra.h: Prototypes updated accordingly.  
	
	* ra_plugin.c (svn_ra_local_init): Updated accordingly.  
	
	* session.c (svn_ra_dav_init): Updated accordingly, and also support 
	https: URLs.  

2001-06-28 10:37  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/fs.c (tags: strings-reps-dev-done)
	(strings-reps-dev.1):

	* libsvn_fs/fs.c 
	
	  (svn_fs_open_berkeley): Hm.  We should probably remember to open the 
	  strings and representations tables as well.  

2001-06-27 21:39   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_wc/local_changes.c (1.31):

	Comment fixes.  

2001-06-27 21:03   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_wc/local_changes.c (1.30):

	Hopefully temporary fix for timestamp weirdness.  
	
	* libsvn_wc/local_changes.c (svn_wc__string_to_time): Adjust the
	time to take account of the time zone's GMT offset.  

2001-06-27 15:52  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/key-gen.c (tags: strings-reps-dev-done)
	(strings-reps-dev.1), tests/libsvn_fs/fs-test.c (1.84),
	tests/libsvn_fs/key-test.c (1.2):

	Yahoo!  All fs-test's now PASS! 
	
	* libsvn_fs/key-gen.c 
	
	  (svn_fs__next_key): Grr...freakin' OBO error wasting my whole day...  
	
	* tests/libsvn_fs/key-test.c 
	
	  (next_key): Added another test case to catch a stupid OBO error 
	  case.  

2001-06-27 14:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.94), ac-helpers/gnu-patch.sh (1.1):

	* configure.in:  require and locate a version of GNU patch.  

2001-06-27 11:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, tree.c (tags:
	strings-reps-dev-done) (strings-reps-dev.[16,3]):

	Chugging along, making the fs-test's pass.  Right now 17 and 24
	FAIL, and 20 SEGFAULTs.  
	
	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_file_length): Doh!  I can't *beLIEVE* I tried to check 
	  the length of a list skel with skel-&gt;len...  
	
	  (make_node_immutable): Add some segfault protection.  
	
	* libsvn_fs/tree.c 
	
	  Itty bitty formatting fix 

2001-06-26 20:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/strings-reps-test.c (tags:
	strings-reps-dev-done) (strings-reps-dev.3):

	Avoid newlines in string literals, as per Joe Orton's change to the 
	trunk on 2001-06-26 20:08, but use \n's to make sure the resulting 
	string still contains actual newlines where Mike Pilato had them.  
	
	This will conflict with Joe's change when we merge, but it'll be
	easy to resolve in favor of the branch.  

2001-06-26 20:29   Joe Orton &lt;joe@light.plus.com&gt;

	* PORTING (1.7):

	Tru64 5.0 update.  

2001-06-26 20:21   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/clients/cmdline/cl.h (1.4):

	* cl.h: Remove another trailing comma.  

2001-06-26 20:08   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/tests/libsvn_fs/strings-reps-test.c (1.8,
	premerge_strings-reps-dev):

	* strings-reps-test.c: Don't carry string literals over new-lines,
	Tru64 cc can't parse it.  

2001-06-26 20:05   Joe Orton &lt;joe@light.plus.com&gt;

	* Makefile.in (1.16):

	* Makefile.in (check): Carry on past test failures with non-GNU make 
	too. (I think this is useful behaviour since you get to see all the
	test results in front of you, even if some early ones fail) 

2001-06-26 19:55   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/tests/libsvn_subr/target-test.sh (1.5):

	* target-test.sh: Set $PWD explicitly, some shells don't update this 
	automatically. (e.g. Tru64 /bin/sh) 

2001-06-26 19:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, reps-strings.c (tags:
	strings-reps-dev-done), reps-strings.h (tags:
	strings-reps-dev-done) (strings-reps-dev.[15,4,4]):

	* reps-strings.h, reps-string.c (svn_fs__delete_rep_if_mutable): New 
	func.  
	
	* dag.c (svn_fs__dag_delete_if_mutable): Delete any mutable 
	representations referred to by this node, too.  
	
	Mike Pilato, this is my last commit for today.  If you want to code
	at home, or on the train coming to work tomorrow, don't worry about 
	conflicts with my stuff.  Tests 1-15 in fs-test.c pass now... and
	test 16 seg faults.  Good luck. :-) 

2001-06-26 19:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (strings-reps-dev.14):

	This fixes fs-test 15 ("delete mutable nodes from directories"): 
	
	* reps-strings.h, reps-string.c (svn_fs__make_rep_immutable): New 
	func.  
	
	* dag.c (delete_entry): Test for target's emptiness correctly.  
	(make_node_immutable): Immutate representations too.  Loop over
	header correctly.  Don't use a subpool, we don't need it anymore.  
	(svn_fs__dag_delete_if_mutable): Note necessary future work.  

2001-06-26 19:05   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_fs/fs.c (1.48, premerge_strings-reps-dev):

	* fs.c (cleanup_fs_db): Use pool-based allocation rather than
	alloca(), which isn't portable unless you jump through hoops.  

2001-06-26 18:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, reps-strings.c, reps-strings.h
	(strings-reps-dev.[13,3,3]):

	More work on fs-test 15 ("delete mutable nodes from directories"), 
	still not there: 
	
	* reps-strings.h, reps-string.c (svn_fs__make_rep_immutable): New 
	func.  
	
	* dag.c (make_node_immutable): Immutate representations too.  Loop
	over header correctly now.  Don't use a subpool, we don't need it 
	anymore.  

2001-06-26 18:49   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/include/svn_wc.h (1.102):

	* svn_wc.h: Remove trailing commas from enumerator list (kill
	warnings from Tru64 cc).  

2001-06-26 18:45   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.61):

	* fetch.c: Fix initializer syntax of report_head and report_tail.
	(don't know why gcc didn't notice this but Tru64 cc did) 

2001-06-26 18:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (strings-reps-dev.12):

	More debugging.  This does not completely fix test 15 ("delete
	mutable nodes from directories") in fs-test.c, but brings us closer: 
	
	* dag.c (find_dir_entry): Return previous entry too.  
	(dir_entry_from_node, set_entry): Call find_dir_entry correctly.  
	(delete_entry): Get a previous entry from find_dir_entry, use it.  
	Clear the old entries list, so we're overwriting, not appending.  
	Remember to use the SVN_ERR macro.  

2001-06-26 17:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c, libsvn_fs/proplist.c (tags:
	strings-reps-dev-done) (strings-reps-dev.[11,1]),
	tests/libsvn_ra_local/ra-local-test.c (1.12):

	More debugging.  Test 14 ("set and get some node properties") in 
	fs-test.c passes now: 
	
	* proplist.c (svn_fs__set_prop): Check value exists before adding a 
	new property.  
	
	* dag.c (svn_fs__dag_set_proplist): Remember to set the new rep key
	in the node revision, if created a new rep key.  Also, use 
	svn_fs__validate_proplist() instead of inline code, and return an 
	error if it's invalid, instead of calling abort().  
	(svn_fs__dag_get_proplist): Fetch the rep skel before using it.  
	
	Unrelated change: 
	
	* tests/libsvn_delta/ra-local-test.c: Make compilation warnings go 
	away.  This whole test is listed as "skip" in build.conf anyway.  

2001-06-26 16:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (strings-reps-dev.10):

	This fixes fs-test #8, reading and writing of files.  Now
	fs-test:1-13 are passing.  Test 14 seg faults, though. :-) 
	
	* dag.c (svn_fs__dag_get_contents): Handle non-existent reps by 
	setting the baton's rep skel to null.  This case covers files that 
	have never had contents.  
	(txn_body_read_file_contents): Handle null rep skel.  
	(file_content_baton_t): Document meaning of a null rep skel.  

2001-06-26 16:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/this-branch.txt (tags:
	strings-reps-dev-done) (strings-reps-dev.8):

	List `svn_fs__dag_set_contents' as done.  Now to debug everyone...  

2001-06-26 16:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/reps-strings.c, libsvn_fs/reps-strings.h,
	tests/libsvn_fs/strings-reps-test.c (strings-reps-dev.[2,2,2]):

	* reps-strings.h, reps-strings.c (svn_fs__get_mutable_rep): Handle 
	non-keys gracefully.  
	
	* tests/libsvn_fs/strings-reps-test.c (write_null_string): New test.  
	(test_funcs): Run new test.  

2001-06-26 15:24   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/session.c (1.27):

	* session.c (svn_ra_open): TLS upgrades are not yet useful.  

2001-06-26 15:17  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, this-branch.txt
	(strings-reps-dev.[9,7]):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_get_proplist): Safety first!  Added code for trivial
	  case.  
	
	  (svn_fs__dag_set_proplist): Converted this to use new reps/strings
	  stuff.  
	
	* this-branch.txt 
	
	  (svn_fs__dag_set_proplist): Completed.  

2001-06-26 15:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, this-branch.txt
	(strings-reps-dev.[8,6]):

	* dag.c (svn_fs__dag_set_contents): Use reps/strings code.  
	
	* this-branch.txt: note that these are done now: 
	     svn_fs__dag_get_contents 
	     read_file_contents (The latter was actually done in a previous
	commit).  

2001-06-26 15:08   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/util.c (1.6):

	* util.c (svn_ra_dav__parsed_request): ne_request_create cannot
	fail, no need to cope with NULL return value.  

2001-06-26 15:00   Joe Orton &lt;joe@light.plus.com&gt;

	* autogen.sh (1.41):

	* autogen.sh: Require neon 0.15.3.  

2001-06-26 14:59   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.57), fetch.c (1.60),
	merge.c (1.13), options.c (1.9), props.c (1.6), ra_dav.h (1.28),
	session.c (1.26), util.c (1.5):

	Updated to neon 0.15. s/(dav_|hip_|http_)/ne_/g 
	
	* props.c: Removed replacement propfind() implementation.  
	(svn_ra_dav__get_props): Use new PROPFIND API.  
	
	* util.c (svn_ra_dav__parsed_request): Take an integer fd rather
	than a FILE *: all callers changed. Pass the request body length to 
	ne_set_request_body_buffer.  
	
	Unrelated cleanup: 
	
	* session.c, util.c: Use apr_want.h.  

2001-06-26 14:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.c (1.1):

	file reps-strings.c was initially added on branch strings-reps-dev.  

2001-06-26 14:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-strings.h (1.1):

	file reps-strings.h was initially added on branch strings-reps-dev.  

2001-06-26 14:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c, libsvn_fs/dag.h (tags:
	strings-reps-dev-done), libsvn_fs/reps-strings.c,
	libsvn_fs/reps-strings.h, libsvn_fs/reps-table.c (tags:
	strings-reps-dev-done), libsvn_fs/reps-table.h (tags:
	strings-reps-dev-done), libsvn_fs/strings-table.c (tags:
	strings-reps-dev-done), libsvn_fs/strings-table.h (tags:
	strings-reps-dev-done), libsvn_fs/this-branch.txt,
	libsvn_fs/tree.c, tests/libsvn_fs/strings-reps-test.c
	(strings-reps-dev.[7,2,1,1,6,5,2,2,5,2,1]), include/svn_fs.h
	(1.85):

	Mike Pilato and I are not just on the same page, we are on the same 
	medulla oblongata: 
	
	* include/svn_fs.h (svn_fs_file_contents): Doc fix.  
	
	* libsvn_fs/tree.c (txn_body_get_mutable_source_stream): Doc fix.  
	(svn_fs_apply_textdelta): Add a note for the future.  
	
	* libsvn_fs/reps-strings.h, libsvn_fs/reps-strings.c: New files.  
	svn_fs__string_key_from_rep, svn_fs__string_from_rep, 
	svn_fs__get_mutable_rep, svn_fs__rep_is_mutable,
	rep_set_mutable_flag, rep_is_fulltext): Moved here from reps-table.h
	and reps-table.c.  
	(svn_fs__rep_read_range): New func.  
	
	* libsvn_fs/dag.h (svn_fs__dag_get_contents): Doc fix.  
	
	* libsvn_fs/dag.c: Read file contents streamily, using the new 
	strings/reps code.  
	(file_content_baton_t): Store a rep skel and fs, instead of a 
	node_revision skel.  
	(svn_fs__dag_get_contents): Set up baton appropriately.  
	(read_file_contents_args, txn_body_read_file_contents): New struct
	and func, respectively.  
	(read_file_contents): Rewritten to use above.  
	
	* strings-table.h, strings-table.c (svn_fs__string_read): Change 
	placement of buf argument.  All callers changed.  
	
	* libsvn_fs/this-branch.txt: Note that the following are now done: 
	      svn_fs__dag_delete 
	      svn_fs__dag_delete_tree 
	      svn_fs__dag_delete_if_mutable 
	      delete_entry 
	
	* tests/libsvn_fs/strings-reps-test.c: Put this file on the 
	`strings-reps-dev' branch too.  
	(txn_body_string_copy, copy_string): Re-enable.  
	(test_funcs): Run `copy_string' test.  
	(rep_args): Constify key.  

2001-06-26 13:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.93):

	* configure.in:  get SVN_VERSION defined again, so we can see it in 
	                 'svn -v'.  

2001-06-26 13:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/strings-reps-test.c (1.7):

	Disable code in mainline branch, as it only compiles in 
	"strings-reps-dev" branch (which Mike & Karl are working on.) 

2001-06-26 12:38   Joe Orton &lt;joe@light.plus.com&gt;

	* ac-helpers/berkeley-db.m4 (1.9):

	* berkeley-db.m4 (SVN_LIB_BERKELEY_DB): Add locations used by Red
	Hat Linux db3 packages to standard places to look.  [Raw Hide has
	db3-3.2.9 RPMs now] 

2001-06-26 09:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, reps-table.c, reps-table.h
	(strings-reps-dev.[6,5,4]):

	* libsvn_fs/dag.c 
	
	  (get_dir_entries): Added some error-checking.  
	
	  (set_entry): Make sure to clear the old string before writing a new 
	  one.  
	
	  (make_entry): Cut-n-paste-o repair.  
	
	  (delete_entry): Update to use reps and skels.  
	
	* reps-table.c 
	* reps-table.h 
	
	  (svn_fs_string_key_from_rep): Take POOL argument so we can assure a 
	  null-terminated string return.  All callers changed.  

2001-06-25 14:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, reps-table.c, reps-table.h,
	this-branch.txt (strings-reps-dev.[5,4,3,4]):

	More tandem coding with Mike Pilato: 
	
	* dag.c (make_entry): Finished.  
	(set_entry): Replaces add_new_entry, new calling discipline.  All 
	callers changed.  
	(replace_dir_entry): Removed, just use set_entry now.  
	(add_new_entry_skel): Removed, code folded into set_entry, see
	below.  
	(svn_fs__dag_file_length): Get the string key from the right skel.  
	(svn_fs__dag_make_copy): Abort immediately, so no one is tempted to 
	use this perpetually in-progress function.  
	
	* reps-table.h, reps-table.c (svn_fs__string_key_from_rep): Simplify 
	calling discipline.  All callers changed.  
	
	* this-branch.txt: Note that the following are done: 
	     svn_fs__dag_set_entry 
	     svn_fs__dag_clone_child 
	     svn_fs__dag_make_file 
	     svn_fs__dag_make_dir 
	     svn_fs__dag_link 

2001-06-25 11:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/reps-table.c (strings-reps-dev.3):

	Tandem coding with Mike Pilato: 
	
	* reps-table.c (svn_fs__string_key_from_rep,
	svn_fs__string_from_rep, svn_fs__rep_is_mutable): Removed redundant
	doc strings.  

2001-06-25 11:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: reps-table.c, reps-table.h
	(strings-reps-dev.[2,2]):

	Tandem coding with Mike Pilato: 
	
	* reps-table.h, reps-table.c (svn_fs__get_mutable_rep): Finish.  
	(svn_fs__write_new_rep): Add `const' to arg.  

2001-06-25 10:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* Makefile.in (1.15):

	(changelog): show branches and tags.  

2001-06-25 10:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/dag.c, libsvn_fs/reps-table.c,
	libsvn_fs/reps-table.h, libsvn_fs/strings-table.c,
	libsvn_fs/strings-table.h (strings-reps-dev.[4,1,1,1,1]),
	tests/libsvn_fs/strings-reps-test.c (1.6):

	* subversion/libsvn_fs/dag.c 
	
	  (rep_has_mutable_flag, rep_set_mutable_flag, string_from_rep, 
	  string_key_from_rep): Moved to reps-table.c.  
	
	  (txn_body_dag_init_fs): Write a valid skel for the root node, 
	  thanks.  
	
	  (make_entry): Build a valid skel for the new node.  
	
	  (svn_fs__dag_file_length): svn_fs__string_key_from_rep only needs a 
	  const char *, so why use an svn_string_t? 
	
	* subversion/libsvn_fs/reps-table.c 
	
	  (rep_is_fulltext):  New helper function.  
	
	  (svn_fs__string_key_from_rep): Was dag.c:string_key_from_rep().  
	
	  (svn_fs__string_from_rep): Was dag.c:string_from_rep().  
	
	  (svn_fs__rep_is_mutable): Was dag.c:rep_is_mutable().  
	
	  (rep_set_mutable_flag): Moved from dag.c 
	
	  (svn_fs__get_mutable_rep): New function.  
	
	* subversion/libsvn_fs/reps-table.h 
	
	  (svn_fs__string_key_from_rep): Was dag.c:string_key_from_rep().  
	
	  (svn_fs__string_from_rep): Was dag.c:string_from_rep().  
	
	  (svn_fs__rep_is_mutable): Was dag.c:rep_is_mutable().  
	
	  (svn_fs__get_mutable_rep): New function.  
	
	* subversion/libsvn_fs/strings-table.c 
	
	  (svn_fs__string_copy): New function 
	
	* subversion/libsvn_fs/strings-table.h 
	
	  (svn_fs__string_copy): New function 
	
	* subversion/tests/libsvn_fs/strings-reps-test.c 
	
	  (txn_body_string_copy, copy_string): New funcs.  
	
	  (test_funcs): Include new copy_string() test.  

2001-06-22 15:20  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c, dag.h, structure, this-branch.txt,
	tree.c (strings-reps-dev.[3,1,1,3,1]):

	Mike and Karl, still pluggin' away at FS changes.  
	
	* libsvn_fs/dag.h 
	
	  (svn_fs__dag_file_length): Length argument is now an apr_size_t.  
	
	* libsvn_fs/dag.c 
	
	  (string_key_from_rep): New helper function.  
	
	  (string_from_rep): Use string_key_from_rep.  
	
	  (svn_fs__dag_file_length): Use new strings/reps stuff.  Also, length 
	  argument is now an apr_size_t.  
	
	  (svn_fs__dag_commit_txn): Remove to-done "todo".  
	
	* libsvn_fs/tree.c 
	
	  (file_length_args): Changed type for 'length'.  
	
	* libsvn_fs/structure 
	
	  "Correct brain-o" --kfogel 

2001-06-22 14:11  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/dag.c, libsvn_fs/err.c (tags:
	strings-reps-dev-done), libsvn_fs/node-rev.c, libsvn_fs/node-rev.h,
	libsvn_fs/nodes-table.c (tags: strings-reps-dev-done),
	libsvn_fs/nodes-table.h (tags: strings-reps-dev-done),
	libsvn_fs/this-branch.txt, libsvn_fs/txn.c (tags:
	strings-reps-dev-done) (strings-reps-dev.[2,1,1,1,1,1,2,1]),
	tests/libsvn_fs/fs-test.c (1.83):

	* libsvn_fs/nodes-rev.h 
	* libsvn_fs/nodes-rev.c 
	
	  Removed (contents now in nodes-table.h and .c).  
	
	* libsvn_fs/nodes-table.h 
	
	  (svn_fs__get_rep, svn_fs__put_rep): Removed obsolete functions.  
	
	  (svn_fs__get_node_revision, svn_fs__put_node_revision, 
	  svn_fs__create_node, svn_fs__create_successor,
	  svn_fs__stable_node, svn_fs__delete_node_revision): Moved from
	node-rev.h.  
	
	* libsvn_fs/err.c 
	* libsvn_fs/err.h 
	
	  (svn_fs__err_corrupt_representation): Removed function.  
	
	* libsvn_fs/nodes-table.c 
	
	  Dump a bunch of junk formerly found in node-rev.c 
	
	  (is_valid_header, is_valid_node_revision): Updated to handle New and 
	  Improved (tm) node revision skels.  
	
	  (is_valid_representation): Removed function.  
	
	  (svn_fs__get_node_revision): New home for former contents of 
	  now-absent function svn_fs__get_rep().  
	
	  (svn_fs__put_node_revision): Now write the node-revision skel to the 
	  database (reps live elsewhere).  Replaces svn_fs__put_rep().  
	
	  (svn_fs__create_node, svn_fs__create_successor, svn_fs__stable_node, 
	  svn_fs__delete_node_revision): Moved from node-rev.c but NOT
	  edited.  
	
	* libsvn_fs/dag.c 
	
	  No longer #include node-rev.h (cuz it's GONE!).  
	
	  Some formatting fixes throughout (Gnu-style, if you will).  
	
	  (get_node_revision, set_node_revision, svn_fs__dag_get_node, 
	  svn_fs__dag_dir_entries_hash): Remove ### tweakit comment.  
	
	  (dir_entry_from_node): Now use svn_fs__dag_dir_entries_skel.  
	
	  (svn_fs__dag_get_proplist): Implement using reps/strings.  
	
	  (get_dir_entries): Moved some sanity checking into here from 
	  svn_fs__dag_dir_entries_skel.  
	
	  (svn_fs__dag_dir_entries_skel, dir_entry_from_node): Compactified.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (txn_body_check_id): Use svn_fs__get_node_revision instead of 
	  now-defunct svn_fs__get_rep.  
	
	* libsvn_fs/txn.c 
	
	  No longer #include node-rev.h (cuz it's GONE!).  
	
	* libsvn_fs/this-branch.txt 
	
	  Status updated.  

2001-06-22 12:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/this-branch.txt (strings-reps-dev.1):

	Scratch pad Mike and I can use to help us keep track of what remains 
	to be done for this change.  

2001-06-22 12:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/this-branch.txt (1.1):

	file this-branch.txt was initially added on branch strings-reps-dev.  

2001-06-22 10:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/strings-reps-test.c (1.5):

	* tests/libsvn_fs/strings-reps-test.c 
	
	  (abort_string): New test for Mike's peace of mind.  Abort a trail 
	  after writing a new string to the strings table, and make sure the 
	  write did NOT take.  
	
	  (test_funcs): Add abort_string().  

2001-06-21 15:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (strings-reps-dev.1):

	Start on code to use the `strings' and `reps' tables, with Mike 
	Pilato.  This is happening on branch "strings-reps-dev" until it's 
	ready to be merged into the main line.  
	
	* dag.c: #include reps-table.h, strings-table.h.  
	
	(node_rev_has_mutable_flag, node_rev_set_mutable_flag): New names
	for `has_mutable_flag' and `set_mutable_flag' respectively, since
	these only handle node revisions.  
	
	(rep_has_mutable_flag, rep_set_mutable_flag): New funcs.  
	
	(string_from_rep, get_dir_entries, find_dir_entry): New func.  
	(dir_entry_from_node): Replace `find_dir_entry_skel', wrapping above 
	new funcs.  All callers changed.  
	
	(svn_fs__dag_open): Removed redundant doc string in source file, fix 
	indentation.  
	
	(make_entry): Use svn_error_create instead of svn_error_createf.  

2001-06-21 12:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.42, premerge_strings-reps-dev):

	Explain mutability flags for representations; plus a few
	corrections.  

2001-06-20 10:38  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/strings-table.c (1.9,
	premerge_strings-reps-dev), libsvn_fs/strings-table.h (1.9,
	premerge_strings-reps-dev), tests/libsvn_fs/strings-reps-test.c
	(1.4):

	* subversion/libsvn_fs/strings-table.h 
	
	  (svn_fs__string_delete): Renamed from svn_fs__delete_string for 
	  consistency.  
	
	* subversion/libsvn_fs/strings-table.c 
	
	  (svn_fs__string_read): Provide ugly workaround for a bug in Berkeley 
	  3.2.9 (and yes, a patch is being submitted to Sleepycat).  
	
	  (svn_fs__string_size): Expect ENOMEM from request for string size as 
	  documented in Berkeley C API.  
	
	  (svn_fs__string_append): Only check size of strings presumed to 
	  exist.  
	
	  (svn_fs__string_delete): Renamed from svn_fs__delete_string for 
	  consistency.  
	
	* subversion/tests/libsvn_fs/strings-reps-test.c 
	
	  (txn_body_write_new_rep, txn_body_write_rep, txn_body_read_rep, 
	  txn_body_delete_rep): Dinky little pointless edit, really.  
	
	  (struct string_args, verify_expected_record, txn_body_verify_string, 
	  txn_body_string_append, txn_body_string_clear, 
	  txn_body_string_delete, txn_body_string_size): New helper
	  structure and functions for string tests.  
	
	  (bigstring1, bigstring2, bigstring3): Data for strings tests.  
	
	  (test_strings): New Strings Table test.  
	
	  (test_funcs): Added test_strings() test.  

2001-06-20 10:28  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/__init__.py (1.2):

	Not including "entry.py" in this package yet.  

2001-06-19 11:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: example_tests1.py (1.4),
	local_tests.py (1.15):

	
	* example_tests1.py:  obsolete, nuke.  
	
	* local_tests.py:  trying a suggeston from comp.python.lang, which 
	  might make python 1.X compilers not choke hideously on our
	  scripts.  

2001-06-19 11:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/README (1.6):

	Keep README up-to-date with new package reorganization.  

2001-06-19 11:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svntest/.cvsignore (1.1):

	Ignore .pyc files in the package 

2001-06-19 11:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: local_tests.py (1.14),
	svn_entry.py (1.5), svn_test_main.py (1.12), svn_tree.py (1.5),
	svntest/__init__.py (1.1), svntest/entry.py (1.1), svntest/main.py
	(1.1), svntest/tree.py (1.1):

	Organize our python framework into a single package 'svntest', 
	contained in its own subdirectory.  Mmmm, convenience, yessssss...  
	
	Renamed some routines as well, and changed all callers.  
	
	* svntest/__init__py:  define 'svntest' package.  
	
	* svntest/main.py:  renamed from svn_test_main.py 
	
	  (run_one_test):  renamed from run_test() 
	  (run_tests):     renamed from client_tests() 
	
	* svntest/tree.py:  renamed from svn_tree.py 
	
	  (get_props):  invoke main.run_svn(), using new module name.  
	
	* svntest/entry.py: renamed from svn_entry.py (unused module right
	now) 
	
	* local_tests.py:  import the 'svntest' package, change all calls
	  into this new namespace.  

2001-06-18 18:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.98, premerge_strings-reps-dev):

	Start noting what will need to change to switch us to the new node 
	contents representation scheme; search for "### tweakit".  
	
	Reviewed to line 855, the beginning of the "Proplists" section. 
	More to come.  
	
	Development context: Mike Pilato is finishing up the implementations 
	and tests for the strings table; when that's done, we're ready to 
	start the switchover.  

2001-06-18 16:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/strings-table.c (1.8):

	(svn_fs__string_append): Fix comments, compactify error handling.  

2001-06-18 15:52  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: reps-table.c (1.3,
	premerge_strings-reps-dev), strings-table.c (1.7), strings-table.h
	(1.8):

	* subversion/libsvn_fs/reps-table.c 
	
	  Removed printf's.  Karl's debugger works now! :-) 
	
	* subversion/libsvn_fs/strings-table.c 
	
	  (svn_fs__open_strings_table): Make sure to initialize the 'next-key' 
	  table entry.  
	
	  (svn_fs__string_read, svn_fs__string_append, svn_fs__string_clear): 
	  Re-implement based on new interface.  
	
	* subversion/libsvn_fs/strings-table.h 
	
	  (svn_fs__string_append): Updated docstring to explain that new keys 
	  are allocated in trail.  

2001-06-18 14:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: strings-table.c (1.6), strings-table.h
	(1.7):

	Reorganize strings interface to give caller control over trail
	scope, and simplify while we're at it: 
	
	(svn_fs__read_string_stream, svn_fs__write_string_stream, 
	svn_fs__new_string_stream, svn_fs__append_string_stream): Removed.  
	
	(svn_fs__string_clear, svn_fs__string_append, svn_fs__string_size, 
	svn_fs__string_read): New functions.  No implementations yet, just
	an interface that compiles and does nothing.  
	
	(svn_fs__delete_string): Doc fix.  

2001-06-18 10:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.41):

	Make text fit context better.  

2001-06-18 10:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.40):

	Solution to the problem of storing in each node revision the
	revision number when it was created.  Comments welcome.  

2001-06-17 22:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.13):

	* local_tests.py:  rename some tests for clarity and consistency.  
	
	  (basic_commit):   used to be "commit_from_wc_top" 
	  (basic_update):   used to be "update_from_wc_top" 
	  (basic_merge):    used to be "merge_from_wc_top" 
	  (basic_conflict): used to be "conflict_from_wc_top" 

2001-06-17 22:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.12):

	Make sure this script returns an errorvalue to the operating system, 
	so that `make check` works properly.  

2001-06-17 19:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* build.conf (1.18):

	Reexamine all our old tests.  It seems like a whole bunch ought to
	be removed, or fixed, or rewritten.  
	
	* build.conf 
	
	  ([test-scripts]): better document all scripts being run by `make 
	  check`.  Also, no need to run redundant checkout-test if we're 
	  running all the other XML tests.  
	
	  (Build Targets):  better documentation 
	
	  (Test Targets):  better documentation, categorize for later cleanup.  

2001-06-17 15:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_test_main.py (1.11):

	* svn_test_main.py:  remove sanity check, it doesn't work.  is there 
	  any way for a python module to "require" a certain version of
	  python and error out gracefully? 
	
	  (client_test):  add resilience to bogus arguments.  script arg is 
	  either an integer or "list";  anything else (or no args) just runs 
	  all the tests.  

2001-06-16 15:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.39):

	Food for thought.  

2001-06-16 14:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.84), libsvn_fs/fs.c (1.47),
	libsvn_fs/fs.h (1.23, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done):

	Wrap an outer directory around the Berkeley DB portion of a 
	repository, so we have an area inside the repository, yet outside
	the Berkeley namespace, to use for our own purposes.  
	
	* fs.c (dir_empty): New helper func.  
	(svn_fs_create_berkeley): Create tiered repository.  
	(svn_fs_open_berkeley, svn_fs_berkeley_recover): Handle tiered 
	repository.  
	(svn_fs_delete_berkeley): Handle tiered repository, and use Ben's 
	apr_dir_remove_recursively() to remove the directory; no point
	having two implementations of directory removal.  
	(check_apr): Removed, as it is now unused.  
	
	* fs.h (SVN_FS__REPOS_README, SVN_FS__REPOS_DB_DIR): New #defines.  
	(svn_fs_t): Update documentation of `env_path' member.  
	
	* svn_fs.h (svn_fs_create_berkeley): Document new error convention, 
	and change parameter name to `path' instead of `env'.  Interestingly 
	enough, it was already called `path' in the function definition.  
	(svn_fs_open_berkeley): Change parameter name to `path' instead of 
	`env', adjust doc string accordingly.  Suspiciously enough, it was 
	already called `path' in the function definition.  
	(svn_fs_berkeley_recover): Adjust doc string to refer to `path' 
	instead of `env'.  Provocatively enough, it was already called
	`path' in both the prototype and the definition.  

2001-06-15 12:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/README (1.5):

	Little tweaks.  

2001-06-15 12:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* INSTALL (1.2):

	Point to developer installation instructions.  

2001-06-15 11:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/README (1.7):

	Heavily update this file.  It had fallen way behind in documenting
	the current state of our testing systems.  

2001-06-15 11:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.108),
	include/svn_error_codes.h (1.2), libsvn_subr/svn_error.c (1.71):

	Finish conversion to Greg Stein's new error system: 
	
	* svn_error.h: Get rid of old system, add comments for new one.  
	(svn_strerror): Document new behavior.  
	
	* svn_error.c: Got rid of top-level conditionals.  
	(svn_handle_error): Use the new system.  
	(svn_strerror): Removed old implementation of this function.  
	(set_error_hash, initialize_svn_error_descriptions): Removed.  
	
	* svn_error_codes.h: Added explanatory comment.  Reformatted error 
	list and removed redundant comments.  

2001-06-15 00:07  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/strings-reps-test.c (1.3):

	So that the record may forever be kept in version control history, 
	the following tests (and the fact that they all passed as soon as
	they were written) are a testament to the fact that Karl Fogel wrote
	the entirety of the reps-table code seemingly without err.  Way to
	go, Karl! 
	
	* tests/libsvn_fs/strings-reps-test.c 
	
	  (rep_args): Renamed from write_new_rep_args.  
	
	  (txn_body_write_rep, txn_body_read_rep, txn_body_delete_rep): New 
	  helper-ish functions for representation table tests.  
	
	  (write_rep, read_rep, delete_rep): New representation table tests.  
	
	  (test_funcs): Now include write_rep, read_rep, and delete_rep.  

2001-06-14 18:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.14):

	Revert previous accidental commit of in-progress work.  

2001-06-14 17:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_ops.c (1.73):

	(svn_wc_remove_from_revision_control):  if this routine runs with
	the `destroy' flag, it not only preserves local mods, but now
	unversioned objects too.  
	
	No, no tests yet;  they'll be coming soon.  But Karl and I *did*
	find an APR bug in apr_read_dir().  Will commit that fix tomorrow
	morning.  .  

2001-06-14 15:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/strings-table.h (1.6):

	Fix obsolete comment.  

2001-06-14 12:41  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/: .cvsignore (1.8),
	strings-reps-test.c (1.2):

	* tests/libsvn_fs/strings-reps-test.c 
	
	  (write_new_rep): Don't use illegal characters in your skels, please.  
	  Double-quotes are disallowed per the table in skel.c.  
	
	* tests/libsvn_fs/.cvsignore 
	
	  (strings-reps-test): Ignore me.  

2001-06-14 12:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/strings-reps-test.c (1.1):

	Mike Pilato here, using Karl's computer.  
	
	* tests/libsvn_fs/strings-reps-test.c 
	
	  New test file.  

2001-06-14 12:07  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.118):

	* libsvn_wc/adm_crawler.c 
	
	  (crawl_dir): Oops!  Forgot to set the adds_only variable when I 
	  supposed to do so.  

2001-06-14 11:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.13):

	[no log message] 

2001-06-14 11:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* build.conf (1.17), subversion/libsvn_fs/key-gen.c (1.2,
	premerge_strings-reps-dev), subversion/libsvn_fs/key-gen.h (1.2,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done), subversion/libsvn_fs/reps-table.c (1.2),
	subversion/libsvn_fs/reps-table.h (1.3, premerge_strings-reps-dev),
	subversion/libsvn_fs/strings-table.h (1.5),
	subversion/tests/libsvn_fs/run-fs-tests.sh (1.7):

	* subversion/libsvn_fs/reps-table.h (svn_fs__write_rep, 
	svn_fs__write_new_rep): Prototype fixes.  
	
	* subversion/libsvn_fs/reps-table.c (svn_fs__write_new_rep): 
	Implement.   
	(svn_fs__open_reps_table): Initialize the "next-key" entry.  
	
	* subversion/libsvn_fs/strings-table.h (svn_fs__new_string_stream): 
	New func.  
	
	* subversion/libsvn_fs/strings-table.c (svn_fs__new_string_stream): 
	Implement.  
	
	* subversion/libsvn_fs/key-gen.h (svn_fs__next_key_key): Replaces 
	`next_key_key', doc fix.  All references changed.  
	
	New tests for strings and representations interfaces: 
	
	* subversion/tests/libsvn_fs/strings-reps-test.c: New file.  
	
	* build.conf (strings-reps-test): New target.  

2001-06-14 11:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: clients/cmdline/commit-cmd.c (1.4),
	clients/cmdline/update-cmd.c (1.3), include/svn_wc.h (1.101),
	libsvn_client/commit.c (1.51), libsvn_wc/adm_crawler.c (1.117),
	libsvn_wc/get_editor.c (1.188):

	Fixes for the commit process, allowing commits of a single directory 
	to actually commit that directory (not just the things in it).  
	
	* include/svn_wc.h 
	
	  (svn_wc_get_actual_target): renamed from
	  svn_wc_get_actual_update_target.  
	
	* libsvn_wc/adm_crawler.c 
	
	  (struct target_baton): No longer need prop_modified_p.  
	
	  (struct stack_object): Added a pool to this structure (so we 
	  don't have to pass this through all the recursion layers).  
	
	  (push_stack, pop_stack): Use new pool.  
	
	  (do_dir_replaces): No longer need temporarily pool.  
	
	  (do_dir_closures, do_apply_textdelta, do_prop_deltas): Code 
	  formatting/cleanup.  
	
	  (report_single_mod): New function, code broken out from old 
	  report_local_mods.  
	
	  (crawl_dir): Was report_local_mods.  
	
	  (svn_wc_crawl_local_mods): Modified to allow for commits of single 
	  directories.  
	
	* libsvn_client/commit.c 
	
	  (svn_client_commit): Use svn_wc_get_actual_target to get a valid 
	  base_dir and target when committing a single target.  
	
	* clients/cmdline/commit-cmd.c 
	
	  (svn_cl__commit): Use svn_wc_get_actual_target to calculate the 
	  base_dir the same way that svn_client_commit does.  
	
	* clients/cmdline/update-cmd.c 
	
	  (svn_cl__update): svn_wc_get_actual_target renamed from 
	  svn_wc_get_actual_update_target.  
	
	* libsvn_wc/get_editor.c 
	
	  (svn_wc_get_actual_target): renamed from
	  svn_wc_get_actual_update_target.  
	
	  (make_editor): svn_wc_get_actual_target renamed from 
	  svn_wc_get_actual_update_target.  

2001-06-14 10:51  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.11):

	* tests/clients/cmdline/local_tests.py 
	
	  (run_and_verify_commit): Don't try to pop from an empty array! 

2001-06-14 04:48   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_error.h (1.107),
	include/svn_error_codes.h (1.1), libsvn_subr/svn_error.c (1.70):

	Check in a new error string system, per discussion on list.  
	
	NOTE: this is /not/ enabled yet (no obvious conclusions on the list
	yet).  tweak svn_error.h to define TEST_ALTERNATE_ERROR_SYSTEM to
	try it out 
	
	* include/svn_error.h: include svn_error_codes.h to pick up the
	    enumerated constants. use a different signature for svn_strerror() 
	
	* include/svn_error_codes.h: new file. this file defines all of the
	    custom error codes (when normally included). svn_error.c includes it
	    with a magic incantation to construct a lookup table instead.  
	
	* libsvn_subr/svn_error.c: redefine svn_strerror() with the new
	    signature, and using the error_table[] array built by
	    svn_error_codes.h. if the error isn't found, fall back to
	    apr_strerror() (which will fill in a default if it doesn't know the
	error).  

2001-06-13 08:04  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/cmdline/feedback.c (1.2):

	* clients/cmdline/feedback.c 
	
	  Squashed some compiler warnings.  

2001-06-13 04:10   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: clients/cmdline/commit-cmd.c (1.3),
	clients/cmdline/diff.c (1.3), clients/cmdline/import-cmd.c (1.3),
	clients/cmdline/main.c (1.4), clients/cmdline/props.c (1.3),
	clients/cmdline/status.c (1.3), clients/cmdline/trace-commit.c
	(1.4), clients/cmdline/trace-update.c (1.4), clients/cmdline/util.c
	(1.4), include/svn_string.h (1.50), libsvn_client/add.c (1.17),
	libsvn_client/apply_edits.c (1.17), libsvn_client/commit.c (1.50),
	libsvn_client/status.c (1.14), libsvn_client/update.c (1.20),
	libsvn_delta/svndiff.c (1.25), libsvn_delta/text_delta.c (1.35),
	libsvn_delta/track_editor.c (1.6), libsvn_delta/xml_output.c
	(1.40), libsvn_delta/xml_parse.c (1.157), libsvn_fs/dag.c (1.97),
	libsvn_fs/id.c (1.26, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done),
	libsvn_fs/proplist.c (1.11, premerge_strings-reps-dev),
	libsvn_fs/skel.c (1.32, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done), libsvn_fs/tree.c
	(1.77, premerge_strings-reps-dev), libsvn_ra/ra_loader.c (1.8),
	libsvn_ra_dav/commit.c (1.56), libsvn_ra_dav/fetch.c (1.59),
	libsvn_ra_dav/merge.c (1.12), libsvn_ra_dav/options.c (1.8),
	libsvn_ra_dav/ra_dav.h (1.27), libsvn_ra_dav/util.c (1.4),
	libsvn_ra_local/checkout.c (1.12), libsvn_ra_local/split_url.c
	(1.12), libsvn_repos/commit_editor.c (1.10), libsvn_repos/delta.c
	(1.50), libsvn_repos/reporter.c (1.12), libsvn_subr/base64.c
	(1.20), libsvn_subr/io.c (1.40), libsvn_subr/path.c (1.39),
	libsvn_subr/quoprint.c (1.7), libsvn_subr/svn_string.c (1.15),
	libsvn_subr/target.c (1.11), libsvn_subr/xml.c (1.40),
	libsvn_wc/adm_crawler.c (1.116), libsvn_wc/adm_files.c (1.81),
	libsvn_wc/adm_ops.c (1.72), libsvn_wc/entries.c (1.109),
	libsvn_wc/get_editor.c (1.187), libsvn_wc/local_changes.c (1.29),
	libsvn_wc/log.c (1.100), libsvn_wc/props.c (1.33),
	libsvn_wc/questions.c (1.54), libsvn_wc/status.c (1.35),
	libsvn_wc/util.c (1.19), mod_dav_svn/activity.c (1.8),
	mod_dav_svn/liveprops.c (1.22), mod_dav_svn/merge.c (1.14),
	mod_dav_svn/repos.c (1.53), mod_dav_svn/update.c (1.6),
	tests/fs-helpers.c (1.5), tests/svn_test_editor.c (1.26),
	tests/libsvn_delta/deltaparse-test.c (1.72),
	tests/libsvn_delta/xml-output-test.c (1.17),
	tests/libsvn_fs/fs-test.c (1.82), tests/libsvn_fs/skel-test.c
	(1.23), tests/libsvn_ra_local/ra-local-test.c (1.11),
	tests/libsvn_repos/dir-delta-editor.c (1.5),
	tests/libsvn_repos/repos-test.c (1.4),
	tests/libsvn_subr/hashdump-test.c (1.22),
	tests/libsvn_subr/path-test.c (1.4), tests/libsvn_subr/stringtest.c
	(1.10), tests/libsvn_subr/target-test.c (1.11),
	tests/libsvn_wc/checkout-test.c (1.45),
	tests/libsvn_wc/commit-test.c (1.33):

	And the mother is back...  
	
	Change svn_string_FUNC to svn_stringbuf_FUNC.  

2001-06-12 22:26  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.69):

	* libsvn_subr/svn_error.c 
	
	  (initialize_svn_error_descriptions): Squash some compile warnings.  

2001-06-12 16:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.68):

	
	* svn_error.c (initialize_svn_error_descriptions):  duh, we have to 
	  *copy* the key before setting it in the hash.  
	  (set_error_hash):  new helper routine for this purpose.  

2001-06-12 15:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.106), libsvn_subr/svn_error.c
	(1.67):

	
	* svn_error.c (initialize_svn_error_descriptions): new func - build
	  a hash table that maps svn errorcodes to english descriptions.  
	
	  (svn_strerror):  take a pool instead of stringbuf.  pass 
	  this pool to initialize_svn_error_descriptions() the first time
	  this routine is called, and then cache the hash in a static
	  variable thereafter.  use the hash for lookups.  
	
	  (svn_error_strings[]):  removed, now part of hash initialization.  
	
	* svn_error.h (svn_strerror):  update declaration.  

2001-06-12 12:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.152), include/svn_ra.h
	(1.60), include/svn_repos.h (1.13), libsvn_client/commit.c (1.49),
	libsvn_delta/compose_editors.c (1.18),
	libsvn_delta/default_editor.c (1.9), libsvn_ra_dav/commit.c (1.55),
	libsvn_ra_dav/session.c (1.25), libsvn_ra_local/ra_plugin.c (1.36),
	libsvn_repos/commit_editor.c (1.9):

	Really, truly fixing bug #388, the Right Way: 
	
	* svn_delta.h, default_editor.c (abort_edit):  new editor function! 
	  Allows the editor-driver to inform the editor of a bailout, so
	  that the editor can do cleanup if it needs to.  All editors now
	  have a 'dummy' version of this routine which does nothing.  
	
	* libsvn_client/commit.c (send_to_repos):  if import() or 
	  svn_wc_crawl_local_mods() returns an error, call
	  editor-&gt;abort_edit().  
	
	* compose_editors.c (abort_edit):  write a composed version of this 
	  new routine.  
	  (svn_delta_compose_editors):  add pointer to composed abort_edit.  
	
	* svn_repos.h (svn_repos_get_commit_txn):  removed.  this was a Bad
	Idea.  
	
	* commit_editor.c (svn_repos_get_commit_txn):  removed.  
	
	  (abort_edit):  this is the only non-dummy version of this editor 
	  routine.  It actually calls svn_fs_abort_txn().  
	
	  (svn_repos_get_editor):  add abort_edit to editor.  
	
	* svn_ra.h (abort_commit):  remove this RA interface, no longer
	needed.  
	
	* libsvn_ra_local/ra_plugin.c (abort_commit):  removed.  
	  (ra_local_plugin):  remove abort_commit.  
	
	* libsvn_ra_dav/session.c (dav_plugin):  remove
	svn_ra_dav__abort_commit 
	
	* libsvn_ra_dav/commit.c (svn_ra_dav__abort_commit):  removed.  

2001-06-12 12:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/user/manual/: adds.texi (1.5), removals.texi (1.7):

	Reviewing at Ben's request: 
	
	(Committing additions): More precise behavior description.  
	
	(Additions from updates): Clarification.  
	
	(Removing items): More precise behavior descriptions, some wording 
	tweaks.  
	
	(Committing removals): Typos (fixed, not added, that is).  
	
	(Removals in updates): More precise behavior description.  

2001-06-12 10:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_string.h (1.49):

	Fix typo.  

2001-06-11 20:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.59), include/svn_repos.h (1.12),
	libsvn_client/commit.c (1.48), libsvn_ra_dav/commit.c (1.54),
	libsvn_ra_dav/ra_dav.h (1.26), libsvn_ra_dav/session.c (1.24),
	libsvn_ra_local/ra_plugin.c (1.35), libsvn_repos/commit_editor.c
	(1.8):

	Bugfix for #388: If the client wants to bail during a commit, tell
	the RA layer about it (...so it can call svn_fs_abort_txn().) 
	
	* svn_ra.h (svn_ra_plugin_t-&gt;abort_commit):  new RA vtable func.  
	
	* svn_repos.h, commit_editor.c (svn_repos_get_commit_txn): new func
	  to return the the fs_txn within the edit_baton.  libsvn_ra_local
	  needs this to abort the txn.  
	  (svn_repos_get_editor):  set eb-&gt;txn to NULL for paranoia's sake.  
	
	* libsvn_ra_local/ra_plugin.c (abort_commit):  implement new RA
	  func.  
	(ra_local_plugin):  add abort_commit to static vtable.  
	
	* libsvn_ra_dav/commit.c ra_dav.h (svn_ra_dav__abort_commit): dummy 
	  version of new RA func.  
	
	* libsvn_ra_dav/session.c (dav_plugin): add
	  svn_ra_dav___abort_commit to static vtable.  
	
	* libsvn_client/commit.c (send_to_repos): call ra-&gt;abort_commit if
	  the editor-driver chokes during either a commit or an import. 
	  That's the whole point of all this.  

2001-06-11 19:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.105), libsvn_subr/svn_error.c
	(1.66):

	Fix bug #392:  print human-readable descriptions of svn error-codes.  
	(Finally!) 
	
	* svn_error.h (svn_strerror):  declare.  
	
	* svn_error.c (svn_error_strings):  monstrous table of strings that 
	  describe svn-specific errorcodes.  
	
	  (svn_strerror):  new func to lookup SVN error descriptions.  
	
	  (svn_handle_error):  call *both* svn_strerror() and apr_strerror().  

2001-06-11 15:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.186):

	(add_or_replace_file):  rewrite the sanity checks.  It's okay to add
	a file already in `entries', but it's *not* okay to add a file if an 
	dirent of the same name already exists on disk.  

2001-06-11 12:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: clients/cmdline/cl.h (1.3),
	clients/cmdline/feedback.c (1.1), clients/cmdline/main.c (1.3),
	include/svn_pools.h (1.3), libsvn_subr/svn_error.c (1.65),
	libsvn_wc/adm_crawler.c (1.115):

	Make the update-reporter use the feedback vtable to report
	unversioned items.  (i.e. no more printf() inside libsvn_wc. :) ) 
	
	Again, the joint work of Mssrs. Pilato and Collins-Sussman.  
	
	* svn_pools.h (svn_pool_feedback_t):  add apr_status_t to
	report_warning().  
	
	* svn_error.c (report_warning):  adjust dummy func.  
	
	* cl.h, feedback.c (svn_cl__init_feedback_vtable):  new func called
	by main().  
	
	* main.c (main):  call svn_cl__init_feedback_vtable.  
	
	* adm_crawler.c (svn_wc_crawl_revisions):  get feedback table, pass
	  it down.  
	(report_revisions):  now accepts feedback table as arg, uses it to 
	  report unversioned items.  

2001-06-11 11:10  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.16), subversion/include/svn_pools.h (1.2),
	subversion/libsvn_subr/svn_error.c (1.64),
	subversion/tests/libsvn_subr/stream-test.c (1.2):

	Un-do the feedback stream stuff, Do-do the feedback vtable stuff.  A 
	"Collab"-orative effort by Ben Collins-Sussman and C-Mike Pilato.  
	
	* subversion/include/svn_pools.h 
	
	  (svn_pool_feedback_t): New vtable for returning feedback to client.  
	
	  (svn_pool_get_feedback_vtable): New function prototype.  
	
	  (svn_pool_get_feedback_stream): Removed obsolete function prototype.  
	
	* subversion/libsvn_subr/svn_error.c 
	
	  (SVN_ERROR_FEEDBACK_VTABLE): New hash key for global feedback 
	  vtable.  
	
	  (SVN_ERROR_STREAM): Removed unused hash key.  
	
	  (svn_pool_get_feedback_vtable): New function.  
	
	  (svn_pool_get_feedback_stream): Removed obsolete function.  
	
	  (svn_error_init_pool, svn_pool_create, svn_pool_clear): No longer 
	  care about feedback streams.  We're doing vtable stuff now! 
	
	  (report_unversioned_item, report_warning, report_progress): Dummy 
	  functions for default svn_pool_feedback_t allocations.  
	
	* subversion/tests/libsvn_subr/stream-test.c 
	
	  Obsolete file removed.  
	
	* build.conf 
	
	  (stream_test): ...is no more.  

2001-06-11 11:10   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* TASKS (1.20):

	Testing CVS commit access for Daniel Steinberg. -dlr@collab.net 

2001-06-11 10:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_short (1.8):

	Another filesytem requirement for M3.  

2001-06-11 09:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.24):

	Tweak fuzzy status bars.  

2001-06-11 09:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.23):

	Updating status page.  

2001-06-11 09:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* PORTING (1.6):

	Add freebsd 4.3.  

2001-06-11 05:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/: node-rev.c (1.11), proplist.c (1.10),
	skel.c (1.31), skel.h (1.22, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done):

	Change the "data" member in the skel_t to a "const char *". Change
	parameter type of svn_fs__mem_atom to include a const.  
	
	* node-rev.c (svn_fs__put_node_revision): remove an unneeded cast 
	
	* proplist.c (svn_fs__set_prop): remove unneeded casts 
	
	* skel.c (parse, list, implicit_atom, explicit_atom): add a "const"
	    to the data parameter. add const to some local variables.  
	  (explicit_atom, svn_fs__str_atom): remove unneeded casts 
	  (svn_fs__mem_atom): add "const" to the "addr" parameter 
	
	* skel.h (struct skel_t): add "const" to the "data" member 
	  (svn_fs__mem_atom): add "const" to the "addr" parameter 

2001-06-10 22:37   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/proplist.c (1.9):

	(svn_fs__make_prop_hash): The data member in a skel_t refers
	  directly to the content in a skel string from the DB. The values are
	  not null-terminated.  We put the values into an apr_hash_t with the
	  correct length (thus, they are hashed properly). However, we
	  specified these as char* (with the commensurate expectation of them
	  being null-terminated); an apr_hash_this() to extract the string
	  could give you something that isn't null-terminated.  
	
	  Null-terminate the key by copying it.  
	
	  (conceivably, an alternative is to clarify the spec that the
	   proplist hash has non-terminated byte sequences, and avoid the
	copy) 

2001-06-10 22:30   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.81):

	(node_props): the property values were placed into the wrong string 
	   structure (and broke test 14).  

2001-06-10 21:50   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.83), libsvn_fs/proplist.c (1.8),
	libsvn_fs/proplist.h (1.6, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done),
	libsvn_fs/rev-table.c (1.15, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done), libsvn_fs/skel.c
	(1.30), libsvn_fs/skel.h (1.21), libsvn_fs/tree.c (1.76),
	libsvn_fs/txn-table.c (1.27, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done),
	libsvn_repos/commit_editor.c (1.7), mod_dav_svn/deadprops.c (1.13),
	tests/libsvn_fs/fs-test.c (1.80),
	tests/libsvn_repos/dir-delta-editor.c (1.4):

	Change some FS interfaces over to use the new svn_string_t rather
	than svn_stringbuf_t.  
	
	* include/svn_fs.h (svn_fs_txn_prop, svn_fs_change_txn_prop, 
	    svn_fs_node_prop, svn_fs_change_node_prop, svn_fs_revision_prop, 
	    svn_fs_change_rev_prop): change property name and value (input) 
	    parameters to use "const svn_string_t *".  
	    (note: the outputs are still svn_stringbuf_t) 
	
	* libsvn_fs/proplist.[ch] (svn_fs__get_prop, svn_fs__set_prop):
	    change name value value (input) parameters to use "const
	svn_string_t *".  
	
	* libsvn_fs/rev-table.c (struct revision_prop_args): change propname
	  type 
	(svn_fs_revision_prop): change propname parameter type 
	  (struct change_rev_prop_args): change name, value types 
	  (svn_fs_change_rev_prop): change name, value types 
	
	* libsvn_fs/skel.[ch] (svn_fs__atom_matches_string): change str
	param type 
	
	* libsvn_fs/tree.c (struct node_prop_args): change propname type 
	  (svn_fs_node_prop): change propname param type 
	  (struct change_node_prop_args): change name, value types 
	  (svn_fs_change_node_prop): change name, value types 
	
	* libsvn_fs/txn-table.c (struct txn_prop_args): change propname type 
	  (svn_fs_txn_prop): change propname param type 
	  (struct change_txn_prop_args): change name, value types 
	  (svn_fs_change_txn_prop): change name, value types 
	
	* libsvn_repos/commit-editor.c (struct edit_baton): change log_msg
	    member from svn_stringbuf_t* to svn_string_t.  
	  (change_file_prop, change_dir_prop): construct svn_string_t
	    structures from NAME and VALUE and pass the structures to
	  svn_fs_change_node_prop.  
	(close_edit): construct PROPNAME variable as an svn_string_t and
	    pass it to svn_fs_change_txn_prop(). tweak passing of log_msg.  
	  (svn_repos_get_editor): construct eb-&gt;log_msg a bit differently 
	
	* mod_dav_svn/deadprops.c (dav_svn_db_fetch, dav_svn_db_store, 
	    dav_svn_db_remove, dav_svn_db_exists): construct and pass
	    svn_string_t instead of an svn_stringbuf_t structure.  
	
	* tests/libsvn_fs/fs-test.c (call_functions_with_unopened_fs, 
	    revision_props, transactions_props, node_props): construct and
	    pass svn_string_t structures instead of svn_stringbuf_t.  
	
	* tests/libsvn_repos/dir-delta-editor.c (test_change_file_prop, 
	    test_change_dir_prop): construct and pass svn_string_t
	    structures instead of svn_stringbuf_t.  

2001-06-10 21:22   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: clients/cmdline/trace-commit.c (1.3),
	mod_dav_svn/merge.c (1.13), mod_dav_svn/mod_dav_svn.c (1.20),
	mod_dav_svn/repos.c (1.52), mod_dav_svn/update.c (1.5),
	tests/libsvn_subr/target-test.c (1.10),
	tests/libsvn_wc/checkout-test.c (1.44):

	Add #include "svn_pools.h" to get these files to compile cleanly.  

2001-06-10 19:39   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_string.h (1.48):

	Add new svn_string_t datatype and a bunch of commentary of the two
	types.  
	
	Some simple white space changes (reindenting).  

2001-06-10 18:47   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/svn-apache.m4 (1.13):

	Fix cut/paste typo. INSTALL_APACHE_RULE should be
	install-mods-shared for the shared case.  

2001-06-10 16:17   Branko Cibej &lt;brane@xbc.nu&gt;

	* configure.in (1.92):

	Always subst SVN_DB_INCLUDES and SVN_DB_LIBS.  

2001-06-09 07:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.58), include/svn_repos.h (1.11),
	libsvn_ra_dav/fetch.c (1.58), libsvn_ra_local/ra_plugin.c (1.34),
	libsvn_repos/reporter.c (1.11), libsvn_wc/adm_crawler.c (1.114):

	If update reporter chokes, it should no longer leave an orphaned fs 
	transaction.  
	
	* svn_ra.h (abort_report):  new reporter func, allows report-driver
	  to tell the RA layer to destroy the fs transaction.  
	
	* svn_repos.h, reporter.c (svn_repos_abort_report):  simple func
	  calls svn_fs_abort_txn().  
	
	* libsvn_ra_local/ra_plugin.c (ra_local_reporter): add pointer to 
	  svn_repos_abort_report().  
	
	* libsvn_ra_dav/fetch.c (reporter_abort_report):  add dummy func.  
	  gstein, see its comment.  
	  (ra_dav_reporter):  add pointer to reporter_abort_report.  
	
	* adm_crawler.c (svn_wc_crawl_revisions): if report_revisions() 
	  returns error, call abort_report().  That's the whole point of all
	  this.  

2001-06-08 22:39   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.113):

	(report_revisions):  make the `?'-printing algorithm less stupid. 
	:) 

2001-06-08 22:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_io.h (1.40), libsvn_subr/io.c (1.39),
	libsvn_wc/adm_crawler.c (1.112), libsvn_wc/get_editor.c (1.185):

	Finish fix for bug #337: Updates now notice missing items and re-add
	them, and print '?'  next to unversioned items.  
	
	Note:  the 'auto-replacement' trick only works with ra_local right 
	now, not yet ra_dav.  
	
	* svn_io.h (svn_io_get_dirents):  new helper function.  
	
	* io.c (svn_io_get_dirents):  implement.  
	
	* adm_crawler.c (report_revisions):  big rewrite -- compare SVN 
	  entries against actual dirents.  
	
	* get_editor.c (add_or_replace_file):  remove the sanity check in
	  this function, as it was preventing files from being re-added.  see
	  the comments in the code.  

2001-06-08 16:35  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/.cvsignore (1.7):

	* tests/libsvn_fs/.cvsignore 
	
	  Ignore key-test binary.  

2001-06-08 16:33  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.108):

	* libsvn_wc/entries.c 
	
	  (check_entries): New svn_stringbuf_t is what I *really* wanted here! 

2001-06-08 16:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* build.conf (1.15), subversion/clients/cmdline/main.c (1.2),
	subversion/clients/cmdline/trace-update.c (1.3),
	subversion/include/svn_error.h (1.104), subversion/include/svn_io.h
	(1.39), subversion/include/svn_pools.h (1.1),
	subversion/libsvn_client/add.c (1.16),
	subversion/libsvn_client/commit.c (1.47),
	subversion/libsvn_delta/svndiff.c (1.24),
	subversion/libsvn_delta/text_delta.c (1.34),
	subversion/libsvn_delta/xml_output.c (1.39),
	subversion/libsvn_delta/xml_parse.c (1.156),
	subversion/libsvn_fs/dag.c (1.96), subversion/libsvn_fs/fs.c
	(1.46), subversion/libsvn_fs/trail.c (1.11,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done), subversion/libsvn_fs/tree.c (1.75),
	subversion/libsvn_fs/txn.c (1.42, premerge_strings-reps-dev),
	subversion/libsvn_ra_dav/commit.c (1.53),
	subversion/libsvn_ra_local/checkout.c (1.11),
	subversion/libsvn_ra_local/ra_plugin.c (1.33),
	subversion/libsvn_ra_local/split_url.c (1.11),
	subversion/libsvn_repos/commit_editor.c (1.6),
	subversion/libsvn_repos/delta.c (1.49),
	subversion/libsvn_subr/base64.c (1.19), subversion/libsvn_subr/io.c
	(1.38), subversion/libsvn_subr/quoprint.c (1.6),
	subversion/libsvn_subr/svn_error.c (1.63),
	subversion/libsvn_subr/target.c (1.10),
	subversion/libsvn_subr/xml.c (1.39),
	subversion/libsvn_wc/adm_crawler.c (1.111),
	subversion/libsvn_wc/adm_ops.c (1.71),
	subversion/libsvn_wc/get_editor.c (1.184),
	subversion/svnadmin/main.c (1.12), subversion/tests/fs-helpers.c
	(1.4), subversion/tests/svn_tests_main.c (1.23),
	subversion/tests/libsvn_delta/deltaparse-test.c (1.71),
	subversion/tests/libsvn_delta/random-test.c (1.24),
	subversion/tests/libsvn_delta/xml-output-test.c (1.16),
	subversion/tests/libsvn_fs/fs-test.c (1.79),
	subversion/tests/libsvn_fs/skel-test.c (1.22),
	subversion/tests/libsvn_repos/repos-test.c (1.3),
	subversion/tests/libsvn_subr/.cvsignore (1.10),
	subversion/tests/libsvn_subr/stream-test.c (1.1),
	subversion/tests/libsvn_wc/commit-test.c (1.32):

	Big Ol' Change: Moved pool-related function prototypes into new 
	include file, svn_pools.h.  This was done to solve some circular 
	dependency issues related another change -- the addition of an 
	svn_stream_t to the userdata of SVN pools.  Dubbed the "feedback 
	stream", this stream provides a way for any function with access to
	a Subversion pool to send bytes out to whoever may want them, and is 
	scheduled to be used for non-fatal warnings and such.  
	
	In the future, this mechanism may be replaced by a function v-table
	to optimize data transmission (why package up in a string protocol
	data that is just going to be unpackaged by in-process methods?) 
	
	* subversion/include/svn_pools.h 
	
	  New header file for pool-related function prototypes.  
	
	* subversion/tests/libsvn_subr/stream-test.c 
	
	  New file for stream-related tests.  Current contains just the one 
	  test for the feedback stream, but your contributions and patches
	  are welcome....  
	
	* subversion/tests/libsvn_subr/.cvsignore 
	
	  Please ignore the generated stream-test binary.  
	
	* build.conf 
	
	  (stream-test): New section for stream-test test.  
	
	* subversion/include/svn_error.h 
	
	  Big change:  Moved pool-related prototypes and related epic 
	  storytelling to new file, svn_pools.h.  
	
	  (SVN_ERR_WC_CORRUPT): New error type for corrupted working copies.  
	
	* subversion/libsvn_subr/svn_error.c 
	
	  (SVN_ERROR_STREAM): New key into pool's userdata for the feedback 
	  stream.  
	
	  (svn_pool_get_feedback_stream): New function for retrieving the 
	  feedback stream from a pool.  
	
	  (svn_error_init_pool, svn_pool_create, svn_pool_clear): Keep the new 
	  feedback stream in mind when creating and destroying pools.  
	
	* subversion/include/svn_io.h 
	* subversion/libsvn_subr/io.c 
	
	  (svn_stream_dup): New function for duplicating streams.  
	
	  (svn_stream_set_baton): New accessor function for setting the baton 
	  associated with a stream (just in case you didn't have one handy
	  at stream creation time).  
	
	* subversion/clients/cmdline/main.c 
	* subversion/clients/cmdline/trace-update.c 
	* subversion/libsvn_client/add.c 
	* subversion/libsvn_client/commit.c 
	* subversion/libsvn_delta/svndiff.c 
	* subversion/libsvn_delta/text_delta.c 
	* subversion/libsvn_delta/xml_output.c 
	* subversion/libsvn_delta/xml_parse.c 
	* subversion/libsvn_fs/dag.c 
	* subversion/libsvn_fs/fs.c 
	* subversion/libsvn_fs/trail.c 
	* subversion/libsvn_fs/tree.c 
	* subversion/libsvn_fs/txn.c 
	* subversion/libsvn_ra_dav/commit.c 
	* subversion/libsvn_ra_local/checkout.c 
	* subversion/libsvn_ra_local/ra_plugin.c 
	* subversion/libsvn_ra_local/split_url.c 
	* subversion/libsvn_repos/commit_editor.c 
	* subversion/libsvn_repos/delta.c 
	* subversion/libsvn_subr/base64.c 
	* subversion/libsvn_subr/quoprint.c 
	* subversion/libsvn_subr/target.c 
	* subversion/libsvn_subr/xml.c 
	* subversion/libsvn_wc/adm_crawler.c 
	* subversion/libsvn_wc/adm_ops.c 
	* subversion/libsvn_wc/get_editor.c 
	* subversion/svnadmin/main.c 
	* subversion/tests/fs-helpers.c 
	* subversion/tests/svn_tests_main.c 
	* subversion/tests/libsvn_delta/deltaparse-test.c 
	* subversion/tests/libsvn_delta/random-test.c 
	* subversion/tests/libsvn_delta/xml-output-test.c 
	* subversion/tests/libsvn_fs/fs-test.c 
	* subversion/tests/libsvn_fs/skel-test.c 
	* subversion/tests/libsvn_repos/repos-test.c 
	* subversion/tests/libsvn_wc/commit-test.c 
	
	  Now #include svn_pools.h 

2001-06-08 16:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/key-test.c (1.1):

	New file; accidentally left out of previous commit.  

2001-06-08 16:05  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_subr/path-test.c (1.3):

	* subversion/tests/libsvn_subr/path-test.c 
	
	  Oops!  Forgot to edit a copied header docstring.  

2001-06-08 16:03  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.107):

	Index: libsvn_wc/entries.c 
	
	  (check_entries): New validation function (this is a work in 
	  progress, part of a bigger picture that has not yet been painted.  

2001-06-08 15:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/merge.c (1.12):

	(send_response): ap_fputstrs() now returns an apr_status_t. toss the 
	  comment, and bring back the status checking code.  

2001-06-08 15:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* build.conf (1.14), subversion/libsvn_fs/convert-size.c (1.12),
	subversion/libsvn_fs/convert-size.h (1.8),
	subversion/libsvn_fs/id.c (1.25), subversion/libsvn_fs/key-gen.c
	(1.1), subversion/libsvn_fs/key-gen.h (1.1),
	subversion/libsvn_fs/reps-table.h (1.2),
	subversion/libsvn_fs/skel.c (1.29),
	subversion/libsvn_fs/txn-table.c (1.26),
	subversion/tests/libsvn_fs/run-fs-tests.sh (1.6):

	Helper routine and tests for sequential key generation in the 
	`representations' and `strings' tables, plus a minor reorganization
	to put all key manufacturing in one place: 
	
	* convert-size.h, convert-size.c: Renamed, see below.  
	
	* key-gen.h, key-gen.c: Replace convert-size.h, convert-size.c.  
	
	* id.c, skel.c, txn-table.c: #include key-gen.h instead of 
	convert-size.h.  
	
	* key-gen.h (next_key_key): Declare extern.  
	(svn_fs__next_key): New declaration.  
	
	* key-gen.c (next_key_key): Define.  
	(svn_fs__next_key): New func.  
	
	* key-test.c: New file, tests svn_fs__next_key.  
	
	* run-fs-tests.sh: Run `key-test' program.  
	
	* build.conf (key-test): New target.  

2001-06-08 12:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/: local_tests.py (1.10),
	svn_tree.py (1.4):

	New conflict test, plus some general reorganization, all submitted
	by Mike Sussman &lt;msussman@collab.net&gt;: 
	
	* svn_tree.py (compare_trees): Take new singleton_handler function 
	arguments, invoked when one tree contains elements not present in
	the other tree.  Don't flatten tree structures; instead, descend in
	the usual way and compare them as trees, the same way the filesystem
	does.  
	
	The motivation for this was conflict testing.  Subversion conflicts 
	produce extra files, but the old compare_trees() was first
	flattening the tree structure and then comparing children based only
	on an index into an array of children.  This worked fine until there
	were extra entries, namely the .rej files, in the working copy where
	the conflict actually occurs -- rho.xxx.rej from the second wc would
	be wrongly compared to tau from the first tree, and the test would
	fail fail.  So now we walk the tree structures in parallel, and
	handle structural differences by invoking one or the other of the
	singleton handlers.  Most tests will simply use
	default_singleton_handler() (see below), which simply raises an
	SVNTreeUnequal exception.  Some tests, however, will override the
	default, providing a singleton handler more appropriate to that
	test; see conflict_from_wc_top() below for an example.  
	
	(compare_file_nodes): Renamed from compare_nodes.  
	
	(get_child, default_singleton_handler): New helper funcs.  
	
	(SVNTypeMismatch, SVNTreeIsNotDirectory): New exceptions.  
	
	
	* local_tests.py (conflict_from_wc_top): New test for conflict.  
	
	(verify_rej_file): New singleton func to handle the .rej files in
	the conflict test.  
	
	(extra_files): New global dictionary needed by both verify_rej_file 
	and conflict_from_wc_top to verify that all .rej files have been 
	covered exactly once.  
	
	(run_and_verify_commit, run_and_verify_update,
	run_and_verify_status, run_and_verify_checkout): Take new singleton
	funcs as arguments and pass to compare_trees.  All callers changed.  
	
	(guarantee_greek_repository): Minor bugfix - modified url to take 
	proper number of forward slashes.  We were actually passing a URL to 
	SVN with four forward slashes, but this was actually getting hidden
	by SVN's robustness.  
	
	(test_list): Run the new conflict test.  

2001-06-08 11:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.38):

	(Syntactic elements): Move structured data from `strings' table to 
	`representations' table, for easier ranged operations on strings.  
	
	(DELTA, CHECKSUM): Removed these redundant sections.  It's clear
	from context and from the grammar how these work.  

2001-06-08 04:46   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: bindings/svn_string.i (1.3),
	clients/win32/svn_com/SVN.cpp (1.6):

	Pick up new more changes of svn_string_t -&gt; svn_stringbuf_t.  

2001-06-08 04:01   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: clients/cmdline/add-cmd.c (1.2),
	clients/cmdline/checkout-cmd.c (1.2), clients/cmdline/cl.h (1.2),
	clients/cmdline/commit-cmd.c (1.2), clients/cmdline/delete-cmd.c
	(1.2), clients/cmdline/diff-cmd.c (1.2), clients/cmdline/diff.c
	(1.2), clients/cmdline/help-cmd.c (1.2),
	clients/cmdline/import-cmd.c (1.2), clients/cmdline/propget-cmd.c
	(1.2), clients/cmdline/proplist-cmd.c (1.2),
	clients/cmdline/props.c (1.2), clients/cmdline/propset-cmd.c (1.2),
	clients/cmdline/status-cmd.c (1.2), clients/cmdline/status.c (1.2),
	clients/cmdline/trace-commit.c (1.2),
	clients/cmdline/trace-update.c (1.2), clients/cmdline/update-cmd.c
	(1.2), clients/cmdline/util.c (1.3), include/svn_base64.h (1.10),
	include/svn_client.h (1.35), include/svn_delta.h (1.151),
	include/svn_fs.h (1.82), include/svn_hash.h (1.17),
	include/svn_io.h (1.38), include/svn_path.h (1.38),
	include/svn_quoprint.h (1.3), include/svn_ra.h (1.57),
	include/svn_repos.h (1.10), include/svn_sorts.h (1.4),
	include/svn_string.h (1.47), include/svn_test.h (1.17),
	include/svn_wc.h (1.100), include/svn_xml.h (1.31),
	libsvn_client/add.c (1.15), libsvn_client/apply_edits.c (1.16),
	libsvn_client/checkout.c (1.19), libsvn_client/client.h (1.13),
	libsvn_client/commit.c (1.46), libsvn_client/delete.c (1.11),
	libsvn_client/diff.c (1.3), libsvn_client/status.c (1.13),
	libsvn_client/update.c (1.19), libsvn_delta/compose_editors.c
	(1.17), libsvn_delta/default_editor.c (1.8), libsvn_delta/delta.h
	(1.55), libsvn_delta/svndiff.c (1.23), libsvn_delta/text_delta.c
	(1.33), libsvn_delta/track_editor.c (1.5),
	libsvn_delta/xml_output.c (1.38), libsvn_delta/xml_parse.c (1.155),
	libsvn_fs/dag.c (1.95), libsvn_fs/dag.h (1.43,
	premerge_strings-reps-dev), libsvn_fs/dbt.c (1.19,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done), libsvn_fs/err.c (1.29,
	premerge_strings-reps-dev), libsvn_fs/id.c (1.24),
	libsvn_fs/proplist.c (1.7), libsvn_fs/proplist.h (1.5),
	libsvn_fs/rev-table.c (1.14), libsvn_fs/skel.c (1.28),
	libsvn_fs/skel.h (1.20), libsvn_fs/tree.c (1.74),
	libsvn_fs/txn-table.c (1.25), libsvn_ra/ra_loader.c (1.7),
	libsvn_ra_dav/commit.c (1.52), libsvn_ra_dav/fetch.c (1.57),
	libsvn_ra_dav/merge.c (1.11), libsvn_ra_dav/options.c (1.7),
	libsvn_ra_dav/ra_dav.h (1.25), libsvn_ra_dav/session.c (1.23),
	libsvn_ra_dav/util.c (1.3), libsvn_ra_local/checkout.c (1.10),
	libsvn_ra_local/ra_local.h (1.16), libsvn_ra_local/ra_plugin.c
	(1.32), libsvn_ra_local/split_url.c (1.10),
	libsvn_repos/commit_editor.c (1.5), libsvn_repos/delta.c (1.48),
	libsvn_repos/reporter.c (1.10), libsvn_subr/base64.c (1.18),
	libsvn_subr/hashdump.c (1.25), libsvn_subr/io.c (1.37),
	libsvn_subr/path.c (1.38), libsvn_subr/quoprint.c (1.5),
	libsvn_subr/sorts.c (1.3), libsvn_subr/svn_string.c (1.14),
	libsvn_subr/target.c (1.9), libsvn_subr/xml.c (1.38),
	libsvn_wc/adm_crawler.c (1.110), libsvn_wc/adm_files.c (1.80),
	libsvn_wc/adm_ops.c (1.70), libsvn_wc/entries.c (1.106),
	libsvn_wc/get_editor.c (1.183), libsvn_wc/local_changes.c (1.28),
	libsvn_wc/lock.c (1.24), libsvn_wc/log.c (1.99), libsvn_wc/props.c
	(1.32), libsvn_wc/questions.c (1.53), libsvn_wc/status.c (1.34),
	libsvn_wc/util.c (1.18), libsvn_wc/wc.h (1.152),
	mod_dav_svn/activity.c (1.7), mod_dav_svn/dav_svn.h (1.34),
	mod_dav_svn/deadprops.c (1.12), mod_dav_svn/liveprops.c (1.21),
	mod_dav_svn/merge.c (1.11), mod_dav_svn/repos.c (1.51),
	mod_dav_svn/update.c (1.4), mod_dav_svn/version.c (1.27),
	tests/fs-helpers.c (1.3), tests/fs-helpers.h (1.3),
	tests/svn_test_editor.c (1.25),
	tests/libsvn_delta/deltaparse-test.c (1.70),
	tests/libsvn_delta/xml-output-test.c (1.15),
	tests/libsvn_fs/fs-test.c (1.78), tests/libsvn_fs/skel-test.c
	(1.21), tests/libsvn_ra_local/ra-local-test.c (1.10),
	tests/libsvn_repos/dir-delta-editor.c (1.3),
	tests/libsvn_repos/dir-delta-editor.h (1.3),
	tests/libsvn_subr/hashdump-test.c (1.21),
	tests/libsvn_subr/path-test.c (1.2), tests/libsvn_subr/stringtest.c
	(1.9), tests/libsvn_subr/target-test.c (1.9),
	tests/libsvn_wc/checkout-test.c (1.43),
	tests/libsvn_wc/commit-test.c (1.31):

	Rename the svn_string_t type to svn_stringbuf_t.  

2001-06-08 03:34   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/bindings/svn_error.i (1.3):

	Minor tweak for the generated comments.  

2001-06-08 03:34   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.81), libsvn_fs/fs.c (1.45),
	libsvn_fs/fs.h (1.22):

	Change the warning callback typedef to include the ptr.  
	
	* svn_fs.h (svn_fs_warning_callback_t): change typedef to include
	  "*".  
	(svn_fs_warning_func): toss the "*' on the WARNING param 
	
	* libsvn_fs/fs.c (svn_fs_set_warning_func): change params 
	  (cleanup_fs_apr): deref the -&gt;warning member 
	
	* libsvn_fs/fs.h (struct svn_fs_t): remove ptr from the -&gt;warning
	member 

2001-06-07 20:09   Branko Cibej &lt;brane@xbc.nu&gt;

	* Makefile.in (1.14), configure.in (1.91),
	ac-helpers/berkeley-db.m4 (1.8):

	Libsvn_ra_dav was missing the an explicit dependency on
	$(SVN_DB_LIBS), which didn't help building the client with
	--disable-shared (although I don't see why libtool doesn't figure
	out a transitive closure of dependent libraries when doing a static
	link). And, interestingly enough, $(SVN_DB_LIBS) wasn't being set
	anywhere. Weird.  
	
	
		* ac-helpers/berkeley-db.m4: Set SVN_DB_INCLUDES and SVN_DB_LIBS 
		if Berkeley DB was found.  
	
		* configure.in: Substitute SVN_DB_INCLUDES and SVN_DB_LIBS, and 
		add $(SVN_DB_LIBS) to SVN_RA_LIB_LINK for libsvn_ra_local.  
	
		* Makefile.in Define SVN_DB_LIBS and @SVN_DB_INCLUDES@ to 
		INCLUDES.  

2001-06-07 19:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.103), subversion/libsvn_fs/fs.c
	(1.44), subversion/libsvn_fs/fs.h (1.21),
	subversion/libsvn_fs/reps-table.c (1.1),
	subversion/libsvn_fs/reps-table.h (1.1),
	subversion/libsvn_fs/structure (1.37), notes/fs-improvements.txt
	(1.11):

	Document the plan for moving all non-constant (i.e., deltifiable)
	data out of nodes table, into new `representations' and `strings'
	tables.  Also provide header files and backend code for doing so,
	but don't call it yet.  That's tomorrow. :-) 
	
	* structure: Document new plan.  This will be a major change to the 
	filesystem; if you want to know more about it, this file's diff is
	the one to read.  
	
	* fs-improvements.txt: Refer to the new documentation in
	`structure'.  
	
	* reps-table.h, reps-table.c: New files.  
	
	* fs.h (svn_fs_t): New field for `representations' table.  
	
	* fs.c (svn_fs_create_berkeley): Create the `representations' table.  
	
	* svn_error.h (svn_errno_t): New error
	SVN_ERR_FS_NO_SUCH_REPRESENTATION.  

2001-06-07 14:25  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/reporter.c (1.9):

	* libsvn_repos/reporter.c 
	
	  (svn_repos_delete_path): Oops!  FS functions take c-strings, not 
	  svn_string_t's.  

2001-06-07 12:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.56), include/svn_repos.h (1.9),
	libsvn_ra_dav/fetch.c (1.56), libsvn_ra_local/ra_plugin.c (1.31),
	libsvn_repos/reporter.c (1.8):

	Starting fix for bug #337: An update should notice missing items and
	replace them, and print '?' next to unversioned items.  
	
	* svn_ra.h (svn_ra_reporter_t):  new vtable routine "delete_path()" 
	
	* svn_repos.h (svn_repos_delete_path):  declare.  
	
	* reporter.c (svn_repos_delete_path):  implement.  
	
	* libsvn_ra_local/ra_plugin.c (ra_local_reporter):  add 
	  svn_repos_delete_path to this static vtable.  
	
	* libsvn_ra_dav/fetch.c (ra_dav_reporter):  add dummy func to make 
	  this library compile.  
	  (reporter_delete_path):  dummy func. (gstein, have at it!) 

2001-06-07 10:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/user/manual/: adds.texi (1.4), model.texi (1.2),
	removals.texi (1.6):

	User doc tweaks, after CMike's inspection.  

2001-06-06 12:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/user/manual/: adds.texi (1.3), license.texi (1.1),
	removals.texi (1.5), svn-manual.texi (1.4):

	Tweaks to let the user manual compile correctly.  (Why does
	'texinfo' choke when compiling a table of contents?  'texi2html'
	dosen't.) 
	
	* license.texi:  new file 
	* svn-manual.texi:  comment out TOC tags for now.  
	* adds.texi, removals.texi:  use @samp instead of @command.  

2001-06-06 12:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_client/add.c (1.14):

	* libsvn_client/add.c 
	
	  (add_dir_recursive): New helper function.  
	
	  (svn_client_add): Support recursive add now.  

2001-06-06 12:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/user/manual/: adds.texi (1.2), removals.texi (1.4):

	More documentation on how adds and deletes work with versioned
	directories.  

2001-06-06 10:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.109), adm_ops.c (1.69),
	log.c (1.98):

	* libsvn_wc/adm_crawler.c 
	
	  (verify_tree_deletion): Loosen the logic for replaced dir 
	  verification here.  For now...  
	
	  (report_local_mods): Cleanup some logic for deletes and adds.  
	
	* libsvn_wc/adm_ops.c 
	
	  (svn_wc_undelete): Recurse only when asked to do so! 
	
	* libsvn_wc/log.c 
	
	  (log_do_committed): Don't blow away the administrative subdir on the 
	  "replace" case -- only on "delete".  

2001-06-05 17:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/user/manual/: adds.texi (1.1), removals.texi (1.3),
	svn-manual.texi (1.3):

	Saving work.  

2001-06-05 15:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/user/manual/: model.texi (1.1), removals.texi (1.2),
	svn-manual.texi (1.2):

	Check in some descriptions of removal behavior.  

2001-06-05 13:29  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/clients/cmdline/util.c (1.2):

	* clients/cmdline/util.c 
	
	  (svn_cl__args_to_target_array): Little post-Stein-ian fix-em-ups.  

2001-06-05 09:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_test_main.py (1.10):

	(svn_binary): Point to new location of the `svn' binary.  

2001-06-05 09:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.13):

	Correct path to command line client code.  

2001-06-05 09:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.92), build.conf (1.13),
	subversion/clients/cmdline/.cvsignore (1.1),
	subversion/clients/cmdline/README (1.1),
	subversion/clients/cmdline/TODO (1.1),
	subversion/clients/cmdline/add-cmd.c (1.1),
	subversion/clients/cmdline/checkout-cmd.c (1.1),
	subversion/clients/cmdline/cl.h (1.1),
	subversion/clients/cmdline/commit-cmd.c (1.1),
	subversion/clients/cmdline/delete-cmd.c (1.1),
	subversion/clients/cmdline/diff-cmd.c (1.1),
	subversion/clients/cmdline/diff.c (1.1),
	subversion/clients/cmdline/help-cmd.c (1.1),
	subversion/clients/cmdline/import-cmd.c (1.1),
	subversion/clients/cmdline/main.c (1.1),
	subversion/clients/cmdline/propget-cmd.c (1.1),
	subversion/clients/cmdline/proplist-cmd.c (1.1),
	notes/fs-improvements.txt (1.10),
	subversion/clients/cmdline/props.c (1.1),
	subversion/clients/cmdline/propset-cmd.c (1.1),
	subversion/clients/cmdline/status-cmd.c (1.1),
	subversion/clients/cmdline/status.c (1.1),
	subversion/clients/cmdline/subversion_client.dsp (1.1),
	subversion/clients/cmdline/trace-commit.c (1.1),
	subversion/clients/cmdline/trace-update.c (1.1),
	subversion/clients/cmdline/update-cmd.c (1.1),
	subversion/clients/cmdline/util.c (1.1):

	Move command line client from client/ to clients/cmdline/, as we 
	discussed sometime in the last ice age: 
	
	* subversion/clients/cmdline/, subversion/clients/cmdline/tests/:
	New dirs.  
	
	* build.conf (paths, svn): Adjust path to command line client dir.  
	Also, fix the title line at top of file, which is unrelated to the 
	rest of this change.  
	
	* subversion/client/, subversion/client/tests/: Moved all 
	version-controlled files moved to above new dirs: 
	
	     README 
	     TODO 
	     checkout-cmd.c 
	     diff-cmd.c 
	     propget-cmd.c 
	     proplist-cmd.c 
	     props.c 
	     propset-cmd.c 
	     status-cmd.c 
	     trace-commit.c 
	     help-cmd.c 
	     diff.c 
	     import-cmd.c 
	     trace-update.c 
	     subversion_client.dsp 
	     commit-cmd.c 
	     update-cmd.c 
	     status.c 
	     add-cmd.c 
	     cl.h 
	     delete-cmd.c 
	     main.c 
	     util.c 
	     .cvsignore 
	
	     tests/svn-test.sh 
	     tests/svn-test2.sh 
	     tests/.cvsignore 

2001-06-05 04:58   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.90):

	Fix the installation process: it should copy, not move.  
	
	Submitted by: Mo DeJong &lt;mdejong@cygnus.com&gt; 

2001-06-04 18:34   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.89), gen-make.py (1.19):

	*) configure.in: tweak the INSTALL macro again 
	
	*) gen-make.py: in the INSTALL_INCLUDE lines, add $(top_srcdir) to
	     the source file.  
	
	Submitted by: Mo DeJong &lt;mdejong@cygnus.com&gt; 

2001-06-04 17:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* Makefile.in (1.13):

	Allow design doc to build again.  

2001-06-04 17:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: README (1.9), WritingChangeLogs.txt (1.3),
	architecture.texi (1.16), client.texi (1.35), deltas.texi (1.7),
	future.texi (1.12), goals.texi (1.11), license.texi (1.4),
	model.texi (1.11), protocol.texi (1.7), server.texi (1.38),
	svn-design.texi (1.17), programmer/WritingChangeLogs.txt (1.1),
	programmer/design/architecture.texi (1.1),
	programmer/design/client.texi (1.1), programmer/design/deltas.texi
	(1.1), programmer/design/future.texi (1.1),
	programmer/design/goals.texi (1.1), programmer/design/license.texi
	(1.1), programmer/design/model.texi (1.1),
	programmer/design/protocol.texi (1.1),
	programmer/design/server.texi (1.1),
	programmer/design/svn-design.texi (1.1), user/manual/README (1.1),
	user/manual/removals.texi (1.1), user/manual/svn-manual.texi (1.1):

	Revamping the organization of the doc/ directory.  Take a look-see
	in the top-level of README.  
	
	As a rule, each texinfo document needs to be isolated in its own 
	directory (since each doc typically consists of multiple .texi files 
	and leaves a mess when compiling.)  The Right solution for building 
	docs is to be able to describe them in our top-level build.conf. 
	But for now, we'll just enable our "design" doc to build directly.  

2001-06-04 14:50   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.88):

	Fix typo in setting up the INSTALL program.  
	
	Submitted by: Mo DeJong &lt;mdejong@cygnus.com&gt; 

2001-06-04 11:55  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_wc.h (1.99), libsvn_wc/adm_ops.c (1.68),
	libsvn_wc/status.c (1.33):

	* include/svn_wc.h 
	
	  (enum svn_wc_status_kind): Added "replaced" kind.  
	
	* client/status.c 
	
	  (generate_status_codes): Added 'R' code for entries that are 
	  replaced (deleted + added) 
	
	* libsvn_wc/adm_ops.c 
	
	  (svn_wc_add_directory): Bug fix: make sure that "this_dir" entry for 
	  added directory behaves the same way the entry in its parent dir 
	  would.  
	
	* libsvn_wc/status.c 
	
	  (assemble_status): Make new case for "replaced" entries.  

2001-06-04 07:38   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/bindings/: README (1.2), apr.i (1.2), svn_error.i
	(1.2), svn_fs.i (1.2), svn_string.i (1.2), svn_types.i (1.2):

	Continued work on the SWIG bindings. Focusing on svn_fs.i (and
	required supporting types).  

2001-06-04 03:19   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.12):

	more vpath work. bug fix for installation.  
	
	Submitted by: Mo DeJong &lt;mdejong@cygnus.com&gt; 

2001-06-04 02:41   Greg Stein &lt;gstein@lyra.org&gt;

	* .cvsignore (1.9), subversion/.cvsignore (1.2),
	subversion/bindings/.cvsignore (1.2),
	subversion/bindings/guile/.cvsignore (1.2),
	subversion/bindings/java/.cvsignore (1.2),
	subversion/bindings/perl/.cvsignore (1.2),
	subversion/bindings/python/.cvsignore (1.2), doc/.cvsignore (1.7),
	expat-lite/.cvsignore (1.3), subversion/bindings/ruby/.cvsignore
	(1.2), subversion/bindings/tcl/.cvsignore (1.2),
	subversion/include/.cvsignore (1.2),
	subversion/libsvn_client/.cvsignore (1.3),
	subversion/libsvn_delta/.cvsignore (1.7),
	subversion/libsvn_fs/.cvsignore (1.4, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done),
	subversion/libsvn_ra/.cvsignore (1.2),
	subversion/libsvn_ra_dav/.cvsignore (1.2),
	subversion/libsvn_ra_local/.cvsignore (1.2),
	subversion/libsvn_repos/.cvsignore (1.2),
	subversion/libsvn_subr/.cvsignore (1.5),
	subversion/libsvn_wc/.cvsignore (1.7),
	subversion/mod_dav_svn/.cvsignore (1.3),
	subversion/svnadmin/.cvsignore (1.2), subversion/tests/.cvsignore
	(1.3), subversion/tests/clients/cmdline/.cvsignore (1.3),
	subversion/tests/libsvn_delta/.cvsignore (1.10),
	subversion/tests/libsvn_fs/.cvsignore (1.6),
	subversion/tests/libsvn_ra_local/.cvsignore (1.3),
	subversion/tests/libsvn_repos/.cvsignore (1.2),
	subversion/tests/libsvn_subr/.cvsignore (1.9),
	subversion/tests/libsvn_wc/.cvsignore (1.7):

	Remove some items that we don't generate from the .cvsignore files.
	Remove several .cvsignore files from directories where nothing ever
	gets built.  
	
	For the most part, the following were removed: Makefile,
	Makefile.in, ChangeLog*, .deps, tests.log 

2001-06-04 02:24   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/Makefile.am (1.28), subversion/bindings/Makefile.am
	(1.2), subversion/bindings/guile/Makefile.am (1.2),
	subversion/bindings/java/Makefile.am (1.2),
	subversion/bindings/perl/Makefile.am (1.2),
	subversion/bindings/python/Makefile.am (1.2),
	subversion/bindings/ruby/Makefile.am (1.2),
	subversion/bindings/tcl/Makefile.am (1.2),
	subversion/libsvn_client/Makefile.am (1.16), doc/Makefile.am (1.4),
	expat-lite/Makefile.am (1.4), subversion/libsvn_delta/Makefile.am
	(1.19), subversion/libsvn_fs/Makefile.am (1.43),
	subversion/libsvn_ra/Makefile.am (1.2),
	subversion/libsvn_ra_dav/Makefile.am (1.12),
	subversion/libsvn_ra_local/Makefile.am (1.9),
	subversion/libsvn_repos/Makefile.am (1.5),
	subversion/libsvn_subr/Makefile.am (1.18),
	subversion/libsvn_wc/Makefile.am (1.29),
	subversion/mod_dav_svn/Makefile.am (1.18),
	subversion/svnadmin/Makefile.am (1.4), subversion/tests/Makefile.am
	(1.17), subversion/tests/libsvn_delta/Makefile.am (1.18),
	subversion/tests/libsvn_fs/Makefile.am (1.18),
	subversion/tests/libsvn_ra_local/Makefile.am (1.7),
	subversion/tests/libsvn_repos/Makefile.am (1.4),
	subversion/tests/libsvn_subr/Makefile.am (1.21),
	subversion/tests/libsvn_wc/Makefile.am (1.21):

	Bye bye, old automake system! 

2001-06-04 02:23   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.91):

	ho fuggin ho 

2001-06-04 01:55   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.11), configure.in (1.87), gen-make.py (1.18):

	Add some logic for srcdir != builddir builds.  
	
	* Makefile.in: rename mkinstalldirs symbol to MKDIR.
	    build-outputs.mk now defines BUILD_DIRS rather than CLEAN_DIRS, so
	    change the local-clean rule. add the "mkdir-init" rule which uses
	    BUILD_DIRS to create build directories.  
	
	* configure.in: (from Mo DeJong) add $(top_srcdir) into the
	    INCLUDE_OUTPUTS symbol so the file can be picked up from the srcdir.  
	    add call to "make mkdir-init" when srcdir!=builddir.  
	
	* gen-make.py: in the output (build-outputs.mk): rename CLEAN_DIRS
	    to BUILD_DIRS. rename mkinstalldirs to MKDIR.  

2001-06-04 01:40   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.10):

	Add logic for building the docs. New targets are "doc" for the
	"typical" stuff (info, txt, html). doc-* will create the varieties
	of formats.  
	
	There is no longer for ensuring proper tools are present. If a rule
	fails because a tool isn't there... deal with it. :-) 

2001-06-01 18:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.9):

	Submitted by: Mike Sussman &lt;msussman@collab.net&gt;: 
	
	(merge_from_wc_top): New test for merging.  
	(test_list): Run it.  

2001-06-01 18:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_delta/random-test.c (1.23):

	* client/main.c, tests/libsvn_delta/random-test.c: 
	
	(main): Rename `optarg' to `opt_arg' to avoid compilation warning 
	about shadowing a global variable.  

2001-06-01 17:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/: local_tests.py (1.8),
	svn_test_main.py (1.9):

	Submitted by: Mike Sussman &lt;msussman@collab.net&gt;: 
	
	* subversion/tests/clients/cmdline/local_test.py
	(update_from_wc_top): Removed new lines characters from expected
	disk tree.  Changed expected status tree root node to wc_backup.  
	
	Test 7, the "update '.' in working copy" test had been failing of 
	late.  I found two reasons - one was that files in the actual tree 
	were getting appended (then commited and updated) differently than 
	files in the expected tree were - specifically, the expected tree 
	files were getting new line characters.  Also, the expected tree was 
	looking for the root node to be called wc_top, while the actual 
	updated tree was named wc_top_backup.  These changes now cause test
	7 to pass on my Linux 7.0 box.  However, Ben Collins-Sussman - on 
	FreeBSD 4.2 - is still having unknown problems running test
	7...We'll investigate it tomorrow.  
	
	* subversion/tests/clients/cmdline/svn_test_main.py (client_test): 
	Added ability to list test description with test numbers by further 
	parsing of argv.  
	
	Apparently we can already run individual tests by specifying "python 
	local_tests.py n" where n is the actual test number.  This is all
	well and good, except that as our test suite grows it'll be helpful
	to know which test corresponds to which number.  Thus, one can now
	do a "python local_tests.py list" which will actually list test
	numbers with their respective descriptions.  

2001-06-01 17:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.22):

	New status page for June 1st.  

2001-06-01 16:32   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.9), build.conf (1.12), configure.in (1.86):

	Some tweaks towards making vpath builds work correctly.  
	
	* Makefile.in: define macros for a (relative) path to the build and
	    source directories, and an absolute path to the build and source
	    dirs. The latter are needed when we "cd" from the top-level (e.g.
	    linking). The LIBTOOL macro is defined manually rather than via
	    @LIBTOOL@; the normal autoconf substitution uses top_builddir which
	    is now "relative", yet we need LIBTOOL to be absolute for the
	    cd/link steps. "make check" no longer needs to compute abs_srcdir
	since we have a MAKE macro for it.  
	
	* build.conf: use abs_builddir for items that go into link lines 
	
	* configure.in: refer to the APR libraries using an absolute path.
	    the INSTALL script can be relative since we only run it from the top
	    level.  Convert the SVN_RA_LIB_LINK macros to use absolute
	    references.  Substitute abs_srcdir for use by the Makefile.  

2001-06-01 12:03  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.67), entries.c (1.105), log.c
	(1.97):

	* libsvn_wc/log.c 
	
	  (log_do_modify_entry): Bug fix (IssueZilla #xxx) - some entries file 
	  were getting text-time's and prop-time's of "working", which is a 
	  special string used in logfiles that should NOT show up in entries 
	  file.  Just a little oops with big consequences, really, that's
	  all.  
	
	  (log_do_committed): Make sure we update the flags in the parent 
	  directory of a committed directory.  
	
	* libsvn_wc/entries.c: 
	
	  (svn_wc__atts_to_entry): Docstring edit.  
	
	* libsvn_wc/adm_ops.c: 
	
	  (svn_wc_set_revision): Don't mess with the state flags here, the log 
	  runner can take care of that.  

2001-06-01 10:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_faq.html (1.3):

	Clarify/emphasize a few things.  

2001-06-01 04:40   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/DESIGN-NOTES.txt (1.2):

	obsolete a LONG time ago 

2001-06-01 04:06   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.8):

	gah. stupid bug.  

2001-06-01 03:47   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.7):

	Fix up the "local-clean" rule to clean .la-a items and to not worry
	about things that won't be seen in SVN build dirs (e.g. *.so and
	*.a).  
	
	Fix "local-extraclean" to toss some libtool files from ac-helpers.  
	
	Fix "extraclean" handling to not recurse into Neon, which does not
	have this rule.  

2001-06-01 03:15   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.6), build.conf (1.11), gen-make.py (1.17):

	Bug fix for issue #397.  
	
	Enable building of external libraries (e.g. Neon and APR).  
	
	* Makefile.in: add "external-*" rules. Rename existing rules to
	    "local-*".  The new external rules depends upon the new macro
	EXTERNAL_PROJECT_DIRS.  
	
	* build.conf: toss the [external] section; we can easily hard-code
	    this stuff right into Makefile.in rather than process it via
	gen-make.  
	
	* gen-make.py: remove 'external' from the predefined sections list.  

2001-06-01 02:41   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.5), build.conf (1.10), configure.in (1.85),
	gen-make.py (1.16), ac-helpers/svn-define-libs.m4 (1.4):

	Bug fix for issue #397.  
	
	Fix up problems with build/link when --disable-shared is used.  
	
	The root problem was the use of SVN_CLIENT_DEPS. This didn't truly
	handle the dependencies and link-time behavior properly (in the
	absence of a recursive make with ordered subdir builds).  
	
	The fix is to recognize that the dependencies are caused by
	libsvn_ra, rather than the client. Next, to associate those
	dependencies directly with libsvn_ra. libtool provides for this
	within the .la as long as you depend directly on .a files rather
	than .la files (fixed in libtool 1.4). Since we only need the
	dependencies during disable-shared, the focus on .a files is 
	possible. As a result, when programs link against libsvn_ra.la, they 
	automatically pull in the other libraries (ra_dav and the fs-based
	libs).  
	
	* Makefile.in: toss *_CLIENT_DEPS and define SVN_RA_LIB_DEPS and 
	    SVN_RA_LIB_LINK. _DEPS for dependency handling and _LINK for
	    what occurs within the link line. For static builds, these are
	    filled in. For shared builds, they are empty.  
	
	    Remove SVN_NEON_LIBS macro (unused).  
	
	* gen-make.py: add recognition of add-deps in a definition to add
	    arbitrary text to a dependency line.  
	
	* build.conf: remove use of SVN_CLIENT_DEPS (see above). expand
	    definition of libsvn_ra to conditionally include more dependencies,
	    and to link against additional libraries.  
	
	* configure.in: no need to SVN_LIBSVN_* so toss the sinclude() of 
	    svn-define-libs.m4. SVN_NEON_LIBS, SVN_TESTS_MAIN_LIBS,
	    FS_BASED_DIRS, and FS_BASED_TESTS are no longer used; remove
	    them. convert definition of LIBSVN_CLIENT_DEPS to SVN_RA_LIB_DEPS
	and SVN_RA_LIB_LINK.  
	
	* svn-define-libs.m4: no longer used; removed.  

2001-05-31 22:02   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/project_faq.html (1.2):

	typo. plate. plate o' typoes.  

2001-05-31 21:54   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_nav.html (1.8):

	Fix separators on nav bar.  

2001-05-31 18:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/: project_faq.html (1.1), project_nav.html (1.7):

	Added a FAQ to website.  

2001-05-31 11:10  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.108), adm_ops.c (1.66),
	entries.c (1.104), log.c (1.96):

	* subversion/libsvn_wc/adm_crawler.c 
	
	  (do_apply_textdelta): Clean up bad logic conversion that occured 
	  in my recent Big Ol' Change.  
	
	* subversion/libsvn_wc/adm_ops.c 
	
	  (svn_wc_add_file, svn_wc_add_directory): Fix some oopses that 
	  occurred in the recent Big Ol' Change.  
	
	  (svn_wc_undelete): Add some real guts for this function.  
	
	* subversion/libsvn_wc/entries.c 
	
	  (fold_state_changes): Uh...make the error messages at least report 
	  the correct name of the function.  
	
	* subversion/libsvn_wc/log.c 
	
	  (log_do_delete_entry): Minor segfault protection.  
	
	  (log_do_committed): Change formatting (and set) of modification 
	  flags in call to svn_wc__entry_modify.  

2001-05-30 11:13  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_error.h (1.102), include/svn_wc.h
	(1.98), libsvn_wc/adm_crawler.c (1.107), libsvn_wc/adm_ops.c
	(1.65), libsvn_wc/entries.c (1.103), libsvn_wc/get_editor.c
	(1.182), libsvn_wc/log.c (1.95), libsvn_wc/props.c (1.31),
	libsvn_wc/questions.c (1.52), libsvn_wc/status.c (1.32),
	libsvn_wc/wc.h (1.151):

	WOOT! WOOT!  WARNING: Big ol' change follows.  
	
	While the scope of the change is no larger than the libsvn_wc 
	module...it's not much smaller, either. ;-) 
	
	* include/svn_wc.h 
	
	  (enum svn_wc_schedule_t, enum svn_wc_existence_t): New types for 
	  tracking state.  
	
	  (typedef struct svn_wc_entry_t): New state tracking variables.  
	
	* libsvn_wc/wc.h 
	
	  (svn_wc__entry_fold_sync, svn_wc__entry_fold_sync_intelligently): 
	  Removed these functions.  Instead, use...  
	
	  (svn_wc__entry_modify): New function for entry modification.  Lots 
	  of flags added for use with this function, as well.  
	
	  (svn_wc__atts_to_entry): New function for converting an entries 
	  attribute hash into an svn_wc_entry_t entry structure.  
	
	* libsvn_wc/adm_ops.c 
	
	  Instances of svn_wc__entry_fold_sync_intelligently and 
	  svn_wc__entry_fold_sync changed to use svn_wc__entry_modify.  
	
	  (svn_wc_add_file, svn_wc_add_directory): Added some sanity checks.  
	
	* libsvn_wc/get_editor.c 
	
	  Instances of svn_wc__entry_fold_sync_intelligently and 
	  svn_wc__entry_fold_sync changed to use svn_wc__entry_modify.  
	
	* libsvn_wc/log.c 
	
	  Instances of svn_wc__entry_fold_sync_intelligently and 
	  svn_wc__entry_fold_sync changed to use svn_wc__entry_modify.  
	
	  (log_do_modify_entry): Now use factorized code in
	  svn_wc__atts_to_entry.  
	
	* libsvn_wc/props.c 
	
	  (svn_wc__do_property_merge): Minor patch to use renamed #define.  
	
	* libsvn_wc/questions.c 
	* libsvn_wc/status.c 
	
	  Minor patches to use new entry state variables.  
	
	* libsvn_wc/adm_crawler.c 
	
	  Patches to use new entry state variables.  
	
	  (verify_tree_deletion): Renamed from verify_deleted_tree.  
	
	* libsvn_wc/entries.c 
	
	  Instances of svn_wc__entry_fold_sync_intelligently and 
	  svn_wc__entry_fold_sync changed to use svn_wc__entry_modify.  Lots 
	  of modified uses of the new entry state variables.  
	
	  (svn_wc__atts_to_entry): New function for converting an entries 
	  attribute hash into an svn_wc_entry_t entry structure.  
	
	  (handle_start_tag): Now use factorized code in
	  svn_wc__atts_to_entry.  
	
	  (normalize_entry): Write out the new entries XML.  
	
	  (fold_state_changes): Renamed from interpret_changes, gutted, and 
	  rewritten with new state stuffs in mind.  
	
	  (internal_fold_sync, svn_wc__entry_fold_sync, 
	  svn_wc__entry_fold_sync_intelligently): Obsolete functions
	  removed.  
	
	  (svn_wc__entry_modify): New function for entry modification.  
	
	* include/svn_error.h 
	
	  (SVN_ERR_WC_ENTRY_ATTRIBUTE_INVALID): New error type.  

2001-05-30 06:33   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.4), gen-make.py (1.15):

	* Makefile.in: toss the SVN_EXPAT_LIBS macro (unused). add some
	    initial (and unused) gunk for doc targets. the "check" target should
	    depend on ALL test programs rather than just the ones it will
	    actually run. add START and END lines into the log file.  
	    HACK: chmod a+x the test prog. some .sh scripts aren't +x when
	      they come out of CVS. need to tweak the CVS repository to fix.  
	
	* gen-make.py: generate the TEST_DEPS macro 

2001-05-30 06:26   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/svn_tests_main.c (1.22):

	(main): watch out for (and skip) the srcdir argument which is passed
	  during a standard "make check" execution.  

2001-05-30 06:15   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_wc/checkout-test.sh (1.14):

	no need for announcements; controlling script will handle that.  

2001-05-30 06:05   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/: libsvn_fs/run-fs-tests.sh (1.5),
	libsvn_repos/run-repos-tests.sh (1.2), libsvn_wc/checkout-test.sh
	(1.13):

	Various tweaks to the test scripts 
	- $1 will be the top source directory (absolute path) 
	- stop logging to private tests.log files 

2001-05-30 05:59   Greg Stein &lt;gstein@lyra.org&gt;

	* build.conf (1.9), configure.in (1.84):

	no need to refer to Expat via SVN_EXPAT_LIBS; we can use our
	standard intra-library dependency stuff.  

2001-05-30 05:11   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/util.c (1.16):

	forgot that the return value of apr_uri_parse_components is
	different.  

2001-05-30 02:53   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/util.c (1.15):

	compensate for recent move of URI parsing stuff 

2001-05-29 20:47   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.3):

	Revert some changes that weren't ready (and weren't discussed in my
	log message). These will return with a proper log message, and after
	proper testing.  

2001-05-29 20:37   Greg Stein &lt;gstein@lyra.org&gt;

	* Makefile.in (1.2), build.conf (1.8), configure.in (1.83):

	*) add building of subversion/tests/libsvn_test_fs 
	*) FS_LIBS / SVN_TEST_FS_LIBS are no longer needed 

2001-05-29 20:34   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.14):

	small tweak: move collection of target dirs to the first pass.  

2001-05-29 20:29   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.13):

	Simplifications: 
	- build_targets{} not needed 
	- prep install{} in the first pass 
	- store objects rather than names into install{} 
	- change CLEAN_FILES generation to use objects rather than
	  build_targets{} (and toss _filter_clean_files) 
	- change shortcut generation to use targets{} rather than
	build_targets{} 

2001-05-29 20:10   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.12):

	Use two passes for the output generation. First pass collects basic
	data and computes some simple values for each target; second pass
	generates the output. This was necessary because one target may need
	to refer to another target's output file; in the old way, we may not
	have seen the dependent target (yet) while processing the user of
	that target.  
	
	Information is stored into objects of a new Target class. This keeps
	the items more closely associated and easier to access.  
	
	Revise intra-target dependencies: write out the final output, rather
	than the shortcut name for the dependent target. "Make" didn't see a
	"libsvn_fs" file, so it didn't know its timestamp, so it kept
	rebuilding items dependent upon that. Using the .la fixes this
	problem.  
	
	No longer sort the group targets (e.g. the "programs" or "fs-libs").
	We rely on make to order them appropriately.  

2001-05-29 18:47   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/.cvsignore (1.4):

	more stuff not needed 

2001-05-29 18:36   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.11):

	*) for each target, add its dependencies on other targets 
	*) begin a bit of work for doc targets 

2001-05-29 18:32   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/: .cvsignore (1.3), install.sh (1.1):

	add an install.sh to shut up configure. we don't actually use this;
	we use apr/build/install.sh. a longer term solution may be to use
	apr/build as our auxilliary directory (when we eliminate our own
	libtool copy, this should be doable).  

2001-05-29 14:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_short (1.7):

	Promote 'svn cleanup' to an M3 requirement.  

2001-05-29 13:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/dav_setup.txt (1.7):

	Some tweaks, from when Ben and I went through this process recently.  

2001-05-29 09:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* NEWS (1.2):

	De-obsolesce this file.  

2001-05-28 02:25   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* autogen.sh (1.40):

	Added a check for that gen-make.py runs fine, as I noticed this
	script didn't notice my absense of a python installation and then it
	couldn't make a proper makefile setup. Now it exits with an error
	message if this happens! PR: Obtained from: Submitted by: Reviewed
	by: 

2001-05-27 18:38   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/svn-apache.m4 (1.12):

	The Apache include directory is flat nowadays. Remove the extra
	include directories.  

2001-05-25 05:24   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.82):

	Be more direct about where people can find Berkeley DB.  
	
	Submitted by: Mo DeJong &lt;mdejong@cygnus.com&gt; 

2001-05-25 05:17   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.10):

	D'oh! I had both build_dirs and proj_dirs doing the same thing.
	Combine them, and use "target_dirs" instead since the dirs are
	directly related to the build targets.  

2001-05-24 12:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/variance-adjusted-patching.html (1.2):

	Expand conflict discussion.  
	
	(Note to those who may wonder why the heck I'm working on this when 
	there are so many important coding tasks that need attention: this
	is actually part of some other, non-Subversion work I'm doing, but
	since it's relevant to Subversion, I thought I'd check it in here.) 

2001-05-24 11:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.31):

	Changed section on building from a working copy, now that Greg's got 
	the new build system in place.  

2001-05-24 08:40   Greg Stein &lt;gstein@lyra.org&gt;

	* .cvsignore (1.8), Makefile.in (1.1), autogen.sh (1.39),
	build.conf (1.7), configure.in (1.81), ac-helpers/.cvsignore (1.2),
	ac-helpers/svn-apache.m4 (1.11):

	Switch over to the new non-recursive build system.  
	
	* .cvsignore: toss some old items, add tests.log 
	
	* autogen.sh: remove the automake stuff. use apr/build/buildcheck.sh
	    for a bit of safety. handle setting up libtool ourselves (rather
	    than using automake to do it). run gen-make.py to create
	build-outputs.mk.  
	
	* build.conf: add the libexpat and path-test projects 
	
	* configure.in: sinclude() a number of files, rather than using
	    aclocal.m4.  stop using AM_ automake macros; use standard AC_
	    equivalents.  SVN_INCLUDES now refers to the top-level directory,
	    too. SUBST items for INSTALL and MKDIR. SUBST two new items for
	    conditional FS handling: FS_RULES (what make target rules to build)
	    and FS_LIBS (what add'l libraries a test program should link
	    against). clean up CFLAGS when maintainer-mode is set since APR does
	    this (and exports it) now. SUBST abs_builddir for the Makefile. add
	    platform-specific mechanism for including makefiles. stop generating
	    so many Makefiles; we just have one AC_OUTPUT Makefile now.  
	
	* ac-helpers/.cvsignore: add libtool.m4 (a copy from /usr/share) 
	
	* ac-helpers/svn-apache.m4: set and SUBST the INSTALL_APACHE_RULE
	    variable to specify which apache make target rule to use for
	    installation. define and SUBST a new BUILD_APACHE_RULE for building
	    mod_dav_svn. the conditional and APACHE_MODULES are now obsolete.  

2001-05-24 05:48   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.9):

	Add optional header dependency generation. It runs by default, but
	can be disabled by passing -s on the command line to gen-make.py.  

2001-05-23 16:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_ops.c (1.64):

	(svn_wc_remove_from_revision_control) bugfix: when an update tries
	to remove a file or dir, *preserve* any files that are locally
	modified.  

2001-05-23 15:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.63), log.c (1.94):

	Bugfixes to make updates work --when the update involves removing 
	files or dirs.  
	
	* adm_ops.c (svn_wc_remove_from_revision_control):  bugfixes; remove 
	  file from entries file *after* looking for local mods, duh.  And 
	  append the filename to the path when removing it.  
	
	* log.c (log_do_delete_entry):  decide if 'name' is a file or dir,
	  and call svn_wc_remove_from_revision_control in the appropriate
	manner.  

2001-05-23 14:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.101), include/svn_wc.h
	(1.97), libsvn_wc/adm_files.c (1.79), libsvn_wc/adm_ops.c (1.62),
	libsvn_wc/log.c (1.93), libsvn_wc/wc.h (1.150),
	tests/clients/cmdline/local_tests.py (1.7):

	Directory deletions should now work on the client side.  If you do a 
	'svn rm dir' and commit, all of the SVN/ dirs are recursively
	removed.  
	
	(TODO:  add a -f (force) flag option to recursively nuke the dir
	itself.) 
	
	Note: the way in which we call svn_wc_remove_from_revision_control() 
	is still being discussed; it may change soon.  
	
	
	* adm_ops.c, svn_wc.h (svn_wc_remove_from_revision_control): total 
	  rewrite.  The old didn't even correctly preserve local mods. :) 
	
	* svn_error.h (SVN_ERR_WC_LEFT_LOCAL_MOD):  special value
	  potentially returned by svn_wc_remove_from_revision_control(),
	  indicating that locally modified files were left behind.  
	
	* adm_files.c (svn_wc__adm_destroy):  make this function un-suck, by 
	  calling apr_dir_remove_recursively() on SVN/.  
	
	  (svn_wc__adm_path_exists):  new convenience routine.  
	
	* log.c (remove_from_revision_control):  removed, promoted to public
	function.  
	
	  (recursive_rc_remove):  deleted, no longer needed.  
	
	  (log_do_delete_entry):  call svn_wc_remove_from_revision_control().  
	
	  (log_do_committed):  if a committed file is marked for deletion, 
	  call svn_wc_remove_from_revision_control.  if a committed dir is 
	  marked for deletion, drop a 'KILLME' file into the administrative 
	  area.  
	
	  (svn_wc__run_log):  at the very end, after removing the logfile, 
	  check for a 'KILLME' file and possibly run 
	  svn_wc_remove_from_revision_control().  
	
	* wc.h (SVN_WC__ADM_KILLME):  new #define filename.  
	  (svn_wc__adm_path_exists):  declare.  

2001-05-22 16:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/variance-adjusted-patching.html (1.1):

	Some stuff I've been thinking about.  Not immediately relevant, but 
	will be when we start trying to do merges better than CVS.  

2001-05-22 13:15   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/include/svn_types.h (1.63):

	* svn_types.h: Don't use ## when concatenating string tokens.  

2001-05-22 13:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* PORTING (1.5):

	update freebsd info.  

2001-05-22 07:08   Greg Stein &lt;gstein@lyra.org&gt;

	* build.conf (1.6), gen-make.py (1.8):

	Many of the tests aren't actually being run, or some of them are run
	via scripts. Enable marking some of the test programs to be skipped.  

2001-05-21 22:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_io.h (1.37), libsvn_subr/io.c (1.36):

	New function to recursively remove a dir.  It's written entirely
	using apr routines -- perhaps apr wants it?  I've tested to make
	sure this routine works (but not checked in the test.) 
	
	* io.c (apr_dir_remove_recursively): the sequel to apr_remove_dir 
	  (which only removes empty dirs), except this one is equivalent to 
	  'rm -rf'.  
	
	* svn_io.h (apr_dir_remove_recursively):  declare.  

2001-05-21 15:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.106):

	(report_local_mods):  if a directory is *only* marked for deletion,
	do not recurse into it.   Also:  if the current directory is marked
	for addition, ignore all deleted items and local mods;  only further 
	additions are noticed.  

2001-05-21 09:48  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_wc.h (1.96), libsvn_wc/adm_crawler.c
	(1.105), libsvn_wc/adm_ops.c (1.61), libsvn_wc/entries.c (1.102),
	libsvn_wc/log.c (1.92), libsvn_wc/status.c (1.31):

	* include/svn_wc.h 
	
	  (SVN_WC_ENTRY_ADD): Renamed from SVN_WC_ENTRY_ADDED for more precise 
	  representation of the flag syntax.  
	
	  (SVN_WC_ENTRY_DELETE): Renamed from SVN_WC_ENTRY_DELETED for more 
	  precise representation of the flag syntax, and to make way for an 
	  actual "deleted" flag coming soon to a version control system near 
	  you.  
	
	  All existing uses of these two flags changed with M-x
	  tags-query-replace ...  Hoping I got 'em all.  
	
	  (SVN_WC_ENTRY_DELETED): New flag for when something has been deleted 
	  from revision control but needs to still live in the entries file 
	  (talk to Karl...I can't remember the detailed reasoning for this).  
	
	  (SVN_WC_ENTRY_ATTR_DELETED): New #define for the "deleted" string 
	  soon to be found in some select entries files.  
	
	* libsvn_wc/adm_crawler.c 
	* libsvn_wc/adm_ops.c 
	* libsvn_wc/entries.c 
	* libsvn_wc/log.c 
	* libsvn_wc/status.c 
	
	  Sweeping renames of entries flags above.  

2001-05-20 22:04  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_client.h (1.34), include/svn_wc.h
	(1.95), libsvn_client/add.c (1.13), libsvn_client/delete.c (1.10),
	libsvn_wc/adm_ops.c (1.60):

	* client/cl.h 
	
	  (svn_cl__cmd_proc_t): Added svn_cl__unadd and svn_cl__undelete to 
	   this function prototypes thingamabob.  
	
	* client/add-cmd.c 
	
	  (svn_cl__add): Some prep work for when this thing understands a 
	  request for recursive addition.  
	
	  (svn_cl__unadd): New function for un-adding files and dirs.  
	
	* client/delete-cmd.c 
	
	  (svn_cl__undelete): New function for un-deleting files and dirs.  
	
	* client/main.c 
	
	  (svn_cl__cmd_table): Added "unadd (unad)" and "undelete (undel, 
	  unrm)" subcommand support.  
	
	* include/svn_client.h 
	
	  (svn_client_add): Added RECURSIVE argument.  
	
	  (svn_client_unadd, svn_client_undelete): New function prototypes.  
	
	* libsvn_client/add.c 
	
	  (svn_client_add): Added RECURSIVE argument/support.  
	
	  (svn_client_unadd): New function.  
	
	* libsvn_client/delete.c 
	
	  (svn_client_delete): Removed obsolete todo.  
	
	  (svn_client_undelete): New function.  
	
	* include/svn_wc.h 
	
	  (svn_wc_unadd, svn_wc_undelete): New function prototypes.  
	
	* libsvn_wc/adm_ops.c 
	
	  (enum mark_tree_state): Enum for mark_tree helper function.  
	
	  (mark_tree): Renamed for delete_tree, this sucka now does at least a 
	  couple of recursionish things.  
	
	  (svn_wc_unadd): New function -- doesn't really work.  
	
	  (svn_wc_undelete): New function -- DEFINITELY doesn't work.  

2001-05-20 21:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.101):

	* libsvn_wc/entries.c 
	
	  (interpret_changes): Be a little more picky about disallowing 
	  certain adds.  

2001-05-20 07:27   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.7):

	"libtool --mode=link" generates an output file which will link the
	real thing upon the first execution. When it does this, it uses the
	parameters (files and libs) passed on the command line and *assumes*
	they are relative to the program being linked. This means we must
	whack all the parameters to be relative to the target, rather than
	the top of the SVN tree; then we must cd into the target dir to
	perform the libtool link.  
	
	* change the output to have target_DEPS for the top-relative
	  dependencies and target_OBJECTS for the target-relative objects 
	* add a function to compute "../../" type strings to "retreat" from
	  the target directory up to the top dir, so we can compute relative
	  paths for the dependent libraries 
	  (note: libraries which aren't targets (such as $(SVN_APR_LIBS))
	   must be absolute since we won't be doing the retreat processing) 

2001-05-20 07:00   Greg Stein &lt;gstein@lyra.org&gt;

	* build.conf (1.5), gen-make.py (1.6):

	- collect test programs (for "make check") 
	- add processing of a [test-scripts] section 
	- output a TEST_PROGRAMS variable for the Makefile to use 
	- use os.path.join for some path manipulation 

2001-05-20 06:00   Greg Stein &lt;gstein@lyra.org&gt;

	* build.conf (1.4), gen-make.py (1.5):

	add the last bits for static mod_dav_svn installs 

2001-05-20 05:41   Greg Stein &lt;gstein@lyra.org&gt;

	* build.conf (1.3), gen-make.py (1.4):

	- handle installation of Apache modules (a couple more bits left to
	  do for static installs) 
	- add some convenience targets 

2001-05-19 18:04   Greg Stein &lt;gstein@lyra.org&gt;

	* gen-make.py (1.3):

	Refactor the collection of files from a set of file patterns.  

2001-05-19 17:58   Greg Stein &lt;gstein@lyra.org&gt;

	* build.conf (1.2), gen-make.py (1.2):

	Continued work on the new build system.  
	
	* build.conf: add new [includes] section for specifying what
	    includes to publish/install.  
	  svnadmin will be installed in the "sbin" area 
	  mod_dav_svn has custom build instructions 
	  libsvn_fs should link with DB 
	
	* gen-make.py: add handling of "custom" build option, and recognize
	    the "apache-mod" type.  
	  add processing of the "install" option and generate the
	    appropriate installation targets.  
	  for output file clarity: use foo_OBJECTS variables 
	  filter *.la from the CLEAN_FILES variable, since they are cleaned
	    by the standard rule 
	  add handling and output processing for the [includes] section 

2001-05-19 07:42   Greg Stein &lt;gstein@lyra.org&gt;

	* .cvsignore (1.7), build.conf (1.1), gen-make.py (1.1):

	Checkpoint tonite's work on tossing automake and recursive make.  
	
	build.conf will describe all the pieces to build, what kind of build
	it is (library vs program), dependent libs, etc.  
	
	gen-make.py will be run by autogen.sh to produce build-outputs.mk,
	which contains the processed build.conf. (only developers run this;
	users will receive an already-built build-outputs.mk) The
	build-outputs.mk file will be included by the main/only Makefile.
	The Makefile will be produced from a Makefile.in by the configure
	process and include config-specific information, build rules, etc.  
	
	* build.conf: initial checkin. first draft of build
	spec/configuration.  
	
	* gen-make.py: initial checkin. it currently produces enough to
	  build SVN and to clean it up. (not fully tested) 
	  (still need "install", "check", and dependency generation) 

2001-05-18 14:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/clients/cmdline/.cvsignore (1.2):

	* tests/client/cmdline/.cvsignore 
	
	  Ignore the 'repositories' and 'working_copies' directories created
	  by the test scripts.  

2001-05-18 12:58  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_path.h (1.37), libsvn_client/commit.c
	(1.45), libsvn_subr/path.c (1.37), libsvn_subr/target.c (1.8),
	libsvn_wc/adm_crawler.c (1.104), tests/libsvn_subr/.cvsignore
	(1.8), tests/libsvn_subr/Makefile.am (1.20),
	tests/libsvn_subr/path-test.c (1.1),
	tests/libsvn_subr/target-test.c (1.8),
	tests/libsvn_wc/commit-test.c (1.30):

	* client/commit-cmd.c 
	
	  (svn_cl__commit): Use legitimate logic for path examination; think 
	  before typing; look before leaping, etc.  
	
	* include/svn_path.h 
	
	  (svn_path_condense_targets, svn_path_remove_redundancies, 
	  svn_path_get_longest_ancestor, svn_path_is_child): Now take STYLE 
	  argument.  
	
	* libsvn_subr/target.c 
	
	  (svn_path_condense_targets, svn_path_remove_redundancies): Now take 
	  STYLE argument.  All callers changed.  Also, some code
	  reformatting for readibility (loooooove the 'continue'
	directive...) 
	
	* libsvn_subr/path.c 
	
	  (svn_path_get_longest_ancestor, svn_path_is_child): Now take STYLE 
	  argument, and actually do what it's supposed to do.  All callers 
	  changed.  
	
	* client/update-cmd.c 
	* libsvn_client/commit.c 
	* libsvn_wc/adm_crawler.c 
	* tests/libsvn_subr/target-test.c 
	* tests/libsvn_wc/commit-test.c 
	
	  Callers of above-mentioned functions changed to pass path style 
	  information through.  
	
	* tests/libsvn_subr/path-test.c 
	
	  New file for tests of path functions (that aren't necessarily 
	  target-related).  
	
	* tests/libsvn_subr/.cvsignore 
	
	  Ignore new path-test binary.  
	
	* tests/libsvn_subr/Makefile.am 
	
	  Added new path-test binary to build/check.  

2001-05-17 15:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_client/add.c (1.12), libsvn_wc/adm_ops.c
	(1.59):

	Bug fix for IssueZilla issue #389 
	
	* libsvn_client/add.c 
	
	  (svn_client_add): Fixed some insane code formatting while 
	  quick-wrapping a returned error value.  
	
	* libsvn_wc/adm_ops.c 
	
	  (svn_wc_add_directory): Use non-intelligent entry folding when 
	  marking the "this dir" entry.  

2001-05-17 13:00  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_test.h (1.16), tests/svn_test_editor.c
	(1.24), tests/libsvn_delta/deltaparse-test.c (1.69),
	tests/libsvn_wc/commit-test.c (1.29):

	Subversion test editor now takes a VERBOSE argument which specifies
	if you want the editor to print out all the arguments passed to the 
	functions or just a one-line summary.  Also, added STYLE argument so 
	that path manipulation functions can be consistent with the path
	style used for the root path upon which the editor is based. 
	Finally, added an EDITOR_NAME argument which is simply a string that
	is printed at the beginning of each function's first line of output
	that can be used to identify the editor's output in situations where
	several test editors exist (also can be helpful for grepping through
	output).  
	
	* tests/svn_test_editor.c 
	
	  (newline): New helper function 
	
	  (svn_test_get_editor): Added VERBOSE, EDITOR_NAME, and STYLE 
	  arguments.  All users 
	
	* include/svn_test.h 
	
	  (svn_test_get_editor): Added VERBOSE argument, EDITOR_NAME, and 
	  STYLE arguments.  Updated DOCSTRING with examples of usage.  
	
	* tests/libsvn_delta/deltaparse-test.c 
	
	  (main): Use VERBOSE test editor named "DELTAPARSE-TEST" with 
	  svn_path_repos_style STYLE.  
	
	* tests/libsvn_wc/commit-test.c 
	
	  (print_usage): New function for, um, printing the usage.  
	
	  (main): Changed to accept --xml argument (instead of -x) and 
	  --verbose (which will toggle VERBOSE argument of the test editor 
	  named "COMMIT-TEST" with svn_path_local_style STYLE).  

2001-05-17 12:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/: alpha_checklist (1.14), alpha_short (1.6):

	
	* alpha_short:  This is the new Master TODO list for M3 and beyond.  
	                This file has been reformatted into emacs "outline" 
	                mode and all info from alpha_checklist has been
	                moved into it.  
	
	* alpha_checklist:  removed.  it was skewing away from alpha_short.  

2001-05-17 09:15  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/include/svn_test.h (1.15):

	* include/svn_test.h 
	
	  Reverted to version 1.12 (prior to my Accidental CheckIn of Amazing 
	  Bogosity, v1.13, and Karl's Intentional CheckIn of Attempted
	  Bogosity Correction, v1.14) 

2001-05-17 09:10  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/include/svn_path.h (1.36):

	* include/svn_path.h 
	
	  (svn_path_remove_redundancies): Updated docsting with explanation of 
	  how this differs from svn_path_condense_targets().  

2001-05-17 08:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: local_tests.py (1.6),
	svn_test_main.py (1.8):

	Start writing python tests for updates.  These tests are the most 
	complex, since they also imply doing a checkout and a commit
	beforehand.  
	
	* local_tests.py (duplicate_wc): new helper -- copy with some 
	  intelligence.  
	
	  (run_and_verify_update):  new utility for update tests -- three ways 
	  of verifying! 
	
	  (update_from_wc_top):  first in a series of update tests.  
	
	* svn_test_main.py (greek_tree):  make this global an *immutable* 
	  tuple instead of a list, for safety.  
	
	  (copy_greek_tree):  routine to duplicate a tuple of tuples into a 
	  list of lists.  Uses copy.deepcopy().  (gstein, is this right?!?) 

2001-05-16 16:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_test.h (1.14):

	(svn_test_get_editor): Document the new `editor_name' parameter.  
	
	NOTE: the build is probably broken right now.  
	
	Mike, I think you just forgot to commit your modifications to 
	tests/svn_test_editor.c?  It seems to still have the old version of 
	the function (i.e., not matching the .h anymore).  Since I don't
	know what that code looks like, I made an educated guess at the
	semantics of the new `editor_name' arg.  

2001-05-16 15:36  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/include/svn_test.h (1.13):

	* include/svn_test.h 
	
	  (svn_path_remove_redundancies): Updated docstring to include big ol' 
	  explanation for the difference between this function and Kevin 
	  Pilch-Bisson's svn_path_condense_targets.  

2001-05-16 13:58  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_path.h (1.35), libsvn_subr/target.c
	(1.7):

	Resolution for IssueZilla issue #386 
	
	* include/svn_path.h 
	* include/target.c 
	
	  (svn_path_remove_redundancies): New function.  
	
	* client/update-cmd.c 
	
	  (svn_cl__update): Remove redundancies from the target list, 
	  preserving the order of those targets, using new 
	  svn_path_remove_redundancies function.  

2001-05-16 10:36  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* www/index.html (1.29):

	* www/index.html 
	
	  Fixed some HTMhell to make the Subversion logo not cover up the
	  first few lines of the text that follows it.  

2001-05-15 16:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/alpha_short (1.5):

	Clean up, move deltification into M3 reqs (hope ppl agree?).  

2001-05-15 16:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.21):

	Fix date.  

2001-05-15 16:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.20):

	Bring status up-to-date.  

2001-05-15 15:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.28):

	Update milestone 2 dates.  

2001-05-15 15:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: Makefile.am (1.27), libsvn_repos/delta.c (1.47)
	(utags: milestone-2):

	* Makefile.am (SUBDIRS): Build tests before client, otherwise can't 
	build from a clean tree.  
	
	* libsvn_repos/delta.c (find_nearest_entry): For now, comment out
	this unused function and its forward declaration, to avoid a compile 
	warning.  

2001-05-15 13:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_client/commit.c (1.44, milestone-2):

	Move test editor code out into unconditional editor composition
	area, but temporarily comment it out for M2.  We'll have a run-time
	--trace option after M2.  

2001-05-15 12:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.5,
	milestone-2):

	New python test for the bug just fixed;  make sure we can commit 2 
	target files in the same directory.  

2001-05-15 12:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.103, milestone-2):

	Fix logic bug in multi-target commits.  We can now correctly commit 
	multiple individual file targets within the same directory.  
	
	(report_local_mods):  if we only committed one file, get out.  Don't 
	close any dir_batons, and don't pop any stackframes.  We may be 
	entering this dir again momentarily to commit a sibling file.  
	
	(svn_wc_crawl_local_mods):  always close the root dir baton, we
	don't need to check for special file cases.  Also, better
	documentation on exactly what routine expects from
	report_local_mods().  

2001-05-15 12:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_client/commit.c (1.43):

	* client/Makefile.am 
	
	  Temporarily link with libsvn_test while testing commit editor.  
	
	* libsvn_client/commit.c 
	
	  (send_to_repos): Temporarily use a test editor while testing
	  commits.  

2001-05-15 11:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_test_main.py (1.7,
	milestone-2):

	Add check for minimum python version.  

2001-05-15 10:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.4):

	(commit_multiple_targets):  new python test.  vewy twicky.  

2001-05-15 10:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.102):

	Multi-target commits now seem to work (after some manual testing.) 
	Some specific python tests are on their way.  :) 
	
	(examine_and_report_entry):  removed.  
	
	(report_local_mods): back to a single recursive routine.  Logic has 
	been shortened, cleaned up, and better documented.  
	
	(svn_wc_crawl_local_mods): little tweak to prevent dir batons from 
	being closed more than once.  

2001-05-14 19:44   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/svn-dev.el (1.7, milestone-2):

	We made the variables local (correct), but we set them via a hook
	which runs in all buffers. So... we weren't restraining ourselves to
	just the SVN code, as we should.  
	
	Submitted by: J|rgen A. Erhard &lt;juergen.erhard@gmx.net&gt; 

2001-05-12 15:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.101), entries.c (1.100,
	milestone-2):

	Various cleanup nits.  
	
	* adm_crawler.c (verify_deleted_tree): No need to create the
	    BASENAME variable because we can directly use the char* stored in
	    the hash (gets rid of an unneeded cast in the process). Simplify the
	    logic to set IS_THIS_DIR.  
	
	* entries.c (svn_wc__entries_write): remove two unneeded casts.  

2001-05-11 17:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.3):

	Start writing python tests for multi-target commits.  We're gonna
	need 'em.  :) 
	
	* local_test.py (run_and_verify_commit):  allow vararg input that
	  will be passed through directly to the 'svn commit' call.  
	
	  (basic_commit): renamed to commit_from_wc_top 
	
	  (commit_one_file):  new test to commit a single file.  Note:  this 
	  test currently fails, because the trace-editor is printing bogus 
	  output right now.  See?  The test is doing its job! 

2001-05-11 13:21  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.100):

	* libsvn_wc/adm_crawler.c 
	
	  (verify_deleted_tree): Helper function.  
	
	  (examine_and_report_entry): Use new helper function to make sure the 
	  working copy isn't in a st00pid state.  

2001-05-11 11:18  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.99):

	* libsvn_wc/entries.c 
	
	  (write_entry, svn_wc__entries_write): Optimizations per the watchful 
	  eye of GregS.  

2001-05-11 11:07  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_client/commit.c (1.42),
	libsvn_repos/commit_editor.c (1.4, milestone-2):

	Bug fix for Issue #377 - Unable to import to any place but '/' in a 
	repository.  
	
	The reason we couldn't had nothing to do with paths, but was caused
	by the fact that we were always basing our import transaction on
	revision 0 of the repository, which by definition *has nothing
	except '/' to import to.*  Doh! 
	
	* libsvn_client/commit.c 
	
	  (import): Don't always base the import on revision 0 -- we want to 
	  use the youngest rev instead.  
	
	* libsvn_repos/commit_editor.c 
	
	  (replace_root): If asked to base ourselves on an invalid revision 
	  number, assume that what was really wanted was the youngest rev.  

2001-05-11 09:41  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/libsvn_subr/libsvn_subr.dsp (1.7, milestone-2):

	* subversion/libsvn_subr/libsvn_subr.dsp: Remove keysort.c. Add
	sorts.c.  

2001-05-11 02:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_subr/path.c (1.36, milestone-2),
	libsvn_wc/adm_crawler.c (1.99):

	Tandem debugging w/ Ben: 
	
	* path.c (svn_path_is_child): Don't start child path with dir 
	separator.  
	(svn_path_decompose): Fix off-by-one errors.  
	
	* adm_crawler.c: Change a bunch of error messages.  
	(report_local_mods): One more layer of indirection on dir_baton 
	parameter.  All callers changed.  

2001-05-11 01:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/sorts.c (1.2, milestone-2):

	(svn_sort_compare_as_paths): Dereference correctly.  

2001-05-11 00:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.98):

	(report_local_mods):  bugfix.  in the case of a single file target, 
	don't close the parent directory twice.  

2001-05-11 00:26  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_repos/commit_editor.c (1.3),
	libsvn_wc/adm_crawler.c (1.97), libsvn_wc/adm_files.c (1.78,
	milestone-2), libsvn_wc/adm_ops.c (1.58, milestone-2),
	libsvn_wc/entries.c (1.98), libsvn_wc/log.c (1.91, milestone-2):

	Let's start working on making `svn rm some_directory' work! 
	
	* libsvn_repos/commit_editor.c 
	
	  (delete_entry): Call svn_fs_delete_tree instead of svn_fs_delete -- 
	  we want to be above to remove both dirs and files.  
	
	* libsvn_wc/adm_crawler.c 
	
	  (examine_and_report_entry): Don't recurse into directories we just 
	  deleted.  
	
	* libsvn_wc/adm_files.c 
	
	  (svn_wc__adm_destroy): Until we can remove trees from disk in a 
	  single bound, let it suffice to kill the README file from the 
	  administrative subdir.  
	
	* libsvn_wc/adm_ops.c 
	
	  (delete_tree): Helper function for recursively setting the delete 
	  flag on a dir's children.  
	
	  (svn_wc_delete): Use new delete_tree helper function.  
	
	  (svn_wc_add_directory): Make sure to set the add flag in both the 
	  dir's default entry and its entry in its parent's entries.  Huh? 
	
	* libsvn_wc/entries.c 
	
	  (take_from_entry): Doc fix.  
	
	  (interpret_changes): Disallow addition of an entry whose parent 
	  directory is marked for deletion.  
	
	* libsvn_wc/log.c 
	
	  (recursive_rc_remove): Helper function for recursively removing 
	  admistrative directories from a tree.  
	
	  (remove_from_revision_control): Use new recursive_rc_remove helper 
	  function.  

2001-05-11 00:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.96):

	saving work, in process of debugging this new code.  

2001-05-10 22:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_subr/: target-test.c (1.7),
	target-test.sh (1.4) (utags: milestone-2):

	* target-test.c (main): Don't wrap targets in quotes any more when 
	printing out, that was just for temporary testing.  
	
	* target-test.sh: Adjust for new behavior of 
	svn_path_condense_targets.  

2001-05-10 22:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/target.c (1.6, milestone-2):

	(svn_path_condense_targets): Use apr_array_push, not raw assignment, 
	to put the target in the array in the single-file case.  

2001-05-10 21:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.33, milestone-2),
	include/svn_path.h (1.34, milestone-2), libsvn_client/commit.c
	(1.41), libsvn_subr/target.c (1.5), tests/libsvn_wc/commit-test.c
	(1.28, milestone-2):

	Change all interfaces above svn_wc_crawl_local_mods to handle
	multiple targets 
	
	           NOTE: The build is no longer broken.  
	
	* target.c (svn_path_condense_targets): Targets that are the same as 
	the common parent are no longer included in *pcondensed_targets, not 
	even as empty strings.  Also, some reformatting for 80-column lines.  
	
	* commit.c (svn_client_commit): Condense an array of targets.  
	(svn_client_import): Pass null for condensed targets.  
	(send_to_repos): Take condensed targets.  
	
	* svn_path.h (svn_path_condense_targets): Doc fixes, document new 
	behavior.  
	
	* svn_client.h (svn_client_commit): Take an array of targets instead 
	of a single path.  
	
	* commit-cmd.c (svn_cl__commit): Adjust call to svn_client_commit.  
	
	* commit-test.c (main): Adjust call to svn_client_commit.  Unify
	error-handling.  

2001-05-10 21:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.95):

	(svn_wc_crawl_local_mods):  qsort the condensed targets, and make
	them into "full" paths too.  

2001-05-10 20:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_subr/target-test.c (1.6):

	(main): Put quotes around each target, so we can see empty strings 
	more easily.  

2001-05-10 20:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_subr/target-test.c (1.5):

	(main): Print a newline after the test output.  

2001-05-10 20:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.94):

	More progress towards multi-target atomic commits.  
	
	* adm_crawler.c (svn_wc_crawl_local_mods):  logical updates so that 
	  single target files can be committed.  

2001-05-10 19:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_path.h (1.33), include/svn_wc.h (1.94,
	milestone-2), libsvn_client/commit.c (1.40), libsvn_subr/path.c
	(1.35), libsvn_wc/adm_crawler.c (1.93):

	Progress towards multi-target atomic commits -- major rewrite of 
	client-side commit machinery.  Also: allow single files to be commit 
	targets.  
	
	  -- NOTICE: THIS COMMIT TEMPORARILY BREAKS THE BUILD! -- 
	
	
	* adm_crawler.c, svn_wc.h (svn_wc_crawl_local_mods): major rewrite, 
	  takes an array of targets and a parent now.  Sends local mods
	  within all targets in a single editor drive, to guarantee
	atomicity.  
	
	  (do_dir_closures):  new helper func, much the opposite of 
	  do_dir_replaces().  
	
	  (examine_and_report_entry):  new helper func, contains all of the 
	  main entry-examining logic that used to live in
	  report_local_mods().  
	
	  (report_local_mods):  add new feature to the main recursive crawler: 
	  it is now able to commit a single file within a dir (if asked to.) 
	  Added FILENAME arg for this purpose -- calls
	  examine_and_report_entry().  
	
	* path.c, svn_path.h (svn_path_decompose):  new func to split a path 
	  into individual components.  
	
	  (store_component):  helper for above.  
	
	  (svn_path_is_child):  new func to return 'difference' between two 
	  paths.  
	
	* commit.c:  random block of code hanging in space for Karl to look
	at.  

2001-05-10 18:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_sorts.h (1.3, milestone-2):

	(svn_sort_compare_strings_as_paths): Doc fix.  

2001-05-10 18:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_sorts.h (1.2):

	(svn_sort_array_header): Removed obsolete declaration.  

2001-05-10 18:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_hash.h (1.16, milestone-2),
	include/svn_sorts.h (1.1), libsvn_subr/Makefile.am (1.17,
	milestone-2), libsvn_subr/keysort.c (1.10), libsvn_subr/sorts.c
	(1.1):

	Provide a comparison function so Ben can sort paths, as he requested 
	(see svn_sort_compare_strings_as_paths).  
	
	Also, generally reorganize and document the sorting code.  
	
	* Makefile.am (libsvn_subr_la_SOURCES): Change keysort.c to sorts.c.  
	
	* keysort.c: renamed to sorts.c.  
	
	* sorts.c: (svn_sort_compare_strings_as_paths): New file, new func.  
	(apr_hash_sorted_keys): Comment tweak.  
	(svn_sort_compare_items_as_paths): Renamed from 
	svn_sort_compare_as_paths.  All callers changed.  Rename parameters, 
	too.  
	
	* svn_sorts.h: New header.  
	(svn_sort_compare_as_paths, apr_hash_sorted_keys): Declare here 
	instead of in svn_hash.h.  
	(svn_sort_compare_strings_as_paths): New declaration.  
	(svn_sort_compare_items_as_paths): Renamed from 
	svn_sort_compare_as_paths.  Rename parameters, too.  Doc fixes.  
	(apr_hash_sorted_keys): Doc fixes.  
	
	* svn_hash.h: Add missing #endif for header name.  Moved
	declarations to svn_sorts.h, as described above.  
	
	* status.c: #include svn_sorts.h, instead of svn_hash.h.  

2001-05-10 16:58   Branko Cibej &lt;brane@xbc.nu&gt;

	* PORTING (1.4, milestone-2):

	Update sparc-sun-solaris2.6.  

2001-05-10 13:40   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.90, milestone-2):

	anyone have a wet noodle? I have a date with Karl...  

2001-05-10 12:00  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/libsvn_fs/fs.c (1.43, milestone-2):

	* subversion/libsvn_fs/fs.c: (svn_fs_delete_berkeley)  Use
	APR_STATUS_IS_ENOENT instead of APR_ENOENT.  

2001-05-10 11:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.89):

	Notes to self.  
	
	Greg, did I accidentally undelete a bunch of your stuff that you
	just deleted?  I resolved a conflict, but may have done it
	reversedly, let me know.  

2001-05-10 11:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: strings-table.c (1.5), strings-table.h
	(1.4) (utags: milestone-2):

	* strings-table.h: General doc fixes.  
	(svn_fs__delete_string): Declare.  
	
	* strings-table.c (svn_fs__delete_string): New func.  
	(string_read, svn_fs__string_size): Better errors.  

2001-05-10 11:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/strings-table.c (1.4):

	* strings-table.c (svn_fs__append_string_stream): Handle string 
	creation as well as appending to an existing string.  
	
	Note: in my most recent previous log message, the filenames are 
	wrong.  They should be 
	
	* strings-table.c 
	(...) 
	* strings-table.h 
	(...) 
	
	respectively.  Someday when I can run "cvs admin" again, I'll fix
	that and remove this note. :-) 

2001-05-09 20:48  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/libsvn_fs.dsp (1.11, strings-reps-dev-done,
	milestone-2):

	* libsvn_fs/libsvn_fs.dsp 
	
	  Added proplist.c and proplist.h to Win32 build.  

2001-05-09 18:13  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.94, milestone-2),
	libsvn_repos/commit_editor.c (1.2), tests/libsvn_fs/fs-test.c
	(1.77, milestone-2):

	Woo-hoo!  We now get the log message in the same berkeley
	transaction as the commit of the subversion txn! 
	
	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_commit_txn): Populate new revision skel with property 
	  list taken from the transaction.  
	
	* libsvn_repos/commit-editor.c 
	
	  (close_edit): Now call svn_fs_change_txn_prop to set the log message 
	  as a property of the transaction just before committing the 
	  transaction.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (transaction_props): Changed to now actually commit the transaction, 
	  then verify that the newly created revision contains the exact
	  same property list as the transaction had (and that both are
	accurate).  

2001-05-09 17:27   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: svnadmin/svnadmin.dsp (1.2),
	tests/libsvn_repos/tests_libsvn_repos_test.dsp (1.2) (utags:
	milestone-2):

	Link with libdb32d.lib in Win32 Debug builds.  

2001-05-09 16:23   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.88):

	cuz the Candy Man can...  

2001-05-09 16:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: strings-table.c (1.3), strings-table.h
	(1.3):

	Implemented much, tested nothing: 
	
	* svn_fs.c (string_baton): New fields `fs' and `trail'.  Get rid of 
	`append' field; instead, we set offset at stream creation time.  
	(svn_fs__string_size): New func.  
	(string_read, string_write): Filled in.  
	(svn_fs__read_string_stream, svn_fs__write_string_stream): Don't set 
	append field.  
	(svn_fs__append_string_stream): Don't set append flag, just set
	offset appropriately.  
	
	* svn_fs.h (svn_fs__read_string_stream, svn_fs__write_string_stream, 
	svn_fs__append_string_stream): Doc fixes.  

2001-05-09 16:11  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_fs.h (1.80, milestone-2),
	libsvn_fs/Makefile.am (1.42, milestone-2), libsvn_fs/dag.c (1.93),
	libsvn_fs/proplist.c (1.6, milestone-2), libsvn_fs/proplist.h (1.4,
	milestone-2), libsvn_fs/rev-table.c (1.13, milestone-2),
	libsvn_fs/structure (1.36, milestone-2), libsvn_fs/tree.c (1.73,
	milestone-2), libsvn_fs/txn-table.c (1.24, milestone-2),
	libsvn_fs/txn-table.h (1.14, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done, milestone-2),
	libsvn_fs/txn.c (1.41, milestone-2), tests/libsvn_fs/fs-test.c
	(1.76):

	* libsvn_fs/proplist.h 
	* libsvn_fs/proplist.c 
	
	  New files, with functions for manipulating PROPLIST skels.  
	
	* libsvn_fs/Makefile.am 
	
	  Added proplist.c and proplist.h to list of sources.  
	
	* libsvn_fs/structure.c 
	
	  Added property list to TRANSACTION language.  
	
	* include/svn_fs.h 
	
	  (svn_fs_txn_prop, svn_fs_txn_proplist, svn_fs_change_txn_prop): New 
	  function prototypes.  
	
	* libsvn_fs/txn-table.h 
	
	  (svn_fs__get_txn_ids): Renamed from svn_fs__get_txn.  
	
	  (svn_fs__get_txn): New function prototype.  
	
	* libsvn_fs/txn-table.c 
	
	  (is_valid_transaction): Check for a valid proplist.  
	
	  (put_txn): Accept a property list argument for adding to a 
	  transaction.  
	
	  (get_proplist_from_txn_skel, get_ids_from_txn_skel): Helper 
	  functions.  
	
	  (svn_fs__get_txn): New function for getting just the skel of the 
	  transaction (and works as a helper for svn_fs__get_txn_ids).  
	
	  (svn_fs__get_txn_ids): Renamed from svn_fs__get_txn.  All callers 
	  changed.  
	
	  (svn_fs__create_txn, svn_fs__set_txn_root, svn_fs__set_txn_base): 
	  Changed to use new argument list of put_txn.  
	
	  (struct txn_prop_args, txn_body_txn_prop, svn_fs_txn_prop, 
	   struct txn_proplist_args, txn_body_txn_proplist,
	   svn_fs_txn_proplist, struct change_txn_prop_args,
	   txn_body_change_txn_prop, svn_fs_change_txn_prop): New structures
	   and functions for reading and writing transaction properties.  
	
	* libsvn_fs/rev-table.c 
	
	  (txn_body_revision_prop, txn_body_revision_proplist, 
	  txn_body_change_rev_prop): Use new related proplist functions in 
	  proplist.c.  
	
	* libsvn_fs/tree.c 
	
	  (txn_body_node_prop, txn_body_node_proplist, 
	  txn_body_change_node_prop): Use new related proplist functions in 
	  proplist.c.  
	
	* libsvn_fs/dag.c 
	* libsvn_fs/txn.c 
	
	  Miscellaneous calls to old svn_fs__get_txn changed to 
	  svn_fs__get_txn_ids.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (transaction_props): New test for transaction properties.  
	
	  (test_funcs): Reference new test for transaction properties.  

2001-05-09 15:42   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/: libsvn_delta/deltaparse_test.dsp (1.6),
	libsvn_wc/commit_test.dsp (1.6) (utags: milestone-2):

	Link libsvn_tests_main.lib instead of libsvn_test_editor.lib.  

2001-05-09 15:41   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/libsvn_fs.dsp (1.10):

	Added strings-table.[ch] to project.  

2001-05-09 15:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.92):

	(svn_fs__dag_get_node): Use svn_error_create instead of 
	svn_error_createf, since no formatting is happening.  

2001-05-09 14:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/strings-table.c (1.2):

	(string_baton): New struct.  
	(string_read, string_write): New functions, still skeletal.  
	(svn_fs__read_string_stream, svn_fs__write_string_stream, 
	svn_fs__append_string_stream): Create streams, set to use above.  

2001-05-09 14:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/strings-table.h (1.2):

	(svn_fs__read_string_stream, svn_fs__write_string_stream, 
	svn_fs__append_string_stream): Doc fixes.  

2001-05-09 14:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.100, milestone-2),
	libsvn_fs/Makefile.am (1.41), libsvn_fs/fs.c (1.42), libsvn_fs/fs.h
	(1.20, milestone-2), libsvn_fs/strings-table.c (1.1),
	libsvn_fs/strings-table.h (1.1):

	* strings-table.h, strings-table.c: New files.  
	
	* Makefile.am (libsvn_fs_la_SOURCES): Add them.  
	
	* fs.h (svn_fs_t): New field for `strings' table.  
	
	* fs.c (svn_fs_create_berkeley): Create the strings table.  
	
	* svn_error.h (svn_errno_t): New error SVN_ERR_FS_NO_SUCH_STRING.  

2001-05-09 11:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_repos.h (1.8, milestone-2):

	(svn_repos_set_path): Doc fix, as suggested by Greg Stein.  
	
	Also, remove obsolete comment implying the reporter routines were
	only exposed via vtables.  They're public now.  

2001-05-09 10:48  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_wc.h (1.93), libsvn_wc/adm_ops.c (1.57),
	libsvn_wc/get_editor.c (1.181, milestone-2):

	* include/svn_wc.h 
	
	  (svn_wc_get_actual_update_target): New function prototype.  
	
	* libsvn_wc/get_editor.c 
	
	  (svn_wc_get_actual_update_target): New function.  
	
	  (make_editor): Use above new function.  
	
	  (close_edit): Segfault condom.  
	
	* client/update-cmd.c 
	
	  (svn_cl__update): Use new svn_wc_get_actual_update_target function 
	  to determine the update anchor/target.  
	
	* libsvn_wc/adm_ops.c 
	
	  (svn_wc_set_revision): Itty bitty bug fix.  

2001-05-09 10:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/local_tests.py (1.2):

	(run_and_verify_checkout):  start comparing stdout of 'co' again.  

2001-05-09 05:29  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion.dsw (1.14, milestone-2),
	subversion/tests/libsvn_fs/skel-test.c (1.20, milestone-2),
	subversion/tests/libsvn_repos/tests_libsvn_repos_test.dsp (1.1),
	subversion/tests/libsvn_subr/tests_libsvn_subr_target_test.dsp
	(1.1, milestone-2):

	All projects build on Win32, and all of the binary test harneses
	pass except repos-test which is currently crashing for me due to a
	problem with closing down a pool in test #1.  
	
	* subversion.dsw: Added new projects: tests_libsvn_repos_test and
	tests_libsvn_subr_target_test.  
	* subversion/tests/libsvn_subr/tests_libsvn_subr_target_test.dsp:
	New project.  
	* subversion/tests/libsvn_repos/tests_libsvn_repos_test.dsp: New
	project.  
	* subversion/tests/libsvn_fs/skel-test.c: Use casts instead of
	changing the type.  

2001-05-09 03:43   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/svnadmin/main.c (1.11, milestone-2):

	* svnadmin.c (usage): Spelling fix.  

2001-05-09 03:12   Greg Stein &lt;gstein@lyra.org&gt;

	* tools/cvs2svn/cvs2svn.py (1.1, milestone-2):

	Check in some work from the weekend...  
	
	(note: rcsparse.py can be found in ViewCVS' cvs repository) 

2001-05-08 19:30  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion.dsw (1.13), svn_config.dsp (1.3, milestone-2),
	subversion/libsvn_client/commit.c (1.39),
	subversion/libsvn_repos/libsvn_repos.dsp (1.1, milestone-2),
	subversion/libsvn_subr/libsvn_subr.dsp (1.6),
	subversion/tests/libsvn_delta/deltaparse-test.c (1.68,
	milestone-2), subversion/tests/libsvn_fs/fs_test.dsp (1.5,
	milestone-2), subversion/tests/libsvn_fs/skel-test.c (1.19),
	subversion/tests/libsvn_wc/commit-test.c (1.27):

	I can now compile all of the Win32 projects except libsvn_ra_dav
	since I don't have the Apache/mod_dav headers installed.  
	
	* subversion.dsw: Add libsvn_delta, libsvn_fs as dependancies of
	tests_libsvn_fs_fs.  
	* svn_config.dsp: Remove non-existant sw_private_config.hw.in from
	.dsp.  
	* subversion/client/subversion_client.dsp: MSDEV decided to remove
	an extra space.  
	* subversion/libsvn_client/commit.c: Use new_entry parameter per the
	function docs, instead of random stack data.  
	* subversion/libsvn_repos/libsvn_repos.dsp: Add file.  
	* subversion/libsvn_subr/libsvn_subr.dsp: Added missing target.c
	file.  
	* subversion/tests/libsvn_delta/deltaparse-test.c, 
	   subversion/tests/libsvn_wc/commit-test.c: 
	      MSVC throws a syntax error when it encountered this empty
	      array. Populate with two zero's per the test case spec.  
	* subversion/tests/libsvn_fs/fs_test.dsp: Link against the new
	Berkely DB drop 
	* subversion/tests/libsvn_fs/skel-test.c: Replace some occurances of
	int with apr_byte_t. MSVC warned mightly (&gt; 10-15 times) about this.  

2001-05-08 15:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_repos/reporter.c (1.7, milestone-2):

	Fix sense of check from previous change.  

2001-05-08 15:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_repos.h (1.7), libsvn_repos/reporter.c
	(1.6), libsvn_wc/adm_crawler.c (1.92):

	* svn_repos.h (svn_repos_set_path): Doc fix.  
	
	* reporter.c (svn_repos_set_path): Check for empty path, not null
	path.  
	
	* adm_crawler.c (svn_wc_crawl_revisions): Pass empty string, not
	null.  

2001-05-08 15:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.92), libsvn_wc/get_editor.c
	(1.180), libsvn_wc/props.c (1.30, milestone-2):

	Fix http://subversion.tigris.org/issues/show_bug.cgi?id=381: 
	
	* trace-update.c (svn_cl__get_trace_update_editor): Don't chop path; 
	the trace editor depends on the paths being accurate so it can
	freely examine entries.  This fixes issue #381.  
	
	Fix the printouts for checkouts/updates to not show spurious "_U"s 
	along the left column: 
	
	* get_editor.c (is_wc_prop): Moved to props.c and renamed, see
	below.  
	
	* props.c (svn_wc_is_wc_prop): Export.  
	
	* trace-update.c (change_file_prop, change_dir_prop): Don't print
	out changes of wc props, those are internal and users don't care.  

2001-05-08 14:19  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion.dsw (1.12), svn_private_config.hw (1.3, milestone-2),
	subversion/libsvn_client/libsvn_client.dsp (1.7, milestone-2),
	subversion/libsvn_delta/libsvn_delta.dsp (1.6, milestone-2),
	subversion/libsvn_fs/libsvn_fs.dsp (1.9),
	subversion/libsvn_ra/libsvn_ra.dsp (1.1, milestone-2),
	subversion/libsvn_ra_dav/libsvn_ra_dav.dsp (1.1, milestone-2),
	subversion/libsvn_ra_local/libsvn_ra_local.dsp (1.1, milestone-2),
	subversion/svnadmin/svnadmin.dsp (1.1),
	subversion/tests/libsvn_test_editor.dsp (1.5),
	subversion/tests/libsvn_test_main.dsp (1.5, milestone-2):

	First steps in getting the Win32 build up-to-date.  
	
	* subversion/libsvn_ra/libsvn_ra.dsp 
	* subversion/libsvn_ra_local/libsvn_ra_local.dsp 
	* subversion/libsvn_ra_dav/libsvn_ra_dav.dsp 
	* subversion/libsvn_repos/libsvn_repos.dsp 
	
	  New project files.  
	
	* subversion/tests/libsvn_test_editor.dsp 
	
	  Removed this obsolete project file.  
	
	* subversion.dsw 
	
	  Updated to include new projects libsvn_ra, libsvn_ra_local,
	  libsvn_ra_dav, and libsvn_repos.  Also, removed libsvn_test_editor
	  project (since its source is now built as part of
	libsvn_tests_main).  
	
	* svn_private_config.hw 
	
	  (SVN_VERSION, SVN_LIBSVN_CLIENT_LINKS_RA_LOCAL): Added these
	  #defines.  
	
	* subversion/client/subversion_client.dsp 
	
	  Updated sourcefile list, and now link with Berkeley 3.2.  
	
	* subversion/libsvn_client/libsvn_client.dsp 
	* subversion/libsvn_delta/libsvn_delta.dsp 
	* subversion/libsvn_fs/libsvn_fs.dsp 
	
	  Updated sourcefile list.  
	
	* subversion/tests/libsvn_test_main.dsp 
	
	  Updated sourcefile list, and now include Berkeley headers.  

2001-05-08 14:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.30, milestone-2):

	(Building from a working copy): Notes on configuring and building.  

2001-05-08 12:51  jrobbins

	* www/index.html (1.27, milestone-2):

	corrected broken links 

2001-05-08 11:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/dav_setup.txt (1.6, milestone-2):

	Make some corrections (Ben dictated these; he's sitting next to me 
	right now, but he left his dongle at home today, so we're using my
	net connection.  Note to self: Never, ever leave home without
	dongle.) 

2001-05-08 08:42  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* HACKING (1.29):

	Changed reference to 'config.hw' for building under win32.  

2001-05-07 18:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_types.h (1.62, milestone-2),
	libsvn_wc/get_editor.c (1.179):

	* svn_types.h (SVN_PROP_PREFIX): New #define.  
	(SVN_PROP_REVISION_LOG, SVN_PROP_WC_PREFIX): Define using ## 
	concatenation with above.  
	(svn_item_t): Indentation fix.  
	
	* get_editor.c (is_wc_prop): Check length before comparing.  (Branko 
	found this in a Purify run.) 

2001-05-07 13:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/: index.html (1.26), project_status.html (1.19, milestone-2):

	Patch from Michael Salmon &lt;ms@collab.net&gt; to make the logo show up.  

2001-05-06 15:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.25):

	Make mailing-list link work.  

2001-05-06 15:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.24):

	Make the doc link work.  

2001-05-06 15:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.23):

	urg, flutz with href syntax. :( 

2001-05-06 15:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.22):

	Update front page.  

2001-05-05 07:08   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.51), fetch.c (1.55),
	merge.c (1.10) (utags: milestone-2):

	Toss the debugging printf calls.  

2001-05-05 06:04   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/merge.c (1.9):

	(bump_resource): the close baton can be non-NULL during an import
	  (!!).  check the close_commit function instead.  

2001-05-05 06:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/activity.c (1.6, milestone-2):

	Update apr_sdbm_open() calls to latest interface.  

2001-05-05 03:40   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.50), merge.c (1.8):

	Initial brush strokes at getting "import" to work.  
	
	(it appears there are problems with Apache 2.0's input code for
	 large inputs; gotta go work on that for a bit) 
	
	* merge.c (bump_resource): if there are no WC functions, then just
	    don't bother with "bumping" the information.  
	
	* commit.c (fetch_props[]): we may need to fetch the DAV:checked-in
	    property to get the Version Resource URL at run time. this enables
	    that functionality.  
	  (simple_request): also print the HTTP status code in the error.  
	  (get_version_url): new function. gets the version URL from the
	    cached WC props, or it goes over to the server and asks for the VR
	    URL corresponding to the HEAD of the repository. needed for import,
	    when we have no WC props.  
	  (get_activity_url): new function. gets the activity URL from the
	    cached WC props, or it goes to the server for it. needed for
	    import, when we have no WC props.  
	  (create_activity): new new get_activity_url() function to deal
	    with the import case when no WC props exist.  
	  (commit_replace_root): when importing, we don't have local props,
	    so we need to fetch the head's version resource URL to begin the
	    import process. toss the WC prop get and use the new
	    get_version_url() function.  

2001-05-04 21:05   Branko Cibej &lt;brane@xbc.nu&gt;

	* notes/alpha_checklist (1.13, milestone-2):

	Formatting fix.  

2001-05-04 21:04   Branko Cibej &lt;brane@xbc.nu&gt;

	* notes/alpha_checklist (1.12):

	Talk about the infamous $Log: cvs-changelog.html,v $
	Talk about the infamous Revision 1.2  2001/08/31 03:30:43  kfogel
	Talk about the infamous Record CVS ChangeLog.
	Talk about the infamous ...  

2001-05-04 21:00   Branko Cibej &lt;brane@xbc.nu&gt;

	* notes/alpha_checklist (1.11):

	Annotated with my comments, as per Karl's request. Finally.  

2001-05-04 18:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: README (1.4, milestone-2),
	local_tests.py (1.1), svn_test_main.py (1.6), svn_tree.py (1.3,
	milestone-2):

	Here's a nuclear power plant.  The support framework is huge;  now
	we need a whole lot more tests.  
	
	TODO:  the print-output of 'svn co' and 'svn up' is temporarily 
	broken;  cmpilato is going to fix this as he rewrites multiargs. 
	For that reason, we're deliberately ignoring the output of 'svn co'
	right now when each test bootstraps itself.  

2001-05-04 12:46  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/delta.c (1.46):

	* libsvn_repos/delta.c 
	
	  (svn_repos_update): Doh!  *Now* it doesn't depend on
	  svn_repos_dir_delta.  

2001-05-04 12:12  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/delta.c (1.45):

	* libsvn_repos/delta.c 
	
	  (svn_repos_update): No longer calls svn_repos_dir_delta.  This is 
	  the first step in making svn_repos_dir_delta disappear entirely.  

2001-05-04 10:22  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_wc.h (1.91), libsvn_wc/entries.c (1.97):

	* include/svn_wc.h 
	
	  (SVN_WC_ENTRY_THIS_DIR):  Changed this #define to be "svn:this_dir" 
	  until we're confidant that all oversights caused by assuming this
	  is "" are found and fixed.  
	
	* libsvn_wc/entries.c 
	
	  (write_entry): New helper function for writing a single entry.  
	  Also, this will abort() if ever we go to write an entry named "." 
	  when SVN_WC_ENTRY_THIS_DIR is not #defined as "." .  
	
	  (svn_wc__entries_write): Changed to use the new write_entry helper, 
	  and always write out the "this dir" entry first.  

2001-05-04 07:14   Greg Stein &lt;gstein@lyra.org&gt;

	* notes/alpha_short (1.4, milestone-2):

	"Mommy, mommy! I keep spinning in circles!" "Shut up, or I'll nail
	your other foot to the floor." 

2001-05-04 07:05   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.33), repos.c (1.50) (utags:
	milestone-2):

	Sometimes, we open a repository by ID (as an ID root). We cannot use 
	repos_path for these roots, but must use a string form of the ID.
	Add the DAV_SVN_REPOS_PATH() macro to select the proper "path".  
	
	* dav_svn.h (struct dav_resource_private): add node_id_str field.  
	    (DAV_SVN_REPOS_PATH): new macro 
	
	* repos.c (dav_svn_parse_version_uri): fill in the repos_id_str
	  field.  
	(dav_svn_prep_version): open the id_root and check type/existence.  
	  (dav_svn_open_stream, dav_svn_getetag, dav_svn_set_headers): use 
	    DAV_SVN_REPOS_PATH() to open the correct "path" for reading.  

2001-05-04 07:01   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/update.c (1.3, milestone-2):

	(replace_helper): fix the XML output -- the starting
	  replace-file/dir element should not be terminated, but with an
	end-element.  

2001-05-04 06:26   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.54):

	Propagate errors from within the parsing callbacks.  
	
	(struct report_baton_t): add "err" member 
	(start_element, end_element): stash the error away for later use 
	(reporter_finish_report): return an error, if present in the ctx 

2001-05-04 05:47   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: fetch.c (1.53), merge.c (1.7),
	options.c (1.6, milestone-2), ra_dav.h (1.24, milestone-2), util.c
	(1.2, milestone-2):

	For requests which need to parse XML responses, the code was
	following a particular template. Shift all of that code to a utility
	function.  
	
	Then, add recognition of XML parsing errors in the response.  
	
	* ra_dav.h (svn_ra_dav__parsed_request): new declaration 
	
	* fetch.c (reporter_finish_report): use new function 
	* options.c (svn_ra_dav__get_activity_url): use new function 
	* merge.c (svn_ra_dav__merge_activity): use new function 
	
	* util.c (svn_ra_dav__parsed_request): implement from unification of
	    the pattern from fetch.c, options.c and merge.c. and XML parse error 
	    handling.  

2001-05-04 05:22   Branko Cibej &lt;brane@xbc.nu&gt;

	* notes/fs-improvements.txt (1.9, milestone-2):

	Fix typos.  

2001-05-04 04:22   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.49), fetch.c (1.52),
	merge.c (1.6), ra_dav.h (1.23):

	Fix up some commit/update problems.  
	
	* commit.c (struct commit_ctx_t): add a "deleted" member to track
	      items that have been deleted.  
	  (commit_replace_root): use "" rather than "." to fetch a directory 
	      property.  
	  (commit_delete_entry): the request actually returns a 204 on
	    success.  Also, record the path in the deleted array.  
	  (commit_close_edit): pass the deleted array to merge_activity 
	  (svn_ra_dav__get_commit_editor): make the new deleted array 
	
	* fetch.c (TOP_DIR): index the elts, not the struct itself 
	  (report_elements[]): use the proper namespace for the elements 
	  (push_dir): make sure to put a NULL into the vsn_url field 
	  (start_element): don't fetch the file when add-file is first seen;
	      fetch at the end of the element (after we have its URL).  
	  (end_element): fetch the file when add-file is closed.  
	  (reporter_finish_report): don't write the null-term on the tail 
	  (svn_ra_dav__do_update): create rb-&gt;dirs with the right size
	    element.  don't write the null-term on the head. only write out
	    the target-revision element if we are updating to a specific
	revision.  
	
	* merge.c (svn_ra_dav__merge_activity): take new deleted_entries
	    param.  call close_commit for all the items that were deleted since
	    the server will not mention them in the MERGE response.  
	
	* ra_dav.h (svn_ra_dav__merge_activity): take new deleted_entries
	param.  

2001-05-04 04:06   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: repos.c (1.49), update.c (1.2):

	Tweaks for proper commit/update behavior.  
	
	* repos.c (dav_svn_do_walk): handle WORKING resources rather than
	erroring.  
	
	* update.c (upd_set_target_revision): add namespaces to opening
	  element.  
	(...) use new DIR_OR_FILE() macro throughout. use DEBUG_CR
	  throughout.  
	(dav_svn__update_report): use the youngest rev if the
	      target-revision element was not provided (or is bogus).  
	    use the repository path of the resource for the base of the
	      update reporting process.  
	    properly fetch the CDATA from the entry, rather than a hack.  
	    add an extra error detection case: what kind of resource allows
	      the report.  

2001-05-04 04:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/Makefile.am (1.17, milestone-2):

	Get an xmlexpat.h header for svn_xml.h 
	
	Submitted by: Daniel Stenberg &lt;daniel@haxx.se&gt; 

2001-05-03 18:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/alpha_short (1.3):

	Sync up with current status, migrate some things into Issuezilla,
	add a few minor items based on discussion w/ Ben and Mike Tuesday.  

2001-05-03 16:35   Branko Cibej &lt;brane@xbc.nu&gt;

	* notes/fs-improvements.txt (1.8):

	Added notes on delta composition and delta storage.  

2001-05-03 13:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/commit.c (1.38):

	Fix longstanding bugs in 'svn import'.  This subcommand finally
	works as documented, with either two or three args.  
	
	* commit.c (import):  new_entry might be NULL;  avoid segfault here.  
	
	* import-cmd.c (svn_cl__import):  just set new_entry to NULL if args 
	  are &lt; 3.  Also, make the trace_editor stop prepending local 
	  directory info;  it should only be printing added repository
	  paths.  

2001-05-01 16:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/: project_docs.html (1.16), project_members.html (1.14),
	project_nav.html (1.6, milestone-2):

	Remove old pages and links for new Tigris site.  Members and Docs
	tabs replace the old equivalents.  

2001-05-01 16:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_members.html (1.13):

	Add cmpilato.  

2001-04-27 23:46  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* notes/entries-handling.txt (1.1, milestone-2):

	* notes/entries-handling.txt 
	
	  New file.  This should live somewhere other than Mike's Inbox. :-) 

2001-04-27 23:38  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.178), log.c (1.90),
	status.c (1.30, milestone-2):

	You used see some fun stuff happen when you #define'd 
	SVN_WC_ENTRY_THIS_DIR to "CmpilatoSezYouSuck".  I hope I've caught 
	and fixed all those bugs, but only time and testing will tell.  
	
	* libsvn_wc/get_editor.c 
	
	  (change_dir_prop): Itty bitty docstring edit.  
	
	* libsvn_wc/log.c 
	
	  (log_do_modify_entry): Bug fix: make sure we don't assume that 
	  SVN_WC_ENTRY_THIS_DIR is #define'd to ""! 
	
	* libsvn_wc/status.c 
	
	  (svn_wc_statuses): Bug fix: make sure we don't assume that 
	  SVN_WC_ENTRY_THIS_DIR is #define'd to ""! 

2001-04-27 07:02  jrobbins

	* www/project_nav.html (1.5):

	changed label 

2001-04-27 06:27  jrobbins

	* www/project_mail.html (1.6):

	removed outdated admin page 

2001-04-27 05:38  jrobbins

	* www/project_admin.html (1.7):

	removed outdated admin page 

2001-04-27 05:27  jrobbins

	* www/index.html (1.21):

	trivial change to force web publish 

2001-04-27 05:18  jrobbins

	* www/: index.html (1.20), project_admin.html (1.6),
	project_docs.html (1.15), project_nav.html (1.4),
	project_source.html (1.5, milestone-2), project_status.html (1.18):

	corrected links 

2001-04-27 01:53  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_repos.h (1.6), include/svn_wc.h (1.90),
	libsvn_client/update.c (1.18, milestone-2), libsvn_repos/delta.c
	(1.44), libsvn_repos/reporter.c (1.5), libsvn_wc/adm_crawler.c
	(1.91), libsvn_wc/get_editor.c (1.177):

	Woohoo!  May an ever-gracious God allow this to be the last time I 
	have to think about multi-arg updates for at least a few days.  
	
	* client/trace-update.c 
	
	  (svn_cl__get_trace_update_editor): Hack off the last component of 
	  the path given to us, since the update editor is doing the same 
	  thing.  
	
	* include/svn_wc.h 
	* libsvn_wc/adm_crawler.c 
	
	  (svn_wc_crawl_revisions): Fixed to allow reporting of a 
	  to-be-updated file as well as doing the regular depth-first tree 
	  crawl.  
	
	* libsvn_client/update.c 
	
	  (svn_client_update): Provided ugly kludge for informing the RA layer 
	  of the actual intented update target.  
	
	* include/svn_repos.h 
	
	  (svn_repos_dir_delta, svn_repos_update): Changed docstrings to 
	  reflect that these functions now DO call EDITOR-&gt;close_edit. 
	  Also, posted a little blurb that describes the difference between
	  the two functions.  
	
	* libsvn_repos/delta.c 
	
	  (svn_repos_update): Take some logic shortcuts.  Also, changed to 
	  called EDITOR-&gt;close_edit before a successful return.  
	
	  (svn_repos_dir_delta): Call EDITOR-&gt;close_edit before a successful 
	  return.  
	
	* libsvn_repos/reporter.c 
	
	  (svn_repos_report_baton_t): We need to keep track of two portions of 
	  pathiness now, the BASE_PATH at which the baton is rooted, and the 
	  actual TARGET of the report/update.  
	
	  (svn_repos_set_path): Changed requirements of initial set_path call, 
	  and now use new BASE_PATH/TARGET pair to derive path information.  
	
	  (svn_repos_finish_report): Call svn_repos_update instead of 
	  svn_repos_dir_delta here, and don't call close_edit (since 
	  svn_repos_update does this for us).  
	
	  (svn_repos_begin_report): Split the incoming path into a BASE_PATH 
	  and a TARGET.  
	
	* libsvn_wc/get_editor.c 
	
	  (edit_baton): Use an ANCHOR/TARGET pair instead of a DEST_DIR when 
	  tracking paths.  
	
	  (make_dir_baton, make_editor): Changed to use new ANCHOR/TARGET for 
	  paths.  
	
	  (free_dir_baton): Only bump the revision of a directory if that 
	  directory is the target an update, is a child of the target of an 
	  update, or if this is a checkout (and therefore, not an update at 
	  all).  
	
	  (close_edit): Only bump revisions of updated directories, not 
	  updated files, and nothing in the checkout case.  
	
	* client/tests/svn-test2.sh 
	
	  Changed update commands to be called from inside the t1 working copy 
	  directory.  

2001-04-27 01:41  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.77), adm_ops.c (1.56):

	* libsvn_wc/adm_files.c 
	
	  (prop_path_internal): Do the Right Thing when svn_path_split leaves 
	  an empty dirname.  This was causing an entry with a name of "." to 
	  appear in the entries files...makes for some rather time-consuming 
	  (ala Eternity) `svn status' calls.  
	
	* libsvn_wc/adm_ops.c 
	
	  (svn_wc_set_revision): Do the Right Thing when svn_path_split leaves 
	  an empty dirname.  

2001-04-26 22:37   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_error.h (1.99), libsvn_subr/svn_error.c
	(1.62, milestone-2):

	Get svn_error.c working with the latest APR pool changes (struct
	apr_pool_t is now private).  
	
	* svn_error.h (svn_pool_get_size): removed declaration; obsolete.  
	
	* svn_error.c (svn_pool_get_size): removed function; obsolete.  
	  (svn_pool__inherit_error_pool): use new apr_pool_get_parent
	  function.  
	(find_oldest_pool_ancestor): use new apr_pool_get_parent function.  
	  (svn_pool_clear_debug): use apr_pool_num_bytes rather than 
	    svn_pool_get_size.  
	  (svn_pool_destroy_debug): use apr_pool_num_bytes 

2001-04-26 20:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: svn_output.py (1.8),
	svn_tree.py (1.2), svn_wc.py (1.2):

	Remove svn_output.py and svn_tree.py;  consolidate them all into 
	svn_tree.py.  Things are cleaner and simpler this way, and more 
	non-exported helpers can be shared.  

2001-04-26 16:14  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_path.h (1.32), libsvn_subr/path.c
	(1.34):

	* include/svn_path.h 
	* libsvn_subr/path.c 
	
	  (svn_path_is_thisdir): New function to check path for '.' and './' 
	
	  (svn_path_is_empty): Changed to use new function
	  svn_path_is_thisdir.  

2001-04-26 16:13  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/adm_ops.c (1.55):

	* libsvn_wc/adm_ops.c 
	
	  (svn_wc_delete): Bug fix: if dirname after an svn_path_split is 
	  empty, at least make it '.' so APR functions don't choke on it.  

2001-04-26 15:18   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/merge.c (1.10, milestone-2):

	Heck, we don't even need to have special handling for the
	root_baton. As the comment says, it is passed to close_directory,
	which will then handling the "seen_change" flag.  
	
	This fixes a problem where we kept the baton around, but
	close_directory destroyed its pool. We then called send_response()
	which allocated from that pool (very bad).  
	
	(struct merge_response_ctx): no more need for root_baton field.  
	(mr_replace_root): allocate the baton from the pool. don't set the 
	  mrc-&gt;root_baton field.  
	(dav_svn__merge_response): don't do special handling for the root 

2001-04-26 15:00   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.28):

	db-3.2.9 Win32 binary is available now.  

2001-04-26 10:33   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/merge.c (1.9):

	Thanks to my evil new debugging option in apr_pools.c, I found a
	reference to the root baton after its pool was destroyed.  

2001-04-26 10:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/svn_string.c (1.13, milestone-2):

	i &gt;= 0 is always true for unsigned values, such as apr_size_t. If
	the character wasn't there, then we'd choke when i became 2^32-1.  

2001-04-25 16:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: README (1.3),
	example_tests1.py (1.3, milestone-2), svn_output.py (1.7),
	svn_test_main.py (1.5), svn_tree.py (1.1), svn_wc.py (1.1),
	xml_tests.py (1.3, milestone-2):

	Lots of new code (and rewriting) of python test suite.  It's not
	done yet.  Please don't try to use this stuff yet.  :) 
	
	* README:        expanded overview of goals & design.  
	
	* svn_tree.py:   new file, general code for creating trees.  Mucho
	                 code from Sam TH &lt;sam@uchicago.edu&gt;, and lots of hacking 
	                 from sussman.  
	
	* svn_wc.py:     code to convert a working copy to a tree.  
	
	* svn_output.py: code to convert svn subcommand output into a tree.  
	
	* xml_tests.py:  half-baked code, don't touch yet, on hold.  
	
	* svn_test_main.py:  a few additions from Sam TH allow us to run 
	                     svnadmin and create an empty repos.  
	
	* example_tests.py:  make test1() use compare_trees() as a demo.  

2001-04-24 18:18   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_repos.h (1.5), libsvn_client/update.c
	(1.17), libsvn_ra_local/ra_plugin.c (1.30, milestone-2),
	libsvn_repos/reporter.c (1.4), libsvn_ra_dav/Makefile.am (1.11,
	milestone-2), libsvn_ra_dav/commit.c (1.48), libsvn_ra_dav/fetch.c
	(1.51), libsvn_ra_dav/merge.c (1.5), libsvn_ra_dav/props.c (1.5,
	milestone-2), libsvn_ra_dav/ra_dav.h (1.22), libsvn_ra_dav/util.c
	(1.1), mod_dav_svn/Makefile.am (1.16), mod_dav_svn/dav_svn.h
	(1.32), mod_dav_svn/merge.c (1.8), mod_dav_svn/update.c (1.1),
	mod_dav_svn/util.c (1.14, milestone-2), mod_dav_svn/version.c
	(1.26, milestone-2):

	Check in a bunch of work from the plane: basically a first pass at
	"update" functionality via DAV.  
	
	WARNING: it compiles, but is untested, and other stuff may have been
	broken.  
	
	* fetch.c (vsn_url_helper, dir_item_t, report_baton_t, report_head, 
	    report_tail, report_elements, validate_element, start_element, 
	    end_element, get_attr, push_dir): buncha new stuff for updates 
	  (store_vsn_url, simple_store_vsn_url): refactor 
	  (fetch_file, simple_fetch_file): refactor 
	  (reporter_set_path, reporter_finish_report,
	    svn_ra_dav__do_update): new implementation.  
	
	* libsvn_ra_dav/merge.c (copy_href): moved to
	  util.c::svn_ra_dav__copy_href 
	(end_element): change to new svn_ra_dav__copy_href name 
	  (svn_ra_dav__merge_activity): use new MAKE_BUFFER macro 
	
	* ra_dav.h (ELEM_*): add new element identifiers 
	  (MAKE_BUFFER): new macro for creating svn_string_t to be used as a
	  buffer 
	(svn_ra_dav__copy_ref): new declaration 
	
	* dav_svn.h (dav_svn__update_report, dav_svn_find_ns): new
	  declarations 
	(dav_svn_insert_all_liveprops): ap_text_header -&gt; apr_text_header 
	
	* mod_dav_svn/merge.c (make_child_baton): make the baton in the
	    correct subpool.  
	  (dav_svn__merge_response): construct a single "rootpath" string.  
	
	* mod_dav_svn/util.c (dav_svn_find_ns): new function 
	
	* mod_dav_svn/version.c (avail_reports[]): new array 
	  (dav_svn_avail_reports, dav_svn_get_report): implement 
	
	* svn_repos.h (struct svn_repos_report_baton_t): moved to 
	    libsvn_repos/reporter.c; no need for this to be public.  
	  (svn_repos_begin_report): new function to create a reporter baton.  
	
	* ra_plugin.c (do_update): replace a bunch of code with the new 
	    svn_repos_begin_report() function.  
	
	* reporter.c (struct svn_repos_report_baton_t): new structure,
	    copied from svn_repos.h (no change).  
	  (svn_repos_set_path): simplify the sanity check. eliminate a cast.  
	  (svn_repos_finish_report): call close_edit.  
	  (svn_repos_begin_report): new function 
	
	* libsvn_client/update.c (svn_client_update): don't call close_edit
	    -- that is the responsibility of the update process(!) 
	
	* libsvn_ra_dav/Makefile.am: add util.c and Expat includes 
	
	* mod_dav_svn/Makefile.am: add update.c 

2001-04-24 14:19  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.96):

	* libsvn_wc/entries.c 
	
	  (svn_wc_entry): Bug fix.  Once we split off the basename of a path, 
	  the remain directory can't be the empty string, at least in the
	  eyes of APRs stat routines.  

2001-04-24 14:06  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/delta.c (1.43):

	* libsvn_repos/delta.c 
	
	  (svn_repos_update): Doh!  Bug fix.  

2001-04-23 09:43  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_repos.h (1.4), libsvn_repos/delta.c
	(1.42), libsvn_repos/reporter.c (1.3), mod_dav_svn/merge.c (1.7),
	tests/libsvn_repos/repos-test.c (1.2, milestone-2):

	* include/svn_repos.h 
	* libsvn_repos/delta.c 
	
	  (svn_repos_dir_delta): Updated docstring.  Change charstring args to 
	  svn_string_t.  
	
	  (svn_repos_update): New function.  
	
	* libsvn_repos/reporter.c 
	
	  (svn_repos_finish_report): Changed charstring arguments to 
	  svn_repos_dir_delta to svn_string_t.  
	
	* tests/libsvn_repos/repos-test.c 
	
	  (dir_deltas): Changed charstring arguments to svn_repos_dir_delta to 
	  svn_string_t.  
	
	* mod_dav_svn/merge.c 
	
	  (dav_svn__merge_response): Changed charstring arguments to 
	  svn_repos_dir_delta to svn_string_t.  

2001-04-23 08:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.38, milestone-2):

	Put Neon URL in a variable, since we use it in more than one place.  
	Thanks to Mo DeJong &lt;mdejong@cygnus.com&gt; for the patch.  

2001-04-22 08:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/.cvsignore (1.1, milestone-2):

	Please ignore .pyc files 

2001-04-19 21:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.76):

	(svn_wc__close_props, svn_wc__sync_props):  fix typo here too.  

2001-04-19 21:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.75):

	(svn_wc__open_props):  doh!  typo fix.  

2001-04-19 21:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.74), props.c (1.29), wc.h
	(1.149, milestone-2):

	Create new interface for *atomically* opening and closing property 
	files.  This interface is consistent with the existing "atomic" 
	working-copy administrative-area API.  
	
	* wc.h (svn_wc__open_props, svn_wc__close_props,
	  svn_wc__sync_props): new interfaces 
	
	* adm_files.c (svn_wc__open_props, svn_wc__close_props, 
	  svn_wc__sync_props):  implement.  
	
	* props.c (svn_wc_prop_set, svn_wc__wcprop_set): change internals to 
	  use this new interface.  

2001-04-19 17:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.7):

	Incorporate Branko's comments from the dev list.  Flesh out
	background of svndiff composition more.  

2001-04-19 10:25  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_wc.h (1.89), libsvn_wc/adm_crawler.c
	(1.90), libsvn_wc/entries.c (1.95), libsvn_wc/status.c (1.29):

	* libsvn_wc/status.c 
	
	  (svn_wc_statuses): Fixed logic to handle the returns from the 
	  simplified entries funcs properly.  
	
	* include/svn_wc.h 
	
	  (svn_wc_entries_read): Updated docstring.  
	
	* libsvn_wc/adm_crawler.c 
	
	  (report_local_mods): When looking at subdir entries, we need to dig 
	  a little deeper to get a fully fleshed-out entry.  
	
	* libsvn_wc/entries.c 
	
	  (read_entries): No longer need forward declaration.  
	
	  (resolve_to_defaults): Fixed to respect new rules for entries 
	  reading--no peeking in anybody else's entries files! 

2001-04-18 16:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.176):

	
	(make_file_baton):  duh, initialize wcprop array.  
	
	(close_file): move wcprop dumping to the end, *after* the log
	running guarantees that the file already exists.  

2001-04-18 16:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.175), props.c (1.28):

	Whoops, we get an error when we try to immediately dump a wc-prop to 
	disk for a newly added file (during checkout.)   Why?  Because the 
	file doesn't actually exist outside of SVN/tmp/ until close_file()
	is called.   This means that when change_file_prop(wcprop) is
	called, it fails a sanity check, because it can't find the file.  
	
	(This doesn't happen with change_dir_prop(wcprop), since newly added 
	dirs are created immediately.) 
	
	The solution is to cache the wcprops in file_baton, just like we
	cache regular props.  Then write them all out when we close_file().  
	
	* get_editor.c (struct file_baton): new wcpropchanges array and 
	  associated flag.  
	
	  (change_file_prop):  push wcprops to the new array.  
	
	  (close_file):  if flag is set, dump the wcprops.  
	
	* props.c (wcprop_list):  fix error description typos.  

2001-04-18 13:38  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/tests/: libsvn_delta/Makefile.am (1.17, milestone-2),
	libsvn_delta/deltaparse-test.c (1.67), libsvn_subr/Makefile.am
	(1.19, milestone-2), libsvn_wc/Makefile.am (1.20, milestone-2),
	libsvn_wc/commit-test.c (1.26):

	Renable (dynamic) building of the test tree.  
	
	    * tests/libsvn_subr/Makefile.am - Add @SVN_LIBSVN_FS_LIBS@ if
	        building the filesystem.  (This is because of the new
	        fs-helpers.c in libsvn_test.la) 
	
	    * tests/libsvn_delta/Makefile.am - Add @SVN_LIBSVN_FS_LIBS@ if
	        building the filesystem.  (This is because of the new
	        fs-helpers.c in libsvn_test.la) 
	
	    * tests/libsvn_wc/Makefile.am - Add @SVN_LIBSVN_FS_LIBS@ if building 
	        the filesystem.  (This is because of the new fs-helpers.c in 
	        libsvn_test.la) 
	
	    * tests/libsvn_delta/deltaparse-test.c - Add empty definition of 
	        test_funcs variable, required by the new combined
	        libsvn_test.la 
	
	    * tests/libsvn_wc/commit-test.c - Add empty definition of 
	        test_funcs variable, required by the new combined
	        libsvn_test.la 

2001-04-18 13:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_ra_dav/ra_dav.h (1.21), libsvn_wc/adm_ops.c
	(1.54), libsvn_wc/get_editor.c (1.174), libsvn_wc/props.c (1.27),
	libsvn_wc/wc.h (1.148):

	Finish implementing "wc props".  
	
	* adm_ops.c (svn_wc_get_wc_prop, svn_wc_set_wc_prop): make these 
	  existing funcs call the new, private svn_wc__wcprop_[gs]et funcs.  
	
	* get_editor.c (is_wc_prop): new helper func.  
	
	  (change_dir_prop, change_file_prop): grep for "svn:wc:" on incoming 
	  properties.  If present, just call svn_wc__wcprop_set() instead of 
	  storing them as regular props.  
	
	* ra_dav.h (SVN_RA_DAV__LP_NAMESPACE):  add "svn:wc" to all wc props 
	  coming from ra_dav.  (gstein, did I get this right?) 

2001-04-18 11:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: README (1.61, milestone-2), adm_files.c
	(1.73), props.c (1.26), wc.h (1.147):

	Re-implement "wc props" as an independent thing in the SVN 
	administrative area.  
	
	Because wc props aren't under the user's control, nor are they 
	versioned in the repository fs, it's cleaner to keep them
	independent.  It keeps updates and commits more theoretcially pure.  
	
	(gstein:  not quite there yet, hold on.) 
	
	* wc.h (SVN_WC__ADM_DPROP_BASE):  kill crufty old #define.  
	  (SVN_WC__ADM_WCPROPS, SVN_WC__ADM_DIR_WCPROPS):  new
	  administrative files to hold wc-props.  
	  (svn_wc__wcprop_path): new func to get path to wcprops/foo or 
	  dir-wcprops.  
	  (svn_wc__wcprop_get): get a single wcprop.  
	  (svn_wc__wcprop_set): set a single wcprop.  
	
	* README:  add description of 'wcprops/' and 'dir-wcprops'.  
	
	* adm_files.c (init_adm):  create these new items when initializing
	  a working copy.  
	
	  (svn_wc__wcprop_path): new func to get path to wcprops/foo or 
	  dir-wcprops.  
	
	* props.c (wcprop_list): get list of all wcprops.  
	  (svn_wc__wcprop_get): get a single wcprop.  
	  (svn_wc__wcprop_set): set a single wcprop.  

2001-04-18 09:24  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* notes/multi-args.txt (1.4, milestone-2):

	Removed unnecessary assumption that no "../blah" paths exist in TL.  
	PR: Obtained from: Submitted by: Reviewed by: 

2001-04-18 09:03  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/mod_dav_svn/: Makefile.am (1.15), merge.c (1.6):

	* mod_dav_svn/merge.c 
	
	  (dav_svn__merge_response): Renamed use of svn_fs_dir_delta to 
	  svn_repos_dir_delta.  
	
	* mod_dav_svn/Makefile.am 
	
	  Now link to libsvn_repos, too. (Did I get this right?  I don't have 
	  Apache installed on my machine) 

2001-04-17 17:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.94):

	
	* entries.c (resolve_to_defaults): fix bug whereby a 
	  property-timestamp ended up in two places whenever the update
	  editor received a directory propchange.  The timestamp should only
	  live in THIS_DIR, not in its parent's subdir entry.  
	
	  The *real* problem is in svn_wc_get_entries(): this is a small 
	  symptom of a larger Iceberg-size change that needs to be made.  In 
	  essence, get_entries needs to *stop* searching for information 
	  outside the immediate directory it's loading up, and all of its 
	  callers need to stop assuming that the entries hash returned will
	  be perfectly complete.  

2001-04-17 16:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/multi-args.txt (1.3):

	Clarify.  

2001-04-17 16:50  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_repos/.cvsignore (1.1, milestone-2):

	Another file missed in checkin...geepers.  

2001-04-17 16:48  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_repos/: .cvsignore (1.1, milestone-2),
	repos-test.c (1.1), run-repos-tests.sh (1.1, milestone-2):

	Doh!  Some forgotten stuff! 
	
	* libsvn_ra_dav/.cvsignore 
	* libsvn_repos/.cvsignore 
	
	  Things to be ignored by CVS.  
	
	* libsvn_repos/repos-test.c 
	
	  Uh...forgot to add this file to CVS.  It holds the test dir_delta 
	  formerly found in tests/libsvn_fs/fs-test.c 
	
	* libsvn_repos/run-repos-tests.sh 
	
	  Edited copy of tests/libsvn_fs/run-fs-tests.sh.  

2001-04-17 16:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.6):

	Finished (a), fleshed out (c) a lot more, pretended (b) is done.  

2001-04-17 16:13  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* configure.in (1.80, milestone-2), subversion/include/svn_fs.h
	(1.79), subversion/libsvn_fs/tree.c (1.72),
	subversion/libsvn_repos/delta.c (1.41),
	subversion/libsvn_repos/reporter.c (1.2),
	subversion/tests/fs-helpers.c (1.2, milestone-2),
	subversion/tests/fs-helpers.h (1.2, milestone-2),
	subversion/tests/libsvn_fs/Makefile.am (1.17, milestone-2),
	subversion/tests/libsvn_fs/dir-delta-editor.c (1.3),
	subversion/tests/libsvn_fs/dir-delta-editor.h (1.3),
	subversion/tests/libsvn_fs/fs-test.c (1.75),
	subversion/tests/libsvn_repos/Makefile.am (1.3, milestone-2):

	More changes toward getting the libsvn_repos and libsvn_fs 
	thingamabobs straightened out.  
	
	* configure.in 
	
	  (FS_BASED_TESTS): Add libsvn_repos to list of filesystem-based 
	  tests.  
	
	  (AC_OUTPUT): Added tests/libsvn_repos/Makefile to list of Makefiles 
	  we wish to generate.  
	
	* subversion/include/svn_fs.h 
	* subversion/libsvn_fs/tree.c 
	* subversion/libsvn_repos/delta.c 
	
	  (svn_fs_get_file_delta_stream): Rename from svn_fs_file_delta.  
	  Caller(s) changed.  
	
	* subversion/libsvn_repos/reporter.c 
	
	  (svn_repos_finish_report): Changed reference from svn_fs_dir_delta 
	  to svn_repos_dir_delta.  
	
	* subversion/tests/fs-helpers.h 
	* subversion/tests/fs-helpers.c 
	* subversion/tests/libsvn_fs/fs-test.c 
	
	  (svn_test__create_greek_tree): Function moved from 
	  tests/libsvn_fs/fs-test.c, renamed from greek_tree_under_root.  
	
	  (svn_test__check_greek_tree): Function moved from 
	  tests/libsvn_fs/fs-test.c, renamed from
	  check_greek_tree_under_root.  
	
	* subversion/tests/libsvn_fs/fs-test.c 
	* subversion/tests/libsvn_repos/repos-test.c 
	
	  (dir_deltas): Moved this function from fs-test.c to repos-test.c.  
	  test_funcs extern array updated in both files to reflect the 
	  deletion/addition of the dir_deltas test case.  
	
	* subversion/tests/libsvn_fs/Makefile.am 
	* subversion/tests/libsvn_repos/Makefile.am 
	
	  Moved dir-delta-editor.c from tests/libsvn_fs to 
	  tests/libsvn_repos.  Karl once again h4x0r3d the RCS filez.  
	
	* subversion/tests/libsvn_fs/dir-delta-editor.c 
	* subversion/tests/libsvn_fs/dir-delta-editor.h 
	
	  See ya, ladies.  

2001-04-17 15:07   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/svn_error.c (1.61):

	Print the parent pool while debugging.  

2001-04-17 15:07   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_local/Makefile.am (1.8, milestone-2):

	Make sure to grab libsvn_repos, too, when building dynamically.  

2001-04-17 14:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_fs.h (1.78), include/svn_repos.h (1.3),
	libsvn_fs/Makefile.am (1.40), libsvn_fs/delta.c (1.40),
	libsvn_fs/tree.c (1.71), libsvn_repos/Makefile.am (1.4,
	milestone-2), libsvn_repos/delta.c (1.40):

	* include/svn_fs.h 
	* include/svn_repos.h 
	
	  (svn_fs_dir_delta): Moved this prototype from svn_fs.h to 
	  svn_repos.h, renaming the function to svn_repos_dir_delta.  
	
	* libsvn_fs/Makefile.am 
	* libsvn_repos/Makefile.am 
	
	  (delta.c): Moved this file from libsvn_fs/ to libsvn_repos/ (Karl 
	  hacked the RCS to preserve history for this change).  
	
	* libsvn_repos/delta.c 
	
	  New file (with the history and contents of libsvn_fs/delta.c).  
	
	* libsvn_fs/delta.c 
	
	  Nah nah naaaaah nah, nah nah naaaaah nah, hey hey -- you get the 
	  point.  
	
	* libsvn_fs/tree.c 
	
	  (svn_fs_file_delta): New home for this function since delta.c no 
	  longer exists in libsvn_fs/ 
	
	  (svn_repos_dir_delta): Renamed from svn_fs_dir_delta.  
	  (svn_fs_file_delta): Moved to libsvn_fs/tree.c 

2001-04-17 12:41  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* configure.in (1.79), subversion/libsvn_fs/delta.c (1.39),
	subversion/libsvn_repos/delta.c (1.39),
	subversion/tests/Makefile.am (1.16, milestone-2),
	subversion/tests/fs-helpers.c (1.1), subversion/tests/fs-helpers.h
	(1.1), subversion/tests/svn_tests_main.c (1.21, milestone-2),
	subversion/tests/libsvn_delta/Makefile.am (1.16),
	subversion/tests/libsvn_fs/Makefile.am (1.16),
	subversion/tests/libsvn_fs/fs-test.c (1.74),
	subversion/tests/libsvn_fs/skel-test.c (1.18),
	subversion/tests/libsvn_ra_local/Makefile.am (1.6, milestone-2),
	subversion/tests/libsvn_repos/Makefile.am (1.2),
	subversion/tests/libsvn_subr/Makefile.am (1.18),
	subversion/tests/libsvn_subr/hashdump-test.c (1.20, milestone-2),
	subversion/tests/libsvn_subr/stringtest.c (1.8, milestone-2),
	subversion/tests/libsvn_wc/Makefile.am (1.19):

	The following is all about changes to the C-based test harness and 
	related tests.  Ouch.  If I never have to paste the text ", pool" 
	again, it will be too soon.  
	
	* configure.in 
	
	  (SVN_TESTS_MAIN_LIBS): Got rid of seperate SVN_TESTS_EDITOR_LIBS, 
	  merging it into SVN_TESTS_MAIN_LIBS.  
	
	  (BUILD_FS_STUFF): New automake conditional for use in 
	  tests/Makefile.am 
	
	* subversion/libsvn_fs/delta.c 
	
	  Sweeping change:  removed POOL field from struct context, and added 
	  POOL arguments to all functions herein that require it.  Also used 
	  subpools in places where it seemed useful to do so.  
	
	* subversion/tests/Makefile.am 
	
	  Added some comments, and made use of new BUILD_FS_STUFF conditional 
	  for deciding (based on the existence of the Berkeley DB libs) 
	  whether or not to include fs-helpers.c in the build of the SVN
	  tests library.  
	
	* subversion/tests/fs-helpers.c 
	* subversion/tests/fs-helpers.h 
	
	  New files to hold functions intended to be shared by tests/libsvn_fs 
	  and tests/libsvn_repos (when the latter comes to exist).  
	
	* subversion/tests/svn_tests_main.c 
	
	  Removed global POOL extern, adding a POOL argument to the test 
	  function prototype.  From now on, tests using this harness will be 
	  handed their own POOL to play with--no more of this global pool 
	  nonsense.  
	
	  (main): We now hand a fresh pool to each test we call, clearing it 
	  out after the test is finished before calling the next test.  
	
	* subversion/tests/libsvn_delta/Makefile.am 
	* subversion/tests/libsvn_fs/Makefile.am 
	* subversion/tests/libsvn_ra_local/Makefile.am 
	* subversion/tests/libsvn_repos/Makefile.am 
	* subversion/tests/libsvn_ra_local/Makefile.am 
	* subversion/tests/libsvn_wc/Makefile.am 
	
	  No longer refer to SVN_TESTS_EDITOR_LIBS.  All the stuff in the 
	  tests/ directory is referenced with just SVN_TESTS_MAIN_LIBS.  
	
	* subversion/tests/libsvn_fs/skel-test.c 
	* subversion/tests/libsvn_fs/fs-test.c 
	* subversion/tests/libsvn_subr/hashdump-test.c 
	* subversion/tests/libsvn_subr/stringtest.c 
	
	  Sweeping changes to remove the global POOL variable, adding POOL as 
	  a passed-in argument to all test cases (and inevitably, most of
	  the helper functions as well).  
	
	* subversion/tests/libsvn_fs/fs-test.c 
	
	  (berkeley_error_handler, fs_new, create_fs_and_repos, 
	  stream_to_string, set_file_contents, get_file_contents, typedef 
	  struct tree_test_entry_t, typedef struct tree_test_t, 
	  get_dir_entries, validate_tree_ (validate_tree, typedef struct 
	  txn_script_command_t, txn_script_exec):  Functions moved to new 
	  shared codebase tests/fs-helpers.c (with prototypes in 
	  tests/fs-helpers.h, and semi-public symbol names prefixed with 
	  "svn_test__") 

2001-04-17 05:51   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_delta/svndiff.c (1.22, milestone-2):

	Shut down the stream -&gt; window mechanism in the correct order.
	Closing the stream first could inadvertently throw out the parent of
	our subpool.  
	
	(window_handler): swap order of pool destruction and stream closing.  

2001-04-16 19:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/version.c (1.25):

	In certain cases, two collection nodes should be treated as
	equivalent.  Don't reject this case when a CHECKOUT occurs.  
	
	(dav_svn_checkout): check for an immediate parent/child relationship
	  between the requested node ID and the transaction's ID. this
	  "change" occurs during bubble up scenarios, but also during normal
	  processing (yet it would be impossible for a client to specify the
	  node in the txn, so even if the node has real changes, they should
	  be considered equivalent (although real changes should not have
	happened before a checkout...)) 

2001-04-16 19:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.77), libsvn_fs/id.c (1.23,
	milestone-2), libsvn_fs/id.h (1.11, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done, milestone-2):

	Make svn_fs__is_parent a public function. Fix small bug in the
	function.  
	
	* include/svn_fs.h (svn_fs_is_parent): new declaration 
	
	* libsvn_fs/id.c (svn_fs_is_parent): renamed from svn_fs__is_parent.  
	    Add an extra check to ensure that 14.1.3.1.7.1 is not a child of
	    14.1.  
	
	* libsvn_fs/id.h (svn_fs__is_parent): removed declaration 

2001-04-16 18:53   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.48):

	Fix the version resource URI parsing. It didn't handle the root path
	case properly (slash - path was *way* off).  
	
	(dav_svn_parse_version_uri): fix parsing for root path 

2001-04-16 18:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.5):

	Plurality fix.  But that doesn't mean this is ready for YOU to read, 
	oh, no, not at all.  It isn't ready.  I just fixed some grammar,
	okay? Thank you.  

2001-04-16 18:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.4):

	Chop chop.  Don't read this.  I mean it.  

2001-04-16 17:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/alpha_checklist (1.10):

	Formatting fix.  

2001-04-16 17:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.3):

	Brain dump, still not done.  

2001-04-16 17:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.2):

	Put not-yet-ready notice at top.  

2001-04-16 17:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/fs-improvements.txt (1.1):

	Document in progress, related to item (B) in alpha_checklist.  Not 
	ready for public consumption yet, I'm just checking in so Ben can
	read this on the train.  If you are not Ben, do not read this yet. 
	Or if you do read it, I don't want to hear about it. :-) 

2001-04-16 17:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: svn_output.py (1.6),
	xml_tests.py (1.2):

	
	* svn_output.py (compare_sets, line_matches_regexp): rewrite and 
	  rename these routines into a more Genealized Set Comparison
	  system, as a result of discussion with Karl.  
	
	* xml_tests.py (xml_checkout, xml_commit, xml_test_1, xml_test2):
	  call new svn_output funcs and change expected lines to regexps.  

2001-04-16 17:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.78):

	BugFix: library dependency ordering within variable.  

2001-04-16 15:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_repos.h (1.2),
	libsvn_ra_local/Makefile.am (1.7), libsvn_ra_local/ra_local.h
	(1.15, milestone-2), libsvn_ra_local/ra_plugin.c (1.29),
	libsvn_ra_local/update.c (1.8), libsvn_repos/Makefile.am (1.3),
	libsvn_repos/reporter.c (1.1):

	Move 'reporter' functionality (for updates) into libsvn_repos.  
	
	* reporter.c: new file, copied over from libsvn_ra_local/update.c.  
	
	* ra_local.h (svn_ra_local__set_path, svn_ra_local__finish_report, 
	  svn_ra_local__report_baton_t): remove declarations 
	
	* svn_repos.h (svn_repos_set_path, svn_repos_finish_report, 
	  svn_repos_report_baton_t): move here, with new names.  
	
	* ra_plugin.c (do_update, svn_ra_reporter_t): use reporter functions 
	  with their new svn_repos prefix.  
	
	* libsvn_repos/Makefile.am:  build reporter.c 
	
	* libsvn_ra_local/Makefile.am:  stop building update.c 

2001-04-16 14:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_repos/Makefile.am (1.1):

	Adding libsvn_repos test area 

2001-04-16 14:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_repos/Makefile.am (1.2):

	Bugfix from gstein 

2001-04-16 14:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_repos.h (1.1):

	Oops, forgot to add this file.  

2001-04-16 13:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.77), subversion/include/svn_fs.h (1.76),
	ac-helpers/svn-define-libs.m4 (1.3, milestone-2),
	subversion/libsvn_fs/Makefile.am (1.39),
	subversion/libsvn_fs/editor.c (1.37),
	subversion/libsvn_ra_local/ra_plugin.c (1.28),
	subversion/libsvn_repos/Makefile.am (1.1),
	subversion/libsvn_repos/README (1.1, milestone-2),
	subversion/libsvn_repos/commit_editor.c (1.1),
	subversion/tests/libsvn_fs/fs-test.c (1.73):

	Start moving existing code into new 'libsvn_repos' library.  
	
	This library represents tools that are needed by filesystem callers, 
	but aren't strictly part of the filesystem.  (Rather, these tools
	are built on *top* of svn_fs.h) 
	
	* libsvn_repos, Makefile.am:  new files 
	
	* libsvn_repos/commit_editor.c:  renamed from plain 'editor.c' in 
	  libsvn_fs.  
	
	  (svn_repos_get_editor):  newly prefixed name.  also, remove 
	  unnecessary svn_fs__check_fs() call.  
	
	* svn_repos.h (svn_repos_get_editor, 
	               svn_repos_commit_hook_t): 
	
	   new file, move declarations in here with new 'svn_repos' name 
	   prefixes.  
	
	* svn_fs.h (svn_fs_get_editor, svn_fs_commit_hook_t):  remove old
	declarations.  
	
	* configure.in (FS_BASED_DIRS):  add libsvn_repos to definition.  
	  (AC_OUTPUT):  build libsvn_repos/Makefile 
	  (LIBSVN_CLIENT_DEPS):  if you're building fs, build repos lib too.  
	
	* libsvn_ra_local/ra_plugin.c (get_commit_editor):  call renamed 
	  svn_repos_get_editor, and #include svn_repos.h 
	
	* libsvn_fs/Makefile.am:  stop compiling editor.c 
	
	* svn-define-libs.m4:  define SVN_LIBSVN_REPOS_LIBS 
	
	* fs-test.c (call_functions_with_unopened_fs): remove get_editor
	  test at the bottom;  this will be moved into libsvn_repos' own test 
	  suite.  

2001-04-16 10:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.17):

	Updating status page.  

2001-04-16 08:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.31), repos.c (1.47):

	Check the Content-Type header to see what is being PUT to the
	server, and process the (diff) stream accordingly.  
	
	* dav_svn.h (struct dav_resource_private): add (hacky) is_svndiff
	flag.  
	
	* repos.c (struct dav_stream): add a new writable stream field.  
	  (dav_svn_get_resource): check the Content-Type header and set the 
	    is_svndiff flag.  
	  (dav_svn_open_stream): open an svndiff-&gt;txdelta stream if
	    is_svndiff has been set.  
	  (dav_svn_close_stream): close the wstream, if present 
	  (dav_svn_write_stream): write to the svndiff/txdelta stream, or
	    create a window for writing plain text.  

2001-04-16 07:38   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/merge.c (1.4):

	More fixes for MERGE processing (commits).  
	
	(merge_elements[]): note that we need to collect CDATA for some
	elements 
	(handle_resource): relax a check because the server is taking short
	cuts 
	(validate_element): return _VALID for the merge_response child so
	  that we actually get called on its children! 
	(end_element): fill in an error when response_has_error gets set.  
	(svn_ra_dav__merge_activity): drop the callbacks into the merge
	context 

2001-04-16 07:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/merge.c (1.5):

	(send_response): fix the XML response; the DAV:status should go
	  outside of the DAV:prop element 
	
	(dav_svn__merge_response): fix the location of the DAV:status
	  element. add an [incorrect] resource type for the VCC.  

2001-04-16 06:33   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.47), merge.c (1.3):

	Bug fixes.  
	
	* commit.c (checkout_resource): add some error returns, clarify
	another.  
	
	* merge.c (svn_ra_dav__merge_activity): fix XML request 

2001-04-16 06:31   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/version.c (1.24):

	sync with latest dav_hooks_vsn 

2001-04-16 05:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/svn_error.c (1.60):

	Allow svn_error_init_pool() to be called more than once.  
	
	Fix a bug: svn_boolean_t* is NOT compatible with a void**. The hash
	  function would end up storing a void* into the svn_boolean_t
	  variable. If there was a width or alignment problem, then this would
	break horribly.  
	
	(svn_error__get_error_pool): use temp void* variable for fetching
	  values from the userdata.  
	
	(svn_error_init_pool): see if an error pool exists already, and bail
	  if one has been found.  

2001-04-16 05:29   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: activity.c (1.5), dav_svn.h (1.30),
	merge.c (1.4), repos.c (1.46):

	Miscellaneous changes to get MERGE to work properly.  
	
	* activity.c (dav_svn_get_txn, dav_svn_store_activity, 
	    dav_svn_create_activity): const-ify the "repos" parameter.
	    change all callers.  
	
	* dav_svn.h: add "const" to some params. add DAV_SVN_RESTYPE_UNSET
	    to distinguish a restype which hasn't been set from the
	ROOT_COLLECTION 
	
	* merge.c (send_response): build_uri shouldn't add an href, we'll do
	    it; handle the ap_fputstrs() return type properly.  
	  (mr_replace_root): the root dir is passed to close_directory. make
	    sure that we have a subpool for it to destroy.  
	
	* repos.c (dav_svn_get_resource): init the error pool.  

2001-04-16 05:16   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/id.c (1.22):

	The distance from 4.1 to 4.1.8.1 is one, not zero. When branching,
	the node revision causing the branch is a change, so count it.  
	
	(distance_from_prefix): compute the correct distance for branches 

2001-04-16 01:59   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/merge.c (1.3):

	Flesh out the response generation code.  
	
	(send_response): change the return type to svn_error_t. take an
	  additional "is_dir" parameter. change all callers. write the
	implementation.  
	
	(dav_svn__merge_response): handle some error conditions.  

2001-04-16 01:57   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.29), util.c (1.13):

	Add a type for building the "public" URI.  
	
	* dav_svn.h (DAV_SVN_BUILD_URI_PUBLIC): new enumeration value 
	
	* util.c (dav_svn_build_uri): add case for _PUBLIC 

2001-04-16 00:02   Greg Stein &lt;gstein@lyra.org&gt;

	* tools/cvs2svn/design-notes.txt (1.2, milestone-2):

	add an email I received from John.  add my thoughts.  

2001-04-15 20:13   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: svn_test_main.py (1.4),
	xml_tests.py (1.1):

	In process: almost done porting our two .sh scripts to python.  Of 
	course, this time, the system can automatically *verify* successful 
	tests (like our C tests.)  No more human grepping of results. :) 
	
	* svn_test_main.py (remove_wc):  new utility func.  
	  (file_append):  new utility func 
	
	* xml_tests.py:  new tests! 

2001-04-15 18:28   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.28), merge.c (1.2),
	version.c (1.23):

	Initial draft work for MERGE response generation.  
	(compiles, not tested) 
	
	* dav_svn.h (dav_svn__merge_response): adjust declaration. change
	callers.  
	
	* merge.c: mucho new code.  

2001-04-15 18:25   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.27), liveprops.c (1.20,
	milestone-2), repos.c (1.45), util.c (1.12), version.c (1.22):

	Change dav_svn_build_uri() to take a repository rather than a full
	resource.  
	
	* dav_svn.h (dav_svn_build_uri): alter declaration. change all
	callers.  
	* util.c (dav_svn_build_uri): use new param structure 

2001-04-15 17:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_local/update.c (1.7):

	Just ran across this...  
	
	(svn_ra_local__set_path): use apr_palloc since we don't need the mem
	zeroed.  

2001-04-15 17:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_output.py (1.5):

	(compare_line_lists):  bugfix, this routine now works.  

2001-04-15 07:16   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: Makefile.am (1.14), dav_svn.h (1.26),
	merge.c (1.1), version.c (1.21):

	Move the response body generation out to a new function (in a new
	file).  
	
	* merge.c: new file. implements new function --
	dav_svn__merge_response 
	
	* Makefile.am: add merge.c 
	
	* dav_svn.h: declare dav_svn__merge_response 
	
	* version.c (dav_svn_merge): check for SVN_ERR_FS_CONFLICT, rather
	    than assuming any error is a conflict. shift draft output code to
	    merge.c and use dav_svn__merge_response instead.  

2001-04-14 14:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/clients/cmdline/svn_output.py (1.4):

	I don't believe that I've ever seen a Python script that has spacing
	like that. Gotta kill that style before it spreads... Otherwise, it
	Just Isn't Python. :-) 

2001-04-14 10:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_output.py (1.3):

	Some patches from gstein.  Module still not debugged yet.  

2001-04-14 06:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.46), merge.c (1.2),
	ra_dav.h (1.20):

	Implement client-side handling of the MERGE request and response
	processing.  
	
	* merge.c (merge_elements[]): add new XML elements to process 
	  (enum merge_rtype): new enum 
	  (struct merge_ctx_t): expand with new context data for processing 
	  (add_ignored): new function to deal with URLs that appear within a 
	    DAV:ignored-set element.  
	  (bump_resource): new function to save the vsn URL, bump the
	    revision, and commit a single resource.  
	  (handle_resource): new function to process a resource once its
	    data has been gathered from the MERGE response.  
	  (validate_element): expand for add'l processed elements 
	  (start_element): implement 
	  (copy_href): new function to help with copying a DAV:href element 
	  (end_element): implement 
	  (svn_ra_dav__merge_activity): add some params. set up the add'l
	    context data. return any error that may have been generated.  
	
	* commit.c (commit_close_edit): adjust params to
	svn_ra_dav__merge_activity 
	
	* ra_dav.h (svn_ra_dav__merge_activity): add new params 
	  (ENUM_baseline): new enumerated constant 

2001-04-14 05:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/version.c (1.20):

	Begin handling for the MERGE method.  
	
	(open_txn): new function. factored out of dav_svn_checkout. given a
	  name, it opens the svn_fs_txn_t object.  
	
	(dav_svn_checkout): use new open_txn function.  
	
	(dav_svn_merge): new function to perform a DAV MERGE 
	
	(struct dav_svn_hooks_vsn): add new merge hook 

2001-04-14 05:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/util.c (1.11):

	(dav_svn_simple_parse_uri): path should be non-const to prevent
	    warnings from ap_getparents and ap_no2slash. (and it really is
	non-const) 

2001-04-14 05:47   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/svn_string.c (1.12):

	Refactor to prevent double alloc.  
	
	(create_string): new function to alloc and fill in an svn_string_t 
	
	(svn_string_ncreate): use new create_string function.  
	(svn_string_createv): use new create_string function.  

2001-04-12 18:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_output.py (1.2):

	(svn_output.compare_line_lists):  saving work, new untested func 

2001-04-12 18:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: README (1.2), svn_output.py
	(1.1):

	Adding more shared routines 

2001-04-12 14:55  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_client/commit.c (1.37),
	libsvn_ra_local/checkout.c (1.9, milestone-2):

	* libsvn_client/commit.c 
	
	  (send_file_contents): Use subpool for local allocations.  
	
	* libsvn_ra_local/checkout.c 
	
	  (send_file_contents): Use subpool for local allocations.  

2001-04-12 13:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: svn-dev.el (1.6),
	tests/clients/cmdline/example_tests1.py (1.2),
	tests/clients/cmdline/svn_entry.py (1.4, milestone-2),
	tests/clients/cmdline/svn_test_main.py (1.3):

	* svn-dev.el: Set up python mode defaults for Subversion.  
	
	* svn_entry.py, svn_test_main.py, example_tests1.py: Load
	svn-dev.el.  

2001-04-12 10:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_entry.py (1.3):

	(svn_entryparser.handle_start_tag): derive missing ancestry,
	revision, and kind values, just like our C parser does.  

2001-04-12 08:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/svn_entry.py (1.2):

	Correctly object-orient this script, as suggested by gstein.  

2001-04-12 04:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_subr/svn_error.c (1.59), include/svn_error.h
	(1.98):

	* libsvn_subr/svn_error.c 
	* include/svn_error.h 
	
	  (svn_pool_create, svn_pool_clear, svn_pool_destroy):  Wrapped these 
	  prototypes in macro checks.  When SVN_POOL_DEBUG is #define-d,
	  these function prototypes become macro calls to
	  svn_pool_create_debug, svn_pool_clear_debug, and
	  svn_pool_destroy_debug, respectively.  The *_debug version of these
	  functions print pool usage stats to stderr.  JimB is The Friggin'
	  Man for suggesting this to me (though he never asked me to commit
	  these changes to CVS...I get full blame if this is a no-no).  

2001-04-12 03:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_error.h (1.97), libsvn_client/commit.c
	(1.36), libsvn_delta/svndiff.c (1.21), libsvn_delta/text_delta.c
	(1.32, milestone-2), libsvn_delta/xml_output.c (1.37, milestone-2),
	libsvn_delta/xml_parse.c (1.154, milestone-2), libsvn_fs/dag.c
	(1.91), libsvn_fs/editor.c (1.36), libsvn_fs/fs.c (1.41),
	libsvn_fs/trail.c (1.10, milestone-2), libsvn_fs/tree.c (1.70),
	libsvn_fs/txn.c (1.40), libsvn_ra_dav/commit.c (1.45),
	libsvn_ra_local/checkout.c (1.8), libsvn_ra_local/ra_plugin.c
	(1.27), libsvn_ra_local/split_url.c (1.9, milestone-2),
	libsvn_subr/base64.c (1.17, milestone-2), libsvn_subr/quoprint.c
	(1.4, milestone-2), libsvn_subr/svn_error.c (1.58),
	libsvn_subr/xml.c (1.37, milestone-2), libsvn_wc/adm_crawler.c
	(1.89), libsvn_wc/adm_ops.c (1.53), libsvn_wc/get_editor.c (1.173),
	svnadmin/main.c (1.10), tests/svn_tests_main.c (1.20),
	tests/libsvn_delta/deltaparse-test.c (1.66),
	tests/libsvn_delta/random-test.c (1.22, milestone-2),
	tests/libsvn_wc/commit-test.c (1.25):

	* libsvn_subr/svn_error.c 
	* include/svn_error.h 
	
	  (svn_pool_destroy): New abstraction for apr_pool_destroy.  
	
	  (svn_pool_get_size): New function for querying the size of 
	  allocations in a given pool and its children.  
	
	* client/main.c 
	* libsvn_client/commit.c 
	* libsvn_delta/svndiff.c 
	* libsvn_delta/text_delta.c 
	* libsvn_delta/xml_output.c 
	* libsvn_delta/xml_parse.c 
	* libsvn_fs/editor.c 
	* libsvn_fs/fs.c 
	* libsvn_fs/trail.c 
	* libsvn_fs/tree.c 
	* libsvn_fs/txn.c 
	* libsvn_ra_dav/commit.c 
	* libsvn_ra_local/checkout.c 
	* libsvn_ra_local/ra_plugin.c 
	* libsvn_ra_local/split_url.c 
	* libsvn_subr/base64.c 
	* libsvn_subr/quoprint.c 
	* libsvn_subr/xml.c 
	* libsvn_wc/adm_crawler.c 
	* libsvn_wc/adm_ops.c 
	* libsvn_wc/get_editor.c 
	* svnadmin/main.c 
	* tests/svn_tests_main.c 
	* tests/libsvn_delta/deltaparse-test.c 
	* tests/libsvn_delta/random-test.c 
	* tests/libsvn_wc/commit-test.c 
	
	  Global change of all uses of apr_pool_destroy to the new 
	  svn_pool_destroy (for symmetry, and to allow for easier debugging 
	  without tainting APR).  
	
	* libsvn_fs/dag.c 
	
	  (make_node_immutable):  Use a subpool for the copy of the 
	  NODE-REVISION skel, and free it when finished with it.  

2001-04-12 02:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.38), libsvn_repos/delta.c
	(1.38):

	* libsvn_fs/delta.c 
	
	  Some of this code remains #define'd out until it can be further 
	  debugged...what a fragile, fragile, chunk of source.  
	
	  (add_file_or_dir):  Added source arguments to use as copyfrom args 
	  to editor functions (and to pass on for further comparison of
	  files and dirs) 
	
	  (find_nearest_entry):  Renamed from replace_with_nearest, and 
	  changed to only locate the nearest entry so the caller can do 
	  something with it, instead of actually acting on the best match
	  like it previously did.  
	
	  (delta_dirs):  Changed to make use of find_nearest_entry.  

2001-04-11 11:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.37), libsvn_repos/delta.c
	(1.37):

	(delta_dirs):  supply args in *correct* order to delta_proplists() 
	
	Broken (and fixed) by cmpilato.  This closes PR 353.  

2001-04-10 17:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: svn_entry.py (1.1),
	svn_test_main.py (1.2):

	New python script:  implements get_entries() using expat.  

2001-04-10 10:33  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.35):

	* libsvn_fs/editor.c 
	
	  (close_file): Bug fix: it pains me to see us freeing stuff out of 
	  order. Ouch.  

2001-04-10 10:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/: client_test.py (1.4),
	common.sh (1.2), example_tests1.py (1.1), svn_test_main.py (1.1):

	Modularize the main testing function, and provide a sample template
	script.  

2001-04-10 07:18   Lee P. W. Burgess &lt;lefty@red-bean.com&gt;

	* subversion/tests/clients/cmdline/client_test.py (1.3):

	* subversion/subversion/tests/client/cmdline/client_test.py 
	
	  Changed shebang line to python recommended #!/usr/bin/env python 

2001-04-09 21:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/client_test.py (1.2):

	Filling stuff out.  

2001-04-09 20:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/clients/cmdline/client_test.py (1.1):

	Woop, there it is.  

2001-04-09 13:44  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* www/project_status.html (1.16):

	I'm late, I'm late, for a very important _______.  

2001-04-09 13:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* www/project_status.html (1.15):

	A little more filling in my donut, please 

2001-04-09 11:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_ra_local/.cvsignore (1.2, milestone-2):

	Sharpened and tough, slide right my past my lips and stab a little
	farther.  "That's not good enough," she says.  "You'll have to try a
	little harder." 

2001-04-09 10:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.36), libsvn_repos/delta.c
	(1.36), tests/libsvn_fs/fs-test.c (1.72):

	* libsvn_fs/delta.c 
	
	  (replace_file_or_dir, add_file_or_dir, delete): Renamed some 
	  arguments for clarity's sake, and added some more restrictive 
	  error-checking to passed arguments.  
	
	  (replace_with_nearest): Re-commissioned this function.  
	
	  (delta_dirs): Go back to trying replace_with_nearest when we can't 
	  immediately find a matching relative entry during a directory 
	  comparison.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (dir_deltas): Added new case to test results of filesystem copies.  

2001-04-09 10:44  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/svn_test_editor.c (1.23, milestone-2):

	* tests/svn_test_editor.c 
	
	  (add_or_replace_dir, add_or_replace_file): Bug fix: make sure that 
	  copyfrom_path is non-NULL before referencing into it.  

2001-04-09 10:44  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_subr/svn_string.c (1.11):

	* libsvn_subr/svn_string.c 
	
	  (svn_string_set): Bug fix: svn_string_ensure makes sure that a 
	  string is big enough to hold N bytes of data, but doesn't actually 
	  update the LEN field of the string, so we must update that
	  ourselves when copying new contents into a previously existing
	string.  

2001-04-09 09:33   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* www/project_status.html (1.14):

	I updated the "Last Week's Activities" to give the impression that
	we actually update this page on a regular basis! ;-) Feel free to
	edit my blurb or to add other.  PR: Obtained from: Submitted by: 
	Reviewed by: 

2001-04-06 15:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_short (1.2):

	tweaks 

2001-04-06 14:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_short (1.1):

	Very short summary of alpha_checklist.  

2001-04-06 13:19   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* notes/alpha_checklist (1.9):

	Added notes from the meeting on the 5th.  

2001-04-05 14:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.8):

	Checking in notes/agenda for ongoing discussions in SF this week.  

2001-04-05 14:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/nodes-table.c (1.19,
	premerge_strings-reps-dev, milestone-2):

	(svn_fs__new_successor_id):  remove erroneous svn_fs__track_dbt() 
	call, which fixes the double-free() bug.  
	
	Submitted by RADICS Peter &lt;mitch@lbcons.net&gt;.  

2001-04-04 16:38  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_client/commit.c (1.35), libsvn_fs/delta.c
	(1.35), libsvn_ra_local/checkout.c (1.7), libsvn_repos/delta.c
	(1.35):

	* libsvn_fs/delta.c 
	
	  (send_text_delta): Remember to free windows post-consumption.  
	
	* libsvn_ra_local/checkout.c 
	
	  (send_file_contents): Remember to free windows post-consumption.  
	
	* libsvn_client/commit.c 
	
	  (send_file_contents): Remember to free windows post-consumption.  

2001-04-03 13:25   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_string.h (1.46, milestone-2),
	libsvn_subr/svn_string.c (1.10):

	Add a simple "set to this value" function.  
	
	* svn_string.h (svn_string_set): new declaration 
	* svn_string.c (svn_string_set): new implementation 

2001-04-03 08:29  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/libsvn_client/add.c (1.11, milestone-2):

	Move display of repeated add to client from libsvn_client, since not
	all clients will have a console.  
	
		* libsvn_client/add.c - change to wrap the error instead of handle
		it.  
	
		* client/add-cmd.c - handle a return of SVN_ERR_WC_ENTRY_EXISTS as a 
							warning 

2001-04-03 05:29   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: Makefile.am (1.10), commit.c (1.44),
	merge.c (1.1), options.c (1.5), props.c (1.4), ra_dav.h (1.19):

	Begin implementation of the MERGE request to commit the transaction.  
	
	* Makefile.am: add merge.c file 
	
	* commit.c (commit_close_edit): add call to
	svn_ra_dav__merge_activity 
	
	* options.c, props.c: move ELEM_* element defintions to ra_dav.h 
	
	* ra_dav.h: add ELEM_* element definitions. add declaration of 
	    svn_ra_dav__merge_activity().  
	
	* merge.c (svn_ra_dav__merge_activity): new file. initial
	implementation 

2001-04-02 21:16   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/: clients/win32/svn_com/MarshalArray.h (1.4,
	milestone-2), clients/win32/svn_com/SVN.h (1.3, milestone-2),
	clients/win32/svn_com/SVNStatus.h (1.3, milestone-2),
	clients/win32/svn_com/StdAfx.h (1.2, milestone-2),
	clients/win32/svn_com/dlldatax.c (1.2, milestone-2),
	clients/win32/svn_com/dlldatax.h (1.2, milestone-2),
	clients/win32/svn_com/misc.h (1.3, milestone-2),
	clients/win32/svn_com/svn_comCP.h (1.3, milestone-2),
	include/svn_base64.h (1.9, milestone-2), include/svn_client.h
	(1.32), include/svn_delta.h (1.150, milestone-2),
	include/svn_error.h (1.96), include/svn_fs.h (1.75),
	include/svn_hash.h (1.15), include/svn_io.h (1.36, milestone-2),
	include/svn_path.h (1.31), include/svn_quoprint.h (1.2,
	milestone-2), include/svn_ra.h (1.55, milestone-2),
	include/svn_string.h (1.45), include/svn_test.h (1.12,
	milestone-2), include/svn_types.h (1.61), include/svn_wc.h (1.88),
	include/svn_xml.h (1.30, milestone-2), libsvn_client/add.c (1.10),
	libsvn_client/apply_edits.c (1.15, milestone-2),
	libsvn_client/checkout.c (1.18, milestone-2),
	libsvn_client/client.h (1.12, milestone-2), libsvn_client/commit.c
	(1.34), libsvn_client/delete.c (1.9, milestone-2),
	libsvn_client/diff.c (1.2, milestone-2), libsvn_client/import.c
	(1.4, milestone-2), libsvn_client/status.c (1.12, milestone-2),
	libsvn_client/update.c (1.16), libsvn_delta/compose_editors.c
	(1.16, milestone-2), libsvn_delta/default_editor.c (1.7,
	milestone-2), libsvn_delta/delta.h (1.54, milestone-2),
	libsvn_delta/svndiff.c (1.20), libsvn_delta/text_delta.c (1.31),
	libsvn_delta/track_editor.c (1.4, milestone-2),
	libsvn_delta/vdelta.c (1.10, milestone-2),
	libsvn_delta/xml_output.c (1.36), libsvn_delta/xml_parse.c (1.153),
	libsvn_fs/convert-size.c (1.11, milestone-2),
	libsvn_fs/convert-size.h (1.7, milestone-2), libsvn_fs/dag.c
	(1.90), libsvn_fs/dag.h (1.42, milestone-2), libsvn_fs/dbt.c (1.18,
	milestone-2), libsvn_fs/dbt.h (1.18, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done, milestone-2),
	libsvn_fs/delta.c (1.34), libsvn_fs/editor.c (1.34),
	libsvn_fs/err.c (1.28, milestone-2), libsvn_fs/err.h (1.24,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done, milestone-2), libsvn_fs/fs.c (1.40),
	libsvn_fs/fs.h (1.19), libsvn_fs/id.c (1.21), libsvn_fs/id.h
	(1.10), libsvn_fs/node-rev.c (1.10, milestone-2),
	libsvn_fs/node-rev.h (1.9, milestone-2), libsvn_fs/nodes-table.c
	(1.18), libsvn_fs/nodes-table.h (1.9, premerge_strings-reps-dev,
	milestone-2), libsvn_fs/rev-table.c (1.12), libsvn_fs/rev-table.h
	(1.7, postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done, milestone-2), libsvn_fs/skel.c (1.27,
	milestone-2), libsvn_fs/skel.h (1.19, milestone-2),
	libsvn_fs/trail.c (1.9), libsvn_fs/trail.h (1.8,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done, milestone-2), libsvn_fs/tree.c (1.69),
	libsvn_fs/tree.h (1.6, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done, milestone-2),
	libsvn_fs/txn-table.c (1.23), libsvn_fs/txn-table.h (1.13),
	libsvn_fs/txn.c (1.39), libsvn_fs/txn.h (1.11,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done, milestone-2), libsvn_fs/validate.c (1.6,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done, milestone-2), libsvn_fs/validate.h (1.3,
	postmerge_strings-reps-dev, premerge_strings-reps-dev,
	strings-reps-dev-done, milestone-2), libsvn_repos/delta.c (1.34),
	libsvn_ra/ra_loader.c (1.6, milestone-2), libsvn_ra_dav/commit.c
	(1.43), libsvn_ra_dav/fetch.c (1.50), libsvn_ra_dav/options.c
	(1.4), libsvn_ra_dav/props.c (1.3), libsvn_ra_dav/ra_dav.h (1.18),
	libsvn_ra_dav/session.c (1.22, milestone-2),
	libsvn_ra_local/checkout.c (1.6), libsvn_ra_local/ra_local.h
	(1.14), libsvn_ra_local/ra_plugin.c (1.26),
	libsvn_ra_local/split_url.c (1.8), libsvn_ra_local/update.c (1.6),
	libsvn_subr/base64.c (1.16), libsvn_subr/hashdump.c (1.24,
	milestone-2), libsvn_subr/io.c (1.35, milestone-2),
	libsvn_subr/keysort.c (1.9), libsvn_subr/path.c (1.33),
	libsvn_subr/quoprint.c (1.3), libsvn_subr/svn_error.c (1.57),
	libsvn_subr/svn_string.c (1.9), libsvn_subr/target.c (1.4),
	libsvn_subr/xml.c (1.36), libsvn_wc/adm_crawler.c (1.88),
	libsvn_wc/adm_files.c (1.72), libsvn_wc/adm_ops.c (1.52),
	libsvn_wc/entries.c (1.93), libsvn_wc/get_editor.c (1.172),
	libsvn_wc/local_changes.c (1.27, milestone-2), libsvn_wc/lock.c
	(1.23, milestone-2), libsvn_wc/log.c (1.89), libsvn_wc/props.c
	(1.25), libsvn_wc/questions.c (1.51, milestone-2),
	libsvn_wc/status.c (1.28), libsvn_wc/util.c (1.17, milestone-2),
	libsvn_wc/wc.h (1.146), mod_dav_svn/activity.c (1.4),
	mod_dav_svn/dav_svn.h (1.25), mod_dav_svn/deadprops.c (1.11,
	milestone-2), mod_dav_svn/liveprops.c (1.19),
	mod_dav_svn/mod_dav_svn.c (1.19, milestone-2), mod_dav_svn/repos.c
	(1.44), mod_dav_svn/util.c (1.10), mod_dav_svn/version.c (1.19),
	svnadmin/main.c (1.9), tests/svn_test_editor.c (1.22),
	tests/svn_tests_main.c (1.19), tests/libsvn_delta/deltaparse-test.c
	(1.65), tests/libsvn_delta/random-test.c (1.21),
	tests/libsvn_delta/svndiff-test.c (1.12, milestone-2),
	tests/libsvn_delta/vdelta-test.c (1.8, milestone-2),
	tests/libsvn_delta/xml-output-test.c (1.14, milestone-2),
	tests/libsvn_fs/dir-delta-editor.c (1.2),
	tests/libsvn_fs/dir-delta-editor.h (1.2), tests/libsvn_fs/fs-test.c
	(1.71), tests/libsvn_fs/skel-test.c (1.17),
	tests/libsvn_ra_local/ra-local-test.c (1.9, milestone-2),
	tests/libsvn_repos/dir-delta-editor.c (1.2, milestone-2),
	tests/libsvn_repos/dir-delta-editor.h (1.2, milestone-2),
	tests/libsvn_subr/hashdump-test.c (1.19),
	tests/libsvn_subr/stringtest.c (1.7),
	tests/libsvn_subr/target-test.c (1.4),
	tests/libsvn_wc/checkout-test.c (1.42, milestone-2),
	tests/libsvn_wc/commit-test.c (1.24):

	Update copyright from 2000 to 2000-2001. Used gstein's script to
	make it all happen. Thanks, Greg.  

2001-04-02 20:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.8):

	(main): Correct typo, with thanks to Greg Stein, who is, might I
	add, sitting next to me as I write this, though he appears not to be 
	reading this log message over my shoulder, oh well.  

2001-04-02 20:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.7):

	(main): Make `lstxn' print out the txn trees too.  
	(usage): Adjust.  

2001-04-02 19:16  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_fs.h (1.74), libsvn_fs/delta.c (1.33),
	libsvn_repos/delta.c (1.33):

	* include/svn_fs.h 
	
	  Docstring changes throughout.  
	
	* libsvn_fs/delta.c 
	
	  Docstring changes throughout.  
	
	  (delta_proplists, delta_dir_props, delta_file_props): Combined the 
	  functionality of these functions into a single delta_proplists.  

2001-04-02 18:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.68):

	Add comment about solution to merging problem.  

2001-04-02 09:47  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/: libsvn_client/add.c (1.9), libsvn_wc/entries.c
	(1.92):

	Subversion now warns on repeated addition of the same entry.  
	
	* libsvn_client/add.c (svn_client_add) - Handle (as a warning), the
					(new) specific return of SVN_ERR_WC_ENTRY_EXISTS returned from 
					svn_wc_add_file and svn_wc_add_dir.  
	
	* libsvn_wc/entries.c (interpret_changes) - Return
					SVN_ERR_WC_ENTRY_EXITS when adding an already existing entry.  

2001-04-01 22:29  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/id.c (1.20):

	* libsvn_fs/id.c 
	
	  Some changes (thanks, G. Stein, for another public whipping :-).  
	
	  (svn_fs_id_length): Increased readibility of no-op loop.  
	
	  (svn_fs_id_distance): Increased readibility and correctness of no-op 
	  loop.  

2001-03-30 15:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.87):

	Bugfix.  This bug has annoyed me for way too long.  
	
	* adm_crawler.c (svn_wc_crawl_local_mods):  don't just throw commit 
	  errors upwards.  Remove all your locks in the working copy
	  *first*! 

2001-03-30 15:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/post-m2-mtg-agenda.txt (1.2):

	Merged this file into alpha-checklist, so it's no longer needed.  

2001-03-30 15:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.7):

	Reorganized this list into 3 broad categories.  

2001-03-30 14:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/hashdump.c (1.23):

	(svn_pack_bytestring):  don't forget the pool arg when hand-building 
	an svn_string_t.  This means that the change to "internalize" pools
	in svn_string_t wasn't complete.  Thanks for spotting this, gstein.
	:) 

2001-03-30 14:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/post-m2-mtg-agenda.txt (1.1):

	Appx agenda for meeting next week.  

2001-03-30 13:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.76), subversion/include/svn_ra.h (1.54),
	subversion/libsvn_ra/ra_loader.c (1.5),
	subversion/libsvn_ra_dav/session.c (1.21),
	subversion/libsvn_ra_local/ra_plugin.c (1.25):

	Really, *really* paint the bikeshed.  Try running 'svn -v' now.  
	
	Fitz:  sorry I did this.  I really needed the therapy!  But I don't 
	know how to do longopts, so maybe someone can make --version work.  
	
	
	* help-cmd.c (print_generic_help):  bikeshed paint tweak.  
	  (print_version_info):  new func 
	  (svn_cl__help):  call print_version_info if necessary.  
	
	* main.c (main):  parse the -v option into opt_state.  
	
	* cl.h (svn_cl__opt_state_t):  add boolean "version" flag.  
	
	* svn_ra.h (svn_ra_print_ra_libraries):  new declaration 
	
	* ra_loader.c (svn_ra_print_ra_libraries):  new func 
	
	* configure.in (AM_INIT_AUTOMAKE):  more descriptive version.  
	
	* ra_plugin.c (ra_local_plugin):  shorter description.  
	
	* session.c (dav_plugin): shorter description.  

2001-03-30 10:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.75):

	
	* configure.in (AC_INIT_AUTOMAKE):  may as well start labeling the 
	  build as M2, since we're close.  
	
	* help-cmd.c (print_generic_help):  paint the bikeshed, similar to 
	  CVS's shade.  

2001-03-30 10:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_dav/commit.c (1.42):

	(commit_stream_close):  fix a typo that was preventing compile.  

2001-03-30 07:56   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/nodes-table.c (1.17):

	(svn_fs__new_node_id): make it more obvious that we return in one of
	  the failure branches.  

2001-03-30 07:14   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.41):

	Continued work on committing.  
	
	PUT is now enabled (and the MKACTIVITY and CHECKOUT processes are
	working).  
	
	(struct put_baton_t): new struct for holding the data for a PUT.  
	(simple_request): ensure the request is destroyed before returning 
	(create_activity): copy the activity_url that is returned by the
	  get_func.  it doesn't have a pool, so we can't expand it to add a
	component to it.  
	(checkout_resource): ensure the request is destroyed before
	  returning. only store the path portion of the working resource URL.
	  make sure to free() the location dup'd by http_duplicate_header.  
	(commit_stream_write): new function to drop the delta stream into a
	  tmp file.  
	(commit_stream_close): new function to take the saved delta stream
	  and deliver it to the server.  
	(commit_send_txdelta): removed 
	(commit_apply_txdelta): implement to use svn_txdelta_to_svndiff()
	  and the new commit_stream_write/close functions for deliverying the
	  delta to the server.  

2001-03-30 07:06   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/options.c (1.3):

	(svn_ra_dav__get_activity_url): make sure the request gets destroyed
	  (don't exit the function without destroying it) 

2001-03-30 06:46   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/dag.c (1.89):

	Raise your hand if you tested putting binary data into the FS. Heh.
	That's what I thought.  
	
	(svn_fs__dag_set_contents): use svn_fs__mem_atom for the (binary)
	data.  
	
	Unrelated change: 
	
	(svn_fs__dag_make_copy): use apr_psprintf() rather than the
	  svn_string functions. Much simpler. Also reformat some lines.  

2001-03-30 05:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_delta/svndiff.c (1.19):

	Bug fix: the window handler did not return errors from closing the
	stream.  When ra_dav received the "close stream", it would send it
	to the server; server errors need to be propagated back to the
	driver of the window handler.  
	
	(window_handler): return the error 

2001-03-30 04:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: util.c (1.9), version.c (1.18):

	* util.c (dav_svn_simple_parse_uri): clean up the URI before parsing
	it 
	
	* version.c (dav_svn_checkout): use the correct root (the txn root) 

2001-03-29 17:41   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/trail.c (1.8):

	* trail.c (commit_trail): Call txn_checkpoint each time we complete
	a trail.  

2001-03-29 17:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_wc.h (1.87), libsvn_client/delete.c
	(1.8), libsvn_wc/adm_files.c (1.71), libsvn_wc/adm_ops.c (1.51),
	libsvn_wc/entries.c (1.91), libsvn_wc/log.c (1.88), libsvn_wc/wc.h
	(1.145):

	* include/svn_wc.h 
	
	  (svn_wc_delete): Renamed from svn_wc_delete_file, and changed the 
	  FILE argument to PATH.  
	
	* libsvn_client/delete.c 
	
	  (svn_client_delete): Renamed FILE argument to PATH, and changed to 
	  call freshly renamed svn_wc_delete.  
	
	* libsvn_wc/adm_files.c 
	
	  (svn_wc__adm_subdir): Implement this trivial function.  
	
	  (svn_wc__adm_destroy): New function (with #if 0'd contents) for 
	  future use (thought I needed it today for removing directories
	  from revision control, but we're putting off support for removing 
	  directories until post-M2.  
	
	* libsvn_wc/adm_ops.h 
	
	  (svn_wc_delete): Renamed from svn_wc_delete_file, and changed 
	  accordingly.  
	
	* libsvn_wc/entries.c 
	
	  (resolve_to_defaults): Re-instated (and fixed) some code to read 
	  "this dir"'s flags from its entry in its parent's entries file so 
	  long as we can accurately determine its name in the parent's
	  entries file.  This will change in the future when we implement a
	  new policy regarding the reading of entries files (see notes that
	  Ben is supposed to be checking in soon).  
	
	* libsvn_wc/log.c 
	
	  (remove_from_revision_control): Changed to accept flag for whether 
	  or not to remove the working file.  Also, modified to begin
	  support for removing directories from revision control.  
	
	  (log_do_delete_entry): Changed call to remove_from_revision_control 
	  to say, "Please clean up my working files." 
	
	  (log_do_committed): Fixed to properly handle committed directories, 
	  and changed call to remove_from_revision_control to say, "Um,
	  please don't mess with my working files." 
	
	* libsvn_wc/wc.h 
	
	  (svn_wc__adm_destroy): New function prototype.  

2001-03-29 17:30  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/id.c (1.19):

	* libsvn_fs/id.c 
	
	  (svn_fs_id_distance): Bug fix for slight logic mistake.  

2001-03-29 09:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.33):

	(decrement_dir_ref_count): prevent segfault when we recurse on a
	NULL parent from the root dir baton.  
	
	Patch submitted by Daniel Stenberg &lt;daniel@haxx.se&gt;.  

2001-03-29 09:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/dav_setup.txt (1.5):

	Add permissions note.  

2001-03-29 08:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/auth_proposal.txt (1.1, milestone-2):

	An idea for an auth system.  

2001-03-29 07:34   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.40):

	Big revmap to streamline the resource handling: unify
	dir_baton/file_baton; toss add_resource; introduce add_child;
	checkout_resource() takes a resource rather than a URL (and other
	simplifications); revise all/most editor callbacks for new
	checkout_resource and baton construction; pick up VR URLs from the
	WC props; etc 

2001-03-29 06:26   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.49):

	Store the version URL for the collections, too.  

2001-03-29 05:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.43):

	Ensure that we don't create paths like "//foo".  
	
	(dav_svn_do_walk): don't add "/" if the last character is already a
	slash.  

2001-03-29 05:36   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/options.c (1.2):

	Remove some debugging stuff that was accidentally left in.  

2001-03-29 04:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.39):

	Some tidbit cleanup before the real work begins.  
	
	(commit_ctx_t): add the callback funcs, the close_baton, and the
	log_msg 
	(create_activity): use the get_func to fetch the activity_url 
	(svn_ra_dav__get_commit_editor): store the callbacks, close_baton,
	log_msg 

2001-03-29 04:23   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.24), repos.c (1.42),
	version.c (1.17):

	Add support for Working Baselines. This will (eventually) be used as
	a way to attach the log message to a transaction.  
	
	* dav_svn.h (DAV_SVN_RESTYPE_WBL_COLLECTION): new define 
	  (dav_svn_create_working_resource): remove redundant repos_path
	  argument 
	
	* repos.c (dav_svn_parse_wkr_baseline_uri): new function 
	  (special_subdirs[]): added "wbl" subdir 
	  (dav_svn_prep_working): handling working baselines by skipping out
	    on most of the code, since a working baseline does not have a
	    direct correspondence to an FS structure.  
	  (dav_svn_create_working_resource): remove the repos_path argument.
	    add support for creating working baseline resources.  
	
	* version.c (dav_svn_checkout): remove repos_path argument to the 
	    dav_svn_create_working_resource call.  

2001-03-29 03:57   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.23), repos.c (1.41), util.c
	(1.8), version.c (1.16):

	Add a new function to parse URIs sent within a request body, and use
	it to parse the "activity ID" out of a CHECKOUT request.  
	
	Validate that the version resource being checked out corresponds to
	the "latest".  
	
	* dav_svn.h (struct dav_svn_uri_info, dav_svn_simple_parse_uri): new 
	    definition and declaration 
	
	* repos.c: couple comments is all 
	
	* util.c (dav_svn_simple_parse_uri): new function 
	
	* version.c (dav_svn_checkout): parse the activity ID out of the
	    provided href. validate the VR being checked out is the "latest".  

2001-03-29 02:17   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/: svn_delta.h (1.149), svn_error.h (1.95),
	svn_io.h (1.35), svn_types.h (1.60), svn_wc.h (1.86), svn_xml.h
	(1.29):

	Add some #includes to various headers to pick up the things that
	they need, rather than implicitly depending on svn_types.h to do it.  
	
	Also shift some of the C++ stuff to its proper location.  
	
	svn_types.h should have some includes ripped out of it since the
	header doesn't actually depend on them, but it creates too many
	warnings across the code to deal with, so the includes are still
	there for now.  

2001-03-28 18:09   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/ra_dav.h (1.17):

	whoops. one more change for latest RA interface.  

2001-03-28 18:05   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.48):

	sync with latest RA change 

2001-03-28 18:02   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: fetch.c (1.47), ra_dav.h (1.16),
	session.c (1.20):

	Add support for RA-&gt;get_latest_revnum to enable "svn status" to
	work.  
	
	* ra_dav.h (svn_ra_dav__get_latest_revnum): new declaration 
	
	* session.c (dav_plugin): add svn_ra_dav__get_latest_revnum into its
	slot 
	
	* fetch.c (svn_ra_dav__get_latest_revnum): new function 

2001-03-28 17:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.85), libsvn_client/Makefile.am
	(1.15, milestone-2), libsvn_client/commit.c (1.33),
	libsvn_client/import.c (1.3):

	Get a brain: 
	
	* include/svn_wc.h (svn_wc_import): Remove declaration.  
	
	* libsvn_client/import.c: Removed, code transferred to commit.c.  
	
	* libsvn_client/Makefile.am (libsvn_client_la_SOURCES): Removed 
	import.c.  
	
	* libsvn_client/commit.c (import): New internal func, was 
	svn_wc_import.  

2001-03-28 17:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.94), include/svn_ra.h (1.53),
	libsvn_client/update.c (1.15), libsvn_ra_local/ra_plugin.c (1.24),
	libsvn_ra_local/update.c (1.5), libsvn_wc/adm_crawler.c (1.86):

	Slight change to RA's "update" interface, as discussed with gstein.  
	
	* svn_ra.h (do_update):  remove base_revision argument.  
	
	* ra_plugin.c (do_update):  remove base_revision arg;  don't create 
	  the transaction here.  
	
	* update.c (svn_ra_local__set_path): create the initial transaction 
	  *here* instead, assuming that the first call is on the update
	  target dir itself.  
	
	* adm_crawler.c (svn_wc_crawl_revisions): make sure that the very 
	  first path we report is "".  
	
	* svn_error.h (SVN_RA_BAD_REVISION_REPORT): new errortype.  
	
	* update.c (svn_client_update): call do_update correctly.  
	
	Unrelated: 
	
	  (get_common_path): remove this cruft, Kevin Pilch-Bisson wrote the 
	  real thing.  

2001-03-28 17:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.93), include/svn_wc.h (1.84),
	libsvn_client/import.c (1.2), libsvn_wc/adm_files.c (1.70):

	Protect against importing "SVN/" subdirs.  
	
	* libsvn_client/import.c (svn_wc_import, import_dir): Check name 
	before importing.  
	
	* include/svn_wc.h (SVN_WC_ADM_DIR_NAME): New #define.  
	
	* libsvn_wc/adm_files.c (SVN_WC__ADM_DIR_DEFAULT): Removed in favor
	of public SVN_WC_ADM_DIR_NAME.  
	(adm_subdir): Adjust for above.  
	
	* include/svn_error.h (svn_errno_t): New error 
	SVN_ERR_CL_ADM_DIR_RESERVED.  
	
	Fix related to the previous commit that moved import.c: 
	
	* libsvn_client/import.c: Don't #include "wc.h".  
	
	Notes on the first change: 
	
	This may or may not resolve Kevin Pilch-Bisson's recent bug report, 
	see 
	
	PR: 340 
	
	and these dev mails 
	
	&lt;20010328114611.A20048@pilch-bisson.net&gt; 
	&lt;86ae65kdxt.fsf@newt.ch.collab.net&gt; 
	&lt;20010328123804.A20221@pilch-bisson.net&gt; 
	&lt;864rwdkban.fsf@newt.ch.collab.net&gt; 
	
	I haven't closed the PR yet, as there may be more to this issue.  

2001-03-28 17:20   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.87):

	clean up 

2001-03-28 16:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_client/Makefile.am (1.14),
	libsvn_client/import.c (1.1), libsvn_wc/Makefile.am (1.28,
	milestone-2), libsvn_wc/import.c (1.3):

	Put import.c in libsvn_client instead of libsvn_wc, as suggested by 
	Greg Stein: 
	
	* libsvn_wc/import.c: Moved to ../libsvn_client.  
	
	* libsvn_wc/Makefile.am (libsvn_wc_la_SOURCES): Removed import.c.  
	
	* libsvn_client/import.c: New file, copied from ../libsvn_wc.  
	Repository history not kept, as wasn't much anyway.  
	
	* libsvn_client/Makefile.am (libsvn_client_la_SOURCES): Added 
	import.c.  

2001-03-28 15:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.6):

	Note need for 'svn revert':  we can just copy the SVN/text-base/
	file back out into the working copy, no repository communication
	necessary.  

2001-03-28 15:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.32):

	Make the fs-commit editor match the subpooling/reference-counting 
	behavior of the wc-update editor.  This allows efficient memory
	usage (an independent pool for each dir and file baton), as well as
	allowing the editor to be driven in a postfix-text-delta-ey way.  
	
	(struct dir_baton):  add ref_count and subpool fields.  
	
	(delete_entry):  use subpool.  
	
	(replace_root, add_directory, replace_directory): create a subpool
	of parent's pool, allocate new dir_baton in there.  
	
	(replace_file, add_file):  ditto.  
	
	(change_file_prop, change_dir_prop):  duh, use baton's own subpool.  
	
	(decrement_dir_ref_count):  new func.  

2001-03-28 14:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.70):

	(dir_deltas): Revert 1.65-&gt;1.66 change; i.e., don't use subpools. 
	The change didn't fix my bug, and anyway the subpools weren't really 
	addressing the intensive pool usage in the innermost loop.  

2001-03-28 14:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.5):

	More things to discuss next week.  

2001-03-28 12:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.4):

	Add another optimization to-do.  

2001-03-28 12:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/dav_setup.txt (1.4):

	Add extra FreeBSD note.  

2001-03-28 11:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.69):

	(test_funcs):  re-enable dir_deltas test, so we can debug memory 
	issues with it.  

2001-03-28 11:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.6):

	(usage): Declare static.  

2001-03-28 07:38  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/tests/libsvn_subr/: target-test.c (1.3),
	target-test.sh (1.3):

	Change this test to a version which compares the output to an
	expected output.  This should be better for checking whether
	realpath works as expected on all platforms.  NOTES: 
		   (1) I have tested my implementation of condense_targets on
		   Linux, WinNT, and Solaris 8.  Ben can you pay extra attention to
	this test on your FreeBSD box? 
		   (2) I am told that realpath is broken on older Solaris machines.  
	Maybe we should warn people using Solaris &lt; 8 to run make check, and
	ensure that this test passes.  
		   (3) Anyone using BeOS, or OS2, I would expect this to fail, as I 
	have no implementation for svn_path_get_absolute for those
	platforms.  
	
	All this realpath stuff should go away soon, because APR is going to
	take care of it, but since M2 is this Sunday, I don't know whether
	APR will be doing it by then or not, so I thought I would play it
	safe.  

2001-03-28 07:28  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/svnadmin/Makefile.am (1.3, milestone-2):

	Let svnadmin be installed when make install is run 

2001-03-28 05:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.38), ra_dav.h (1.15):

	Update to latest spec for RA-&gt;commit 

2001-03-28 05:54   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra/ra_loader.c (1.4):

	Some debug code that I used. Might be helpful for others.  

2001-03-28 05:53   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_string.h (1.44):

	Remove the __GNUC__ guards. APR handles __attribute__ for us, when
	it isn't present, or is non-functional.  
	
	Move the C++ stuff to the proper location (we don't want it to apply
	to other headers via a #include).  

2001-03-28 05:51   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: Makefile.am (1.9), fetch.c (1.46),
	options.c (1.1), ra_dav.h (1.14):

	Add an OPTIONS request to fetch the collection where activities
	should be created.  
	
	* options.c: new file.  
	  (svn_ra_dav__get_activity_url): new function 
	
	* fetch.c (begin_checkout): use new svn_ra_dav__get_activity_url
	    function.  remove old stub activity_url creation.  
	
	* ra_dav.h (svn_ra_dav__get_activity_url): new declaration 
	
	* Makefile.am: add new file (options.c) 

2001-03-28 04:53   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/liveprops.c (1.18):

	Enable the DAV:checked-in live property for REGULAR resources (those
	in the "public" area, and in the Baseline Collections). This is
	liveprop that provides the Version Resource URL to the client.  
	
	(dav_svn_insert_prop): add code to generate the DAV:checked-in prop
	value 

2001-03-28 04:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.22), util.c (1.7):

	As part of the prior checkin, enable construction of the URL to the 
	activity-collection-set.  
	
	* dav_svn.h (DAV_SVN_BUILD_URI_ACT_COLLECTION): new enum value to
	    specify building the activity collection set URL 
	
	* util.c (dav_svn_build_uri): construct and return the new URL 

2001-03-28 04:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/version.c (1.15):

	Sync with the latest Apache/mod_dav changes (by John Vasta), and add
	a response to the DAV:activity-collection-set OPTIONS request.  
	
	(dav_svn_set_target): removed. it is now "update" and is optional,
	  and we won't ever support it, so it goes away.  
	(dav_svn_add_label, dav_svn_remove_label): we won't provide support
	  for the LABEL method (although we will support DAV labels as
	  server-applied items), so these functions go away.  
	(dav_svn_hooks_vsn): revise the list of hook functions, per above.  
	(dav_svn_get_option): add response code for the
	  DAV:activity-collection-set OPTIONS request.  

2001-03-28 03:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/Makefile.am (1.26):

	libsvn_ra_local is built conditionally. It is part of FS_BASED_DIRS
	when the configure process decides to build it. This also puts
	ra_local at the right spot in the sequence of building.  

2001-03-28 01:20   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.74):

	The ENABLE macros for --enable-debug and --enable-maintainer-mode
	were wonked after the recent change from --with to --enable.
	Specifically, the debug/maintainer modes were always being set(!).  

2001-03-28 01:02   Greg Stein &lt;gstein@lyra.org&gt;

	* www/testing-goals.html (1.1, milestone-2):

	Draft document of goals for an automated test suite.  
	
	Submitted by: Mo DeJong &lt;mdejong@cygnus.com&gt; 

2001-03-27 22:29   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.73):

	no more tests/libsvn_ra_dav 

2001-03-27 21:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/import.c (1.2), tests/libsvn_fs/fs-test.c
	(1.68):

	Imports working, more edge testing still required: 
	
	* import.c (import_dir): Skip "." and ".." entries.  
	(svn_wc_import): Pass 0 instead of invalid revnum.  

2001-03-27 21:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svnadmin/main.c (1.5):

	Print revision trees.  Now we can inspect repositories from the 
	command line: 
	
	(print_tree, usage): New funcs.  
	(main): Added "youngest" and "lsrevs" commands.  Use new usage()
	func to print help.  

2001-03-27 20:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.67):

	(test_funcs): Comment out dir_deltas now, so make check doesn't
	hang.  

2001-03-27 20:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.66):

	Whoa.  When I ran fs-test.c:dir_deltas() independently via 
	
	   $ ./fs-test 24 
	
	it runs okay, though a bit slow.  When I run it as part of the full 
	test suite 
	
	   $ ./fs-test 
	
	my machine grinds to a halt.  Perhaps we have reached the limit of 
	using the same test pool for everything?  The double loop that calls 
	svn_fs_dir_delta() might be quite a strain.  
	
	So: 
	
	* fs-test.c (dir_deltas): Use subpools.  
	
	Hmmmm.  This doesn't seem to fix the grind-to-a-halt problem.  Maybe 
	my diagnosis is wrong.  On the other hand, this change didn't make
	the symptoms worse.  I'm committing, mainly so Mike Pilato will see
	this log message and try to reproduce the problem. :-) 

2001-03-27 19:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_tests_main.c (1.18):

	(do_test_num): Newline in error message.  

2001-03-27 19:13   Greg Stein &lt;gstein@lyra.org&gt;

	* notes/dav_setup.txt (1.3):

	a note about keeping Apache and SVN in sync.  

2001-03-27 19:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_ra.h (1.52), libsvn_client/commit.c
	(1.32), libsvn_ra_local/ra_plugin.c (1.23):

	* svn_ra.h (svn_ra_plugin_t.get_commit_editor): Change contract --
	any of get_func, set_func, and close_func may be null.  
	
	* commit.c (send_to_repos): Pass null for the commit help funcs in
	the import case.  
	
	* ra_plugin.c (cleanup_commit): Check close_func exists before
	calling it.  
	
	Note to Greg Stein and Ben: I didn't find any other callers to fix, 
	but may have missed some.  You guys would probably know where they 
	are.  

2001-03-27 19:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/import.c (1.1):

	Forgot to add these files in the last commit.  
	
	NOTE: Build may be broken right now; if so, it will be all right in
	a jiffy.  

2001-03-27 18:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.83), libsvn_client/commit.c
	(1.31), libsvn_wc/Makefile.am (1.27):

	Import code in progress: 
	
	* include/svn_wc.h (svn_wc_import): Declare.  
	
	* libsvn_wc/import.c (svn_wc_import, import_dir, import_file, 
	send_file_contents): New file, new funcs.  
	
	* libsvn_wc/Makefile.am (libsvn_wc_la_SOURCES): Add import.c.  
	
	* client/import-cmd.c (svn_cl__import): New file, new func, still 
	skeletal.  
	
	* client/Makefile.am (svn_SOURCES): Add import-cmd.c.  
	
	* client/main.c (svn_cl__cmd_table): Add import command.  
	
	* client/cl.h (svn_cl__import): Declare.  
	
	Unrelated change: 
	
	* svn_wc.h (svn_wc_close_commit, svn_wc_crawl_local_mods):
	Formatting fixes.  

2001-03-27 17:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.86), subversion/include/svn_wc.h (1.82),
	subversion/libsvn_client/commit.c (1.30),
	subversion/libsvn_wc/adm_ops.c (1.50):

	Finish implementing WC props.  This completes Change #3 in STACK.  
	
	* svn_wc.h (svn_wc_close_commit):  remove this crufty old
	declaration.  
	
	  (svn_wc_get_wc_prop, svn_wc_set_wc_prop):   new public declarations.  
	
	* adm_ops.c (svn_wc_get_wc_prop, svn_wc_set_wc_prop):  implement.  
	
	* commit.c (send_to_repos): pass these two new funcs to the RA layer 
	
	* STACK:  remove change #3.  

2001-03-27 17:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_ra_local/Makefile.am (1.5):

	Suddenly tests/libsvn_ra_local/ won't build: 
	
	   /usr/libexec/elf/ld: cannot find -lneon 
	
	Gstein, can you investigate?  I'm temporarily disabling this dir's 
	build.  

2001-03-27 17:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.51), libsvn_client/commit.c
	(1.29), libsvn_ra_local/ra_plugin.c (1.22):

	Change RA interface for commits, supporting "WC props" fully.  
	
	* svn_ra.h (svn_ra_get_wc_prop_func_t):  new RA function type.  
	
	  (get_commit_editor): the client must now supply a third function of 
	  the above type when fetching the commit editor.  
	
	* commit.c (send_to_repos):  update call to get_commit_editor() 
	
	* ra_plugin.c (get_commit_editor): match new prototype.  

2001-03-27 17:14   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.45):

	stop passing a (fake) ancestor path to add_directory/add_file.  

2001-03-27 17:02   Greg Stein &lt;gstein@lyra.org&gt;

	* notes/dav_setup.txt (1.2):

	Pointer for FreeBSD systems to get a working Apache 2.0. Other
	tweaks.  

2001-03-27 16:54   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/Makefile.am (1.15):

	Toss all the libsvn_ra_dav "tests". They were actually little hacks
	to do checkouts and commits, and have been superceded by the cmdline
	client now being able to use libsvn_ra_dav.  

2001-03-27 16:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.92), libsvn_delta/xml_parse.c
	(1.152), libsvn_ra_local/checkout.c (1.5), libsvn_wc/get_editor.c
	(1.171):

	Fix bug 336;  in reality, make the update editor's add_directory() 
	routine understand the new semantics of the "copyfrom" arguments.  
	
	(Note: gstein, I probably broke ra_dav checkouts.  Make sure your 
	editor-driver is always passing *invalid* copyfrom args to 
	add_directory and add_file.) 
	
	PR: 336 
	
	* svn_error.h (SVN_ERR_UNSUPPORTED_FEATURE):  new errortype 
	
	* get_editor.c (add_directory):  enforce copyfrom_* argument 
	  semantics, as described in the editor docstring.  If copyfrom_args 
	  are valid, return an UNSUPPORTED_FEATURE error.  If they're
	  invalid, then derive them from the parent.  
	
	  (add_or_replace_file):  comment about future optimization.  
	
	* checkout.c (walk_tree):  ra_local should pass only invalid
	  copyfrom args during a checkout.  
	
	* xml_parse.c (do_directory_callback):  when parsing xml, pass only 
	  invalid copyfrom args to add_directory().  

2001-03-27 14:53  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.32), libsvn_repos/delta.c
	(1.32), tests/libsvn_fs/Makefile.am (1.15),
	tests/libsvn_fs/dir-delta-editor.c (1.1),
	tests/libsvn_fs/dir-delta-editor.h (1.1), tests/libsvn_fs/fs-test.c
	(1.65), tests/libsvn_repos/dir-delta-editor.c (1.1),
	tests/libsvn_repos/dir-delta-editor.h (1.1):

	* libsvn_fs/delta.c 
	
	  (replace_with_nearest): De-commissioned this function until further 
	  notice.  
	
	  (add_file_or_dir): Cosmetic changes only.  
	
	  (replace_file_or_dir): Added base_revision validity check.  
	
	  (delta_dirs): Changed to, instead of using the de-commissioned 
	  replace_with_nearest, replace unrelated entries with a deleta/add 
	  combo (with cheese, no pickles, onion rings, and Biggie-size that, 
	  please).  
	
	* tests/libsvn_fs/dir-delta-editor.c 
	* tests/libsvn_fs/dir-delta-editor.h 
	
	  New files for the svn_fs_dir_delta test case in fs-test.c, these 
	  contain the implementation of an editor driven by svn_fs_dir_delta 
	  to in turn use filesystem calls to modify the state of a
	  transaction tree.  
	
	* tests/libsvn_fs/Makefile.am 
	
	  (dir-delta-editor.c) New file to build.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  #include dir-delta-editor.h and svn_delta.h now.  Also, fixed some 
	   comments in places where tree_test_entry_t's were used.  
	
	  (tree_test_t): New structure for wrapping tree_test_entry_t items.  
	
	  (txn_script_command_t): New structure for making quick-n-dirty edits 
	  to a filesystem transaction.  
	
	  (txn_script_exec): Function for executing the quick-n-dirty edits as 
	  defined by the array of txn_script_command_t's.  
	
	  (dir_deltas): New test case for svn_fs_dir_delta().  
	
	  (test_funcs): Added reference to new test dir_deltas.  

2001-03-27 13:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.81), libsvn_client/commit.c
	(1.28), libsvn_wc/adm_crawler.c (1.85),
	tests/libsvn_wc/commit-test.c (1.23):

	* commit.c (send_to_repos): Continuing to spec out import case.  
	
	* svn_wc.h, adm_crawler.c (svn_wc_crawl_local_mods): Don't take
	target hash pointer any more, it is a vestige of old callers.  Just
	keep the hash internally instead.  All callers changed.  

2001-03-27 12:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.31), include/svn_wc.h
	(1.80), libsvn_client/commit.c (1.27):

	* svn_client.h, commit.c (svn_client_import): Interface fix.  
	
	* commit.c (send_to_repos): Adjust for above.  
	(svn_client_import, svn_client_commit): Adjust for above.  
	
	* svn_wc.h (svn_wc_crawl_local_mods): Doc cleanups, in preparation
	for import changes.  

2001-03-27 12:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/dav_setup.txt (1.1):

	mod_dav_svn:  try it at home, kids\! 

2001-03-27 11:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/Makefile.am (1.14):

	Comment out libsvn_ra_dav temporarily.  
	
	gstein, something you did last night prevents tests/libsvn_ra_dav
	from linking.  But I don't have time to figure it out.  :) 

2001-03-27 11:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.67):

	(svn_fs_merge): Clarify issues in a todo item.  

2001-03-27 08:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: fetch.c (1.44), props.c (1.2),
	session.c (1.19):

	Get DAV-based checkouts to work. (yeah!) 
	
	* fetch.c (starting_props[]): fetch the resourcetype so we can
	    verify that the accessed resource is a collection.  
	  (fetch_file): add a placeholder error return to catch problems 
	  (begin_checkout): add placeholder error returns. print out the 
	    intermediate URLs as we track down the BC.  
	  (svn_ra_dav__do_checkout): compare against bc_root rather than
	    ras-&gt;root to determine whether we're at/in the root.  
	
	* props.c (create_private): clean trailing slashes from the URL; use
	    a non-const variable (url_path) while working on the URL, then copy
	    into r-&gt;url.  
	  (end_element): restructure so that we don't punt on DAV_ELM_href
	    right off the bat. we need to process that special. *then* look up
	    non-href elements' definitions.  
	  (svn_ra_dav__get_props): set up the pool variable in the context.
	    use APR_EGENERAL in the placeholder errors rather than 0 (which is
	  success).  
	(svn_ra_dav__get_props_resource): use "url" consistently rather than 
	    ras-&gt;root.  
	
	* session.c (svn_ra_open): clean trailing slashes from the root
	path.  

2001-03-27 08:19   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.21), liveprops.c (1.17),
	repos.c (1.40), util.c (1.6):

	Various bugfixes.  
	
	* dav_svn.h (dav_svn_build_uri): add new "add_href" parameter 
	
	* liveprops.c (SVN_PROPID_baseline_relative_path): start this value
	    at 1 rather than zero. The latter means "not found" (so the property
	    wasn't working at all) 
	  (dav_svn_insert_prop): use new add_href parameter to
	  dav_svn_build_uri 
	
	* repos.c (dav_svn_prep_version): use new add_href parameter 
	  (dav_svn_walk): repos_path can be null for resources without a 
	    corresponding FS resource. watch out when we try to walk these.
	    note that a "walk" is implicitly depth==0; these resources have
	    no children since they are purely logical.  
	
	* util.c (dav_svn_build_uri): implement new "add_href" parameter.
	    this will wrap the constructed URI in DAV:href elements.  

2001-03-27 05:59   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_ra_dav/Makefile.am (1.8),
	libsvn_ra_local/Makefile.am (1.6):

	when linking shared-lib forms, ensure they reference their dependent
	libs 

2001-03-27 04:28   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.37):

	track the rename of the suggested switches for developers.  

2001-03-27 04:27   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.72):

	Rename --with-debug and --with-maintainer-mode to --enable-debug and 
	--enable-maintainer-mode.  
	
	Submitted by: Mo DeJong &lt;mdejong@redhat.com&gt; 

2001-03-27 03:57   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: Makefile.am (1.7), fetch.c (1.43),
	props.c (1.1), ra_dav.h (1.13):

	Major revamp for the checkout process.  
	
	Specifically, we no longer check out from the "public" space since
	the revisions could bump during our checkout. Instead, we head off
	to a baseline and check that out (baseline == FS revision tree).  
	
	Refactored property fetching out into props.c.  
	
	==&gt; UNTESTED 
	
	* Makefile.am: add new props.c file 
	
	* fetch.c (starting_props[], vcc_props[], baseline_props[]): new
	    sets of props to fetch from various resources.  
	  (fetch_elems[], struct resource_t, fetch_ctx_t, create_private, 
	    pfind_results, validate_element, start_element, end_element):
	  nuked (struct subdir_t): new structure for tracking subdirs to
	  process (struct file_read_ctx_t): new structure for use during file
	  download 
	(get_vsn_url): new function 
	  (fetch_dirents): new parameter set (rather than passing via "fc").
	    use new svn_ra_dav__get_props() and process its results.  
	  (fetch_file_reader): use new file_read_ctx_t 
	  (fetch_file): new parameter set (rather than passing via "fc").
	    use new file_read_ctx_t. switch to svn_ra_dav_resource_t. vsn_url
	    is now retrieved by get_vsn_url rather than available in the
	    resource structure.  
	  (begin_checkout): implement 
	  (svn_ra_dav__do_checkout): revamp for all of above 
	  (svn_ra_dav__do_update): update params to latest spec 
	
	* ra_dav.h (svn_ra_dav__do_update): update params to latest spec 
	  (SVN_RA_DAV__PROP_*): new defines 
	  (struct svn_ra_dav_resource_t): new structure to hold property and 
	    resource information discovered during a PROPFIND.  
	  (svn_ra_dav__get_props, svn_ra_dav__get_props_resource): new
	  declarations 

2001-03-27 03:25   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.39):

	Fix the walking when a REGULAR resource occurs at arbitrary points
	in the URL namespace. Specifically, they occur in the "public" URL
	space and also as part of the Baseline Collections. In this case,
	repos_path != uri_path, so we need to track them separately when
	walking the tree.  
	
	(struct dav_svn_walker_context): add repos_path string member for 
	  telescoping the repository path.  
	(dav_svn_do_walk): handle the new repos_path member 
	(dav_svn_walk): prepare the new repos_path member 

2001-03-27 03:08   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.20), repos.c (1.38):

	Process Baseline resource URIs.  
	
	* dav_svn.h (DAV_SVN_RESTYPE_BLN_COLLECTION): new enumerated
	constant 
	* repos.c (dav_svn_parse_baseline_coll_uri): don't tweak if we don't
	    find a slash character. it means they are referring to the root.  
	  (dav_svn_parse_baseline_uri): new function 
	  (special_subdirs[]): add entry for the baselines 

2001-03-27 03:05   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/deadprops.c (1.10):

	(dav_svn_db_nextkey): make sure that a hash index is available
	    before skipping to the next one. (if the hash was empty, then
	    firstkey ends up setting db-&gt;hi == NULL) 

2001-03-27 01:53   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/liveprops.c (1.16):

	(dav_svn_insert_prop): handle the DAV:checked-in property for VCCs 

2001-03-26 18:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.84), entries.c (1.90),
	status.c (1.27):

	We have a convention about how working-copy entry info is stored.  
	Make *retrieval* match this convention.  
	
	   - If the object is a file, then *all* info is in its entry.  Any 
	     missing URL or revision info is implicitly inherited from 
	     THIS_DIR.  
	
	   - If the object is a dir, but not THIS_DIR, then the entry should 
	     contain *only* a "name" and "kind" field, and optionally some 
	     state flags (ADD, DELETE, etc.) 
	
	   - If the object is THIS_DIR, all ancestry is *required*.  This is 
	     also where to find timestamps and other info.  (The reason its 
	     flags are in the parent are because adds/deletes are changes to 
	     the parent, not the dir.) 
	
	PR: 325 It also paves the way for 'svn cp' to work correctly
	someday.  
	
	* entries.c (resolve_to_defaults):  take a path argument, the one
	  that produced the *entries hash.  Add better logic for deriving
	  ancestry at the bottom of this routine.  
	
	  (read_entries):  take new boolean arg, indicating whether it's okay 
	  to search up and down for missing entry info.  
	
	  (svn_wc_entries_read):  call read_entries with TRUE flag.  
	
	* adm_crawler.c (report_local_mods):  when committing an added dir, 
	  be sure to supply "copyfrom" args that are either both invalid or 
	  both valid.  Also be sure not to look for ADD/DELETE flags on a 
	  THIS_DIR entry.  Those should only be honored in a parent entry.  
	
	* status.c (svn_wc_statuses):  make this routine recurse and build
	  the hash of statuses correctly, given what svn_wc_entries_read()
	  returns now.  

2001-03-26 18:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.30), libsvn_client/commit.c
	(1.26):

	* commit.c (send_to_repos): New internal func for shared internals
	of commit and import, the latter in progress.  
	(commit): Use above.  
	(import): New func, use above.  

2001-03-26 17:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/clients/cmdline/: README (1.1), common.sh (1.1):

	Starting automated cmdline client test system.  This may or may not
	be the final form of this test system, but we need something right
	now, because the cmdline client functionality has long since
	ballooned to the point of needing automated tests.  

2001-03-26 16:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/testing_framework.txt (1.6):

	Removed this redundant copy of ../subversion/tests/README.  

2001-03-26 13:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.66):

	(svn_fs_merge): Finished.  This was accidentally left out of the
	last commit.  

2001-03-26 13:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/multi-args.txt (1.2):

	Added one more action item for the multi-arg drive this week.  

2001-03-26 13:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.64):

	Cleanups to remove compile warnings and make internal interfaces
	more consistent: 
	
	(fetch_youngest_rev, merge_trees): Finish.  
	(test_funcs): Invoke the above two tests.  
	
	(attempt_merge, test_commit_txn): Doc and interface fixes.  Don't 
	bother to accept a conflict pointer, since no caller ever used it; 
	instead, just use own internal conflict holder.  All callers
	changed.  

2001-03-26 11:04  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_fs.h (1.73), libsvn_fs/delta.c (1.31),
	libsvn_repos/delta.c (1.31):

	* libsvn_fs/delta.c 
	
	  (get_revision_from_hash): Bug fixes to bug fixes.  
	
	  (struct context): Added 'const' to editor field.  
	
	* libsvn_fs/delta.c 
	* include/svn_delta.h 
	
	  (svn_fs_dir_delta): Added 'const' to editor argument.  

2001-03-26 04:05   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.19), deadprops.c (1.9),
	liveprops.c (1.15), repos.c (1.37), util.c (1.5):

	Add Version-Controlled Configurations (VCCs), Baselines, Baseline 
	Collections (BCs), and some live property support to enable
	checkouts.  
	
	* dav_svn.h (DAV_SVN_DEFAULT_VCC_NAME): new define 
	  (enum dav_svn_private_restype): add values for the root
	    collection, the collection of VCCs, the collection of BCs, and
	  individual VCCs.  (enum dav_svn_build_what, dav_svn_build_uri): new
	enum and func decl.  
	
	* deadprops.c (dav_svn_db_open): many resource types don't have dead
	    props, so don't "open" a propdb for them.  
	  (dav_svn_db_fetch): detect and handle missing props 
	
	* liveprops.c (dav_svn_namespace_uris[]): add an "SVN:" namespace 
	  (DAV_SVN_NAMESPACE_URI): new define 
	  (DAV_SVN_NAMESPACE_URI_DAV): renamed from DAV_SVN_URI_DAV 
	  (SVN_RO_DAV_PROP2, SVN_RW_DAV_PROP2, SVN_RO_SVN_PROP,
	    SVN_RW_SVN_PROP): new macros for declaring live props.  
	  (SVN_PROPID_baseline_relative_path): new enum value 
	  (dav_svn_props[]): new property specs 
	  (dav_svn_insert_prop): respond to some (new) live props. use an
	    "empty" elem if the value is an empty string.  
	  (dav_svn_insert_all_liveprops): use dav_svn_props[] to figure out
	    which liveprops to insert.  
	
	* repos.c (dav_svn_parse_version_uri, dav_svn_parse_history_uri, 
	      dav_svn_parse_working_uri, dav_svn_parse_activity_uri, 
	      dav_svn_parse_uri): add new "label" and "use_checked_in"
	  parameters.  
	(dav_svn_parse_vcc_uri): new function to parse VCC URLs 
	  (dav_svn_parse_baseline_coll_uri): new function to parse BC URLs 
	  (struct special_defn): "parse" member takes additional "label" and 
	    "use_checked_in" parameters.  
	  (special_subdirs[]): new entries for VCCs and BCs 
	  (dav_svn_parse_uri): /$svn/ should be labeled as the
	    ROOT_COLLECTION.  other PRIVATE resources should labeled
	  similarly.  
	(dav_svn_prep_regular): only fetch the "youngest" revnum if one
	     hasn't been specified.  
	  (dav_svn_prep_version): implement, considering regular VRs and
	  Baselines.  
	(dav_svn_get_resource): fix processing of "relative" local var,
	     which propagates into "uri_path" (it was plain busted for the root 
	     collection).  
	  (dav_svn_getetag): many resources don't (yet) have etags. skip
	  them.  
	(dav_svn_do_walk): don't (yet) allow walking into non-REGULAR
	  resources 
	(dav_svn_walk): defer restriction of non-REGULAR walking to 
	    dav_svn_do_walk when attempting to *descend* into the resource
	    (this allows "walking" a single resource (depth==0)).  
	
	* util.c (dav_svn_build_uri): new utility to build a private/special
	URI.  

2001-03-25 12:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.83):

	
	* adm_crawler.c (report_local_mods): Bugfix: when committing, don't 
	  assume that just because a file has been added its contents must
	  be sent.  This is only true for *new* files.  If an added file has 
	  non-NULL history, do a real local-mod check to decide.  

2001-03-25 11:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_ops.c (1.49):

	
	* adm_ops.c (svn_wc_set_revision): Bugfix.  After committing a 
	  directory, remember to modify its *parent's* entry; this entry
	  needs to have its ADD flag removed (if present) as well as its
	  revision attribute updated.  

2001-03-24 16:24   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.42):

	track some recent reporter changes. still stubbed, tho.  

2001-03-24 09:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.91), libsvn_client/add.c
	(1.8):

	
	* add.c (svn_client_add):  if file or dir doesn't exist on disk, 
	  return a polite error.  
	
	* svn_error.h (SVN_ERR_WC_PATH_NOT_FOUND):  new error type.  

2001-03-23 17:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/multi-args.txt (1.1):

	Notes for what we're starting Monday morning.  

2001-03-23 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.13):

	oops, get the date right.  

2001-03-23 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.12):

	update this weeks' status page.  

2001-03-23 14:24  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/id.c (1.18):

	* libsvn_fs/id.c 
	
	  (distance_from_prefix): Bug fix: this for loop should be paying 
	  attention only to every -other- token in the id array.  

2001-03-23 13:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.82):

	
	* adm_crawler.c (report_revisions):  oops, majorly wrong logical 
	  assumptions about the kinds of paths it was supposed to send to
	  the reporter.  Rewrite.  
	
	  (svn_wc_crawl_revisions):  call report_revisions correctly.  

2001-03-23 13:14  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* HACKING (1.27), svn_private_config.hw (1.2):

	Update with a little bit of new stuff.  

2001-03-23 12:28  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.30), libsvn_repos/delta.c
	(1.30):

	* libsvn_fs/delta.c 
	
	  Updated notes comment to reflect that this suite of functions should 
	  no longer have a problem with the case where we nodes of the same 
	  node but of differing node types (dirs vs. files).  
	
	  (replace_with_nearest): Renamed from `replace'.  
	
	  (delta_dirs): Little logic optimization.  

2001-03-23 11:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_client/update.c (1.14), libsvn_wc/adm_ops.c
	(1.48), libsvn_wc/get_editor.c (1.170), libsvn_wc/wc.h (1.144):

	Fix longstanding bug: after an update, *all* paths below the updated 
	path need to have their revisions bumped to the new revision -- 
	whether they were patched or not.  
	
	* update.c (svn_client_update):  svn_fs_dir_delta dosen't call 
	  close_edit(), so this function has to do it.  
	
	* get_editor.c (close_edit):  if this edit was an update, call 
	  svn_wc__ensure_uniform_revision() before quitting.  
	
	* wc.h (svn_wc__ensure_uniform_revision): declare.  
	
	* adm_ops.c (svn_wc__ensure_uniform_revision):  implement.  

2001-03-23 09:11  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.63):

	* tests/libsvn_fs/fs-test.c 
	
	  (tree_test_entry_t): Removed is_dir field.  A NULL contents field 
	  will now signify a directory (thanks for the suggestion, Karl).  
	  Multivarious users of this structure throughout this file were 
	  modified, using bounded M-x replace-string commands: 
	
	    '0, "'   -&gt; '"' 
	    '1, ""'  -&gt; '0' 

2001-03-22 20:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.29), libsvn_repos/delta.c
	(1.29):

	Updating file contents now works.  
	
	* delta.c (replace):  fix logic bug;  save best_entry as we loop.  
	  Fix from Karl. :) 

2001-03-22 19:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.90), include/svn_fs.h (1.72),
	libsvn_fs/tree.c (1.65), tests/libsvn_fs/fs-test.c (1.62):

	As requested by Greg Stein &lt;gstein@lyra.org&gt;, and designed by Jim 
	Blandy &lt;jimb@redhat.com&gt;...  
	
	   (...I am but a vessel...) 
	
	Provide read-only access to node revisions by ID: 
	
	* svn_fs.h, tree.c (svn_fs_id_root, svn_fs_is_id_root): New public 
	functions.  
	(svn_fs_is_different): Fix typo `svs_fs_is_different'.  Add early 
	check for same IDs.  
	
	* tree.c: #include assert.h.  
	(root_kind_t): Add `id_root' kind.  
	(open_path): Handle id roots.  
	
	* svn_error.h (svn_errno_t): new error SVN_ERR_FS_NOT_ID.  
	
	* fs-test.c (fetch_by_id): New test.  
	(test_funcs): Add it.  

2001-03-22 19:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.28), libsvn_repos/delta.c
	(1.28):

	
	* delta.c (get_revision_from_hash):  fix the way revnum values were 
	  being pulled from the hash.  Trying to forcefully cast NULL into a 
	  (svn_revnum_t *) was causing a segfault.  

2001-03-22 18:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.79), libsvn_ra_local/update.c
	(1.4), libsvn_wc/adm_crawler.c (1.81):

	Gimme updates.  Please.  
	
	* svn_wc.h (svn_wc_entries_read): better documentation on exactly
	  what this routine returns.  
	
	* adm_crawler.c (report_revisions):  bugfix.  rewrite according to
	  the promises of svn_wc_entries_read().  
	
	* update.c (svn_ra_local__finish_report):  DOH!  Try
	  **uncommenting** the call to svn_fs_dir_delta.  That might help make
	updates work. :) 

2001-03-22 17:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.80):

	Updates, updates, updates.  
	
	* adm_crawler.c (svn_wc_crawl_revisions):  all new code.  
	
	  (report_revisions):  the recursive crawler.  

2001-03-22 17:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.3):

	Add more shtuff.  

2001-03-22 17:14  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.64):

	* libsvn_fs/tree.c 
	
	  (merge): Companion to previous bug fix: notice previously merged 
	  changes.  

2001-03-22 17:00  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.63):

	* libsvn_fs/tree.c 
	
	  (merge): Bug fix: notice previously merged changes.  

2001-03-22 15:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.29), include/svn_wc.h
	(1.78), libsvn_client/commit.c (1.25), libsvn_client/update.c
	(1.13), libsvn_wc/adm_crawler.c (1.79):

	Sprinting towards updates, &lt;pant pant&gt;...  
	
	* svn_client.h (svn_client_update):  update interface/docstring for 
	  M2.  Also add comment on multiple target issue.  
	
	* checkout.c (svn_client_checkout):  remove old comment.  
	
	* update.c (svn_client_update):  total rewrite for M2.  
	
	* svn_wc.h (svn_wc_crawl_local_revisions):  update interface for M2.  
	  Also #include svn_ra.h so that it gets the svn_ra_reporter_t type.  
	
	* adm_crawler.c (svn_wc_crawl_local_revisions):  update interface;
	  no code yet.  

2001-03-22 15:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_test.h (1.11), tests/svn_test_editor.c
	(1.21), tests/libsvn_delta/deltaparse-test.c (1.64),
	tests/libsvn_wc/commit-test.c (1.22):

	(svn_test_get_editor): Take new indentation and writeable stream
	args, instead of forcing everyone to use the same indentation and
	printing to stdout.  Document output format.  
	
	All callers changed.  

2001-03-22 15:28  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_ra/ra_loader.c (1.3):

	* libsvn_ra/ra_loader.c 
	
	  (ra_lib_defn):  If initfunc is a svn_ra_init_func_t, which is a 
	  pointer to a function, it doesn't need to be declared as *initfunc 
	  (which is a double-pointer.  Users modified.  Segfaults removed.
	  ;-) 

2001-03-22 14:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.2):

	Add more stuff, letter-ize the list.  Oy, this list is starting to 
	scare me.  :) 

2001-03-22 13:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.71):

	Doc fix.  

2001-03-22 11:05  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* STACK (1.85):

	Gimme the track, get back and let me rip this up No jive, no shuck,
	as I truck loads of funk for your rump So pump your fist and come
	and get a bump of this.  

2001-03-21 23:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_error.h (1.89), include/svn_fs.h (1.70),
	libsvn_fs/Makefile.am (1.38), libsvn_fs/delta.c (1.27),
	libsvn_repos/delta.c (1.27):

	* include/svn_error.h 
	
	  (SVN_ERR_FS_NOT_REVISION_ROOT): New error.  
	
	* include/svn_fs.h 
	
	  (svn_fs_dir_delta): Added hash argument sourth_rev_diffs to this 
	  interface.  
	
	* libsvn_fs/delta.c 
	
	  Geez.  Massive rewrite of nearly everything in this file to use the 
	  current filesystem and editor interfaces.  A test-case (and I'm
	  sure a dozen or so bug fixes for obvious goof-ups and
	  not-so-obvious mistakes) is forthcoming, Karl sez.  Hey, it
	  compiles, and it doesn't really deviate from JimB's original plan
	  for this suite of functions...amazing foresight this guy has, I
	swear.  
	
	  The following symbols were tweaked as a part of this edit: 
	
	  (struct context, proplist_change_fn_t): Edited typedefs 
	
	  (struct dirent_plist_baton): Removed typedefs 
	
	  (file_from_scratch, dir_from_scratch, replace_related, 
	  replace_from_scratch, add): Removed functions 
	
	  (get_revision_from_hash, change_dir_prop, change_file_prop, 
	  replace_file_or_dir, add_file_or_dir): Added functions 
	
	  (delta_file_props, delta_dir_props, delta_proplists, 
	  send_text_delta, delta_files, delete, replace, delta_dirs, 
	  svn_fs_dir_delta, svn_fs_file_delta): Edited functions 
	
	* libsvn_fs/Makefile.am 
	
	  Re-added delta.c to the build system.  

2001-03-21 14:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.62):

	Check that roots are txns, where required, as suggested by Yoshiki 
	Hayashi &lt;yoshiki@xemacs.org&gt;: 
	
	* tree.c (not_txn): New error constructor for roots.  
	(svn_fs_change_node_prop, svn_fs_merge, svn_fs_make_dir, 
	txn_body_delete, svn_fs_copy): Use it.  

2001-03-21 14:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.69):

	(svn_fs_merge): Doc fix.  

2001-03-21 14:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/tree.c (1.61), tests/libsvn_fs/fs-test.c
	(1.61):

	Bug fix: 
	
	* tree.c (merge): Construct conflict path(s) correctly.  
	
	Test it: 
	
	* fs-test.c (test_commit_txn): Take expected conflict path instead
	of boolean, check that expected conflict matches received conflict. 
	All callers changed.  Also, document this function.  

2001-03-21 11:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.60):

	More changes to support commits from non-single-revision trees: 
	
	(merge_args): Split `node' field into `ancestor_node' and 
	`source_node' fields.  Document all fields.  
	(txn_body_merge): Use new field.  
	(svn_fs_commit_txn): Initialize new field.  
	(svn_fs_merge): Start to implement.  
	
	Bug fix: 
	
	(merge): Use svn_fs__dag_delete_tree instead of svn_fs__dag_delete, 
	when deleting unmodified subtrees from the txn.  

2001-03-21 11:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/: ra_local.h (1.13), ra_plugin.c
	(1.21), update.c (1.3):

	Preparing for the hashtable that will be required by
	svn_fs_dir_delta.  
	
	* ra_local.c (svn_ra_local__report_baton_t):  add a hashtable to the
	baton.  
	
	* ra_plugin.c (do_update):  initialize the baton's hashtable.  
	
	* update.c (svn_ra_local__set_path):  add to hashtable as we go.  

2001-03-20 19:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.59):

	(merge): Remove duplicate error check.  

2001-03-20 19:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.58):

	(merge): Remove all references to caller's circumstances, in 
	preparation for larger changes that will make commits against 
	non-single-revision trees work.  

2001-03-20 16:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.68), libsvn_fs/tree.c (1.57),
	tests/libsvn_fs/fs-test.c (1.60):

	* svn_fs.h, tree.c (svn_fs_commit_txn): Allow null conflict_p.  
	
	* fs-test.c (delete): Just pass null, since we're ignoring the 
	conflict info anyway.  

2001-03-20 16:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.50), libsvn_ra_local/ra_local.h
	(1.12), libsvn_ra_local/ra_plugin.c (1.20),
	libsvn_ra_local/update.c (1.2):

	
	* svn_ra.h (svn_ra_reporter_t):  merge two func declarations into
	one.  
	
	* update.c (svn_ra_local__set_path):  renamed from set_directory.  
	  (svn_ra_local__set_file):  deleted.  
	
	* ra_plugin.c (ra_reporter):  remove set_file.  
	
	* ra_local.h (svn_ra_local__set_path):  same changes as in update.c
	above.  

2001-03-20 16:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.88), libsvn_fs/dag.c (1.88),
	libsvn_fs/dag.h (1.41), libsvn_fs/tree.c (1.56), libsvn_fs/txn.c
	(1.38), tests/libsvn_fs/fs-test.c (1.59):

	Fix deletion bug reported by Yoshiki Hayashi...  
	
	   From: Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt; 
	   To: dev@subversion.tigris.org 
	   Subject: svn_fs_delete_tree bug fix.  
	   Date: 19 Mar 2001 14:42:21 +0900 
	   Message-ID: &lt;87wv9miabm.fsf@sodan.org&gt; 
	
	... based on the patch he submitted in that bug report: 
	
	* dag.c (delete_args, txn_body_delete): New `delete_tree' field 
	replaces `require_empty_dir', use to decide which dag deletion 
	function to call.  
	(svn_fs__dag_delete, svn_fs__dag_delete_tree): Adjust for above.  
	
	* dag.h, dag.c (svn_fs__dag_delete_if_mutable): New public
	incarnation of delete_from_id, formerly of txn.c.  
	(svn_fs__dag_delete): Doc fix -- change promise: directories get
	deleted only if empty, mutability is irrelevant now.  
	(svn_fs__dag_delete_tree): New func, delete directories even if 
	non-empty.  
	
	* txn.c (delete_from_id): Moved to dag.c and now called 
	svn_fs__dag_prune_mutable.  
	
	* svn_error.h (SVN_ERR_FS_NOT_TXN_ROOT): New error.  
	
	* fs-test.c (delete): New func, test successful and unsuccessful 
	deletions of individual nodes and subtrees.  

2001-03-20 13:51   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.84):

	"They're shooting at the oilcans!" 

2001-03-20 12:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_delta.h (1.148), include/svn_fs.h
	(1.67), include/svn_io.h (1.34), include/svn_ra.h (1.49),
	libsvn_delta/compose_editors.c (1.15),
	libsvn_delta/default_editor.c (1.6), libsvn_delta/svndiff.c (1.18),
	libsvn_delta/text_delta.c (1.30), libsvn_delta/track_editor.c
	(1.3), libsvn_delta/xml_output.c (1.35), libsvn_delta/xml_parse.c
	(1.151), libsvn_fs/editor.c (1.31), libsvn_fs/tree.c (1.55),
	libsvn_ra_dav/commit.c (1.37), libsvn_ra_dav/fetch.c (1.41),
	libsvn_ra_dav/ra_dav.h (1.12), libsvn_ra_local/checkout.c (1.4),
	libsvn_ra_local/ra_local.h (1.11), libsvn_subr/io.c (1.34),
	libsvn_wc/adm_crawler.c (1.78), libsvn_wc/get_editor.c (1.169),
	mod_dav_svn/repos.c (1.36), tests/svn_test_editor.c (1.20),
	tests/libsvn_delta/random-test.c (1.20),
	tests/libsvn_delta/svndiff-test.c (1.11),
	tests/libsvn_delta/xml-output-test.c (1.13),
	tests/libsvn_fs/fs-test.c (1.58):

	Some typedefs were "functions" and others were "pointers to
	functions." Unify on the latter, which also helps SWIG (it doesn't
	understand the former).  
	
	* svn_delta.h (svn_txdelta_window_handler_t): make this a pointer to
	    a function, rather than a function typedef. Change all users.  
	  (enum svn_delta_action): new enum, split out from the struct 
	    svn_txdelta_op_t definition.  
	  (svn_bump_func_t): new typedef. use in
	  svn_delta_get_commit_track_editor 
	
	* svn_io.h (svn_read_fn_t, svn_write_fn_t, svn_close_fn_t): change
	    to ptr-to-func. Change all users.  
	
	* svn_ra.h (svn_ra_close_commit_func_t, svn_ra_set_wc_prop_func_t, 
	    svn_ra_init_func_t): change to ptr-to-func. Change all users.  
	
	* libsvn_ra_dav/commit.c (svn_ra_dav__get_commit_editor): fix
	    definition to match most recent decl in svn_ra.h 
	
	* libsvn_ra_dav/fetch.c (svn_ra_dav__do_checkout): fix definition to
	    match most recent decl in svn_ra.h 
	
	* libsvn_ra_dav/ra_dav.h (svn_ra_dav__get_commit_editor, 
	    svn_ra_dav__do_checkout): fix declaration to match most recent
	    decl in svn_ra.h 

2001-03-20 12:17   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_error.h (1.87):

	* shift the C++ protection to the right place (after other headers;
	  we don't want to impose C naming on other headers) 
	* revise some of the includes 
	* no need to __GNUC__ the __attribute__ usage. APR will stub the
	  thing if it isn't available. note that NeXT says GNUC but doesn't
	  have __attribute__, so the test was incorrect anyways.  

2001-03-20 11:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.54):

	(txdelta_baton_t): Comment fix.  

2001-03-20 10:55  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.53):

	* libsvn_fs/tree.c 
	
	  (txn_body_copy):  Geepers...freakin' typos... (bug fix) 

2001-03-19 21:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.48), libsvn_fs/delta.c (1.26),
	libsvn_ra_local/Makefile.am (1.5), libsvn_ra_local/ra_local.h
	(1.10), libsvn_ra_local/ra_plugin.c (1.19),
	libsvn_ra_local/update.c (1.1), libsvn_repos/delta.c (1.26):

	Starting hacking out a code path for updates.  (This commit should
	cover everything ra_local needs to do for an update.) 
	
	* svn_ra.h (do_update): change declaration and promises of RA
	  routine.  We don't need to pass in a list of targets to update;
	  instead, the RA layer will update *one* target: whatever path
	  happens to be in the session URL.  (If the client has many targets
	  to update, it can open an independent RA session & update for each
	  one.  Remember that an update command isn't atomic; only commits
	are.) 
	
	* ra_local.h (svn_ra_local__set_directory, svn_ra_local__set_file, 
	  svn_ra_local__finish_report): declare in private header.  
	
	  (svn_ra_local__report_baton_t):  new baton type for reporter vtable.  
	
	* ra_plugin.c (set_directory, set_file, finish_report):  remove 
	  declarations.  
	
	  (ra_local_reporter):  use new function names.  
	
	  (do_update):  flesh this out for the first time.  
	
	* update.c:  new file.  
	
	  (svn_ra_local__set_directory):  new func, adds to the transaction.  
	
	  (svn_ra_local__set_file):  new func, adds to the transaction.  
	
	  Note:  we should merge the above 2 funcs into set_path(), unless 
	  gstein objects.  No need for both of them.  
	
	  (svn_ra_local__finish_report):  new func, calls svn_fs_dir_delta to 
	  drive the update editor, then aborts the transaction.  
	
	* Makefile.am:  compile update.c 
	
	* delta.c (svn_fs_dir_delta):  put some reminder comments in here.  

2001-03-19 15:26  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: editor.c (1.30), tree.c (1.52):

	* libsvn_fs/editor.c 
	
	  (replace_directory, replace_file): No need to delete before doing 
	  the svn_fs_copy (anymore).  
	
	* libsvn_fs/tree.c 
	
	  (txn_body_copy): Fixed to not restrict copies to only things that 
	  didn't previously exist.  A bit too much aggression on my part, I 
	  must confess.  

2001-03-19 12:39  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.29):

	* libsvn_fs/editor.c 
	
	  (close_edit): Bug fix.  If an attempt to commit fails, we should 
	  probably return that failure to the caller.  

2001-03-19 06:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.83):

	Bug trackin for M2.  

2001-03-19 06:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/alpha_checklist (1.1):

	Adding grab-bag of issues to discuss after M2.  Feel free to dump
	more.  

2001-03-19 05:07   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.71), subversion/bindings/.cvsignore (1.1,
	milestone-2), subversion/bindings/Makefile.am (1.1, milestone-2),
	subversion/bindings/README (1.1, milestone-2),
	subversion/bindings/apr.i (1.1, milestone-2),
	subversion/bindings/svn_client.i (1.1, milestone-2),
	subversion/bindings/svn_delta.i (1.1, milestone-2),
	subversion/bindings/svn_error.i (1.1, milestone-2),
	subversion/bindings/svn_fs.i (1.1, milestone-2),
	subversion/bindings/svn_io.i (1.1, milestone-2),
	subversion/bindings/svn_ra.i (1.1, milestone-2),
	subversion/bindings/svn_string.i (1.1, milestone-2),
	subversion/bindings/svn_types.i (1.1, milestone-2),
	subversion/bindings/svn_wc.i (1.1, milestone-2),
	subversion/bindings/guile/.cvsignore (1.1, milestone-2),
	subversion/bindings/guile/Makefile.am (1.1, milestone-2),
	subversion/bindings/java/.cvsignore (1.1, milestone-2),
	subversion/bindings/java/Makefile.am (1.1, milestone-2),
	subversion/bindings/perl/.cvsignore (1.1, milestone-2),
	subversion/bindings/perl/Makefile.am (1.1, milestone-2),
	subversion/bindings/python/.cvsignore (1.1, milestone-2),
	subversion/bindings/python/Makefile.am (1.1, milestone-2),
	subversion/bindings/ruby/.cvsignore (1.1, milestone-2),
	subversion/bindings/ruby/Makefile.am (1.1, milestone-2),
	subversion/bindings/tcl/.cvsignore (1.1, milestone-2),
	subversion/bindings/tcl/Makefile.am (1.1, milestone-2):

	checking this in for later pickup. non-functional, initial proddings
	(of a SWIG less-than-newbie) so far, but it may give people some
	ideas/interest for getting it to work.  

2001-03-18 19:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.28):

	Bugfix:  make the fs commit editor deal with mixed-revision working 
	copies.  
	
	(struct edit_baton):  rename `root' field to `txn_root', for
	clarity.  Change all callers in other funcs.  
	
	(struct dir_baton): add base_rev field.  
	
	(replace_root):  set base_rev in root dir baton.  
	
	(replace_directory):  set base_rev in newly created dir baton;  do
	an fs_copy if the revision is different than parent.  
	
	(replace_file): do an fs_copy if the revision is different than 
	parent.  

2001-03-17 02:06  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/txn-table.c (1.22):

	* libsvn_fs/txn-table.c 
	
	  (svn_fs__open_transactions_table): I *think* this is a little bug 
	  fix.  Shouldn't we only be creating the 'next-id' key/value pair
	  if we just created this database table?  Confidence level 80%.  

2001-03-17 01:16   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/include/svn_error.h (1.86):

	
	        *  subversion/includes/svn_error.h: Added 
	        SVN_ERR_CL_ARG_PARSING_ERROR (not in patch provided) 
	
	        Applied patch provided by Mo DeJong: 
	
		*  subversion/client/TODO: Fix number 
		of arguments listing for the delete, 
		propget, and propset commands. Fix 
		minor format issues, add newline at 
		EOF to avoid diff warning.  
		*  subversion/client/add-cmd.c (svn_cl__add): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract target array in the subcommand.  
		Print subcommand usage if no targets are passed 
		in on the command line.  
		*  subversion/client/checkout-cmd.c (svn_cl__checkout): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract args array in the subcommand.  
		Print subcommand usage if no URLs are passed 
		in on the command line.  
		*  subversion/client/cl.h (svn_cl__cmd_proc_t, 
		svn_cl__cmd_desc_t, svn_cl__push_svn_string, 
		svn_cl__args_to_target_array, svn_cl__parse_num_args, 
		svn_cl__parse_all_args, svn_cl__subcommand_help): 
		Change svn_cl__cmd_proc_t signature so that 
		it accpets a apr_getopt_t* in the first argument 
		and a svn_cl__opt_state_t* in the second argument.  
		Remove num_args field from svn_cl__cmd_desc_t.  
		Add function prototypes for methods defined in 
		main.c.  
		*  subversion/client/commit-cmd.c (svn_cl__commit): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract target array in the subcommand.  
		*  subversion/client/delete-cmd.c (svn_cl__delete): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract target array in the subcommand.  
		Print subcommand usage if no targets are passed 
		in on the command line.  
		*  subversion/client/diff-cmd.c (svn_cl__diff): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract target array in the subcommand.  
		*  subversion/client/help-cmd.c (svn_cl__help, 
		svn_cl__subcommand_help): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Print main help text if the first argument to 
		svn_cl__help is NULL.  
		Extract target array in the subcommand.  
		Add new +svn_cl__subcommand_help helper method, 
		use it in svn_cl__help.  
		*  subversion/client/main.c (svn_cl__cmd_table, 
		svn_cl__push_svn_string, svn_cl__parse_num_args, 
		svn_cl__parse_all_args, svn_cl__args_to_target_array): 
		Remove svn_cl__cmd_desc_t num_args initializer.  
		Add "di" shortcut for diff to match CVS shortcut.  
		Add argument processing helper methods, remove 
		arguments and targets processing from main().  
		Remove targets array from main(), it is no 
		longer passed to a subcommand function.  
		Call svn_cl__help with NULL in first two arguments, 
		to print main help text. Fix exit status so that 
		when an error is encountered, svn will not terminate 
		with an exit status of 0.  
		*  subversion/client/propget-cmd.c (svn_cl__propget): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Use propname and propval variables to match usage.  
		Extract target array in the subcommand.  
		*  subversion/client/proplist-cmd.c (svn_cl__proplist): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract target array in the subcommand.  
		*  subversion/client/propset-cmd.c (svn_cl__propset): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Use propname and propval variables to match usage.  
		Extract args and targets arrays in the subcommand.  
		Add implicit . if not targets are passed in.  
		*  subversion/client/status-cmd.c (svn_cl__status): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract target array in the subcommand.  
		*  subversion/client/update-cmd.c (svn_cl__update): 
		Account for change in svn_cl__cmd_proc_t signature.  
		Extract target array in the subcommand.  
	
	PR: Obtained from: Submitted by: Mo DeJong  &lt;mdejong@redhat.com&gt; 
	Reviewed by: B. W. Fitzpatrick &lt;fitz@red-bean.com&gt; 

2001-03-17 00:08  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_client.h (1.28), include/svn_wc.h
	(1.77), libsvn_client/add.c (1.7), libsvn_wc/adm_ops.c (1.47):

	* include/svn_client.h 
	
	  (svn_client_add, svn_client_delete): Changed argument from FILE to 
	  PATH, since these work on directories, too.  
	
	* include/svn_wc.h 
	
	  (svn_wc_add_directory): New prototype.  
	
	* libsvn_wc/adm_ops.h 
	
	  (svn_wc_delete_file, svn_wc_add_file): Some cleanup.  
	
	  (svn_wc_add_directory): New function.  
	
	* libsvn_client/add.c 
	
	  (svn_client_add): Now, call svn_wc_add_directory when asked to add a 
	  directory instead of calling svn_wc_add_file.  Funny how that
	  works out.  

2001-03-16 23:22   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* STACK (1.82):

	A little present for Ben. Bug in commit.  

2001-03-16 22:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.47), libsvn_client/checkout.c
	(1.17), libsvn_ra_local/ra_plugin.c (1.18):

	Allow the user to specify a revision to checkout.  (Just add -r to
	the co subcommand now.  If you ignore this arg, you'll automatically
	get the latest rev.) 
	
	* svn_ra.h (do_checkout):  take a revision arg.  
	
	* ra_plugin.c (do_checkout):  take a revision arg.  
	
	* checkout.c (svn_client_checkout):  pass the revision arg to
	do_checkout.  
	
	* ra-dav-test.c (main): pass the revision arg to do_checkout.  also, 
	  make the revision -1 (invalid), instead of 1, so we always get the 
	  "latest" rev.  Hope this is what you want, gstein. :) 

2001-03-16 17:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.11):

	Update status bars and week activity paragraphs.  

2001-03-16 16:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.70):

	Fix warning message.  

2001-03-16 15:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.87):

	Formatting fixes.  

2001-03-16 15:34   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/: include/svn_io.h (1.33), libsvn_subr/io.c (1.33):

	Docfix at the suggestion of Greg Hudson &lt;ghudson@mit.edu&gt; 

2001-03-16 14:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/tree.c (1.51), tests/libsvn_fs/fs-test.c
	(1.57):

	* tree.c (merge): Fix logic for another deletion case.  
	
	* fs-test.c (print_tree, get_file_contents): New functions.  
	(merging_commit): Finish.  

2001-03-16 09:38  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_fs/tree.c (1.50), tests/libsvn_fs/fs-test.c
	(1.56):

	* libsvn_fs/tree.c 
	
	  (copy_args, txn_body_copy, svn_fs_copy): New baton structure and 
	  functions for implementing filesystem copies.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (copy_test): New test for svn_fs_copy.  
	
	  (test_funcs): Added reference to new copy_test function.  

2001-03-15 21:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.49):

	(get_path_mutable): New func.  
	(merge): Use new get_path_mutable, instead of writing it out by hand 
	each time.  Don't take target node argument, since it can be derived
	from target_root and target_path anyway.  All callers changed.  

2001-03-15 21:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.86), dag.h (1.40), tree.c (1.48):

	* dag.h, dag.c (svn_fs__dag_merge): Moved to tree.c, see below.  
	
	* tree.c (merge): Replaces svn_fs__dag_merge.  Merging belongs here, 
	so we can make parent paths mutable.  All callers changed.  

2001-03-15 18:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.85), tests/libsvn_fs/fs-test.c
	(1.55):

	* dag.c (svn_fs__dag_merge): Fix logic for a deletion case.  
	
	* fs-test.c (merging_commit): Fix sense of one test, leave notes
	about it for Mike and I to pick up on tomorrow morning.  Comment out
	the region in which another test is known to be failing, so 'make
	check' works.  

2001-03-15 16:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.81):

	Here come da bugs.  

2001-03-15 16:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_fs.h (1.66), libsvn_fs/tree.c (1.47),
	libsvn_wc/adm_ops.c (1.46), libsvn_wc/log.c (1.87):

	
	* svn_fs.h, tree.c (svn_fs_is_different):  begin work on this func, 
	  not yet finished.  
	
	* adm_ops.c (svn_wc_close_commit):  remove obsolete func.  
	
	* log.c (svn_wc__log_commit):  remove obsolete func.  

2001-03-15 15:22  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.54):

	* tests/libsvn_fs/fs-test.c 
	
	  (validate_tree): Give more interesting feedback in the error 
	  messages.  
	
	  (test_tree_node_validation): Test the trees in both the transaction 
	  and the committed revision.  Also, modify the committed tree and 
	  verify those changes, too.  
	
	  (test_commit_txn): Helper function.  
	
	  (merging_commit): The beginnings of some serious merge/commit 
	  testing.  

2001-03-15 14:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.84):

	(svn_fs__dag_set_contents):  safety check -- make sure the file node 
	is mutable before doing anything.  
	
	In general, we need to do a careful review of dag.c and make sure 
	*every* routine that changes dag_nodes is making this check.  

2001-03-15 13:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/status.c (1.11):

	
	* status.c (svn_client_status):  check for a *specific* error from 
	  svn_ra_get_ra_library.  

2001-03-15 13:35  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.89):

	* libsvn_wc/entries.c 
	
	  (take_from_entry): No longer inherit an ancestor if the entry is 
	  marked for addition.  
	
	  (normalize_entry): Make "null string" and "empty string" mean the 
	  same thing when normalizing entries.  
	
	  (svn_wc__entries_write): If this entry's ancestor and revision are 
	  no different than that of the directory in which it resides, we no 
	  longer wish to write out the ancestor and revision XML attributes 
	  into the `entries' file at all.  
	
	  (svn_wc__entry_dup): Added safety check.  Duping empty strings is 
	  fine...duping NULL strings ain't happenin'.  

2001-03-15 13:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/: commit.c (1.24), status.c (1.10):

	
	* commit.c (svn_client_commit):  don't forget to close the ra
	  session when done.  We don't want future gui clients to leak memory.
	:) 
	
	* status.c (svn_client_status):  hey hey, we can get the
	  repository's latest revnum now when we print a wc's status.  sweet.  

2001-03-15 10:41  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_ra_local/checkout.c (1.3),
	tests/libsvn_wc/commit-test.c (1.21):

	* libsvn_ra_local/checkout.c 
	* tests/libsvn_wc/commit-test.c 
	
	  Fixed compiler warnings.  

2001-03-15 10:40  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_client/commit.c (1.23):

	* libsvn_client/commit.c 
	
	  (svn_client_commit): Minor bug fix, and some key functionality for 
	  the RA commit case! 

2001-03-15 09:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/checkout.c (1.16):

	(svn_client_checkout):  don't forget to close the ra session 

2001-03-15 01:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/ra_plugin.c (1.17):

	(open):  remove stupid printf.  

2001-03-15 00:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/: checkout.c (1.2), ra_local.h (1.9),
	ra_plugin.c (1.16):

	Make checkouts from local repositories work.  
	
	The bugfix here was forcing the editor driver to always supply 
	`copyfrom' args to add_directory(), even though this shouldn't be 
	necessary according to add_directory's docstring.  
	
	During a checkout, the wc editor *assumes* that they are supplied,
	so that it can immediately create a new SVN/ area in the new dir. 
	If they're not supplied, it ends up creating a new dir whose own
	entry in `entries' has no ancestry attributes... which is bad, bad,
	bad.  
	
	So for now, the driver is telescoping a URL arg as it recurses and 
	is constantly supplying it to add_*().  However, I don't think
	things should remain this way;  the wc editor should -infer- the new
	dir's ancestor URL if not supplied, and use that value when writing
	the new `entries' file.  Nowhere in the docs for editor-&gt;add_dir()
	does it say that the ancestry args are always required! 
	
	* checkout.c (walk_tree):  take a URL arg, and telescope it properly 
	  as we recurse.  
	  (svn_ra_local__checkout):  take a URL arg.  
	
	* ra_local.h (svn_ra_local__checkout):  take a URL arg.  
	
	* ra_plugin.c (do_checkout):  supply session baton's URL to 
	  svn_ra__local_checkout.  

2001-03-14 23:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/checkout.c (1.1):

	Doh.  Add the checkout driver.  :) 

2001-03-14 23:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/: Makefile.am (1.4), ra_local.h (1.8),
	ra_plugin.c (1.15), split_url.c (1.7):

	The meat of ra_local checkouts:  a bridge between libsvn_fs and 
	libsvn_wc's checkout editor.  
	
	* checkout.c, ra_local.h (svn_ra_local__checkout):  declare and
	  define new editor driver which reads an fs directly.  
	
	  (send_file_contents):  new helper func.  
	  (set_any_props):  new helper func.  
	  (walk_tree):  the main recursive func.  
	
	* ra_plugin.c (do_checkout):  call svn_ra_local__checkout.  
	
	* Makefile.am: compile checkout.c.  

2001-03-14 17:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.27), include/svn_wc.h
	(1.76), libsvn_client/apply_edits.c (1.14),
	libsvn_client/checkout.c (1.15), libsvn_wc/adm_files.c (1.69),
	libsvn_wc/adm_ops.c (1.45), libsvn_wc/get_editor.c (1.168),
	libsvn_wc/wc.h (1.143), tests/libsvn_wc/checkout-test.c (1.41):

	Reorganize code paths in preparation for M2 checkouts.   The goal
	here is to make sure that `make check` still works with xml files. 
	Then we write the RA editor-driver later.  
	
	* svn_client.h, checkout.c (svn_client_checkout): New docstring with 
	  new promises; change input args.  Rename `ancestor_revision' to 
	  plain old `revision', and rename `ancestor_path' to `URL'.  
	
	* checkout.c (svn_client_checkout): total rewrite.  one routine to 
	  find all funcs, and in the client bind them.  
	
	Also: cosmetic changes to func layers below, although most of these 
	routines will probably be removed later when we rewrite updates. 
	The file in SVN/ need no longer exist, since URLs are stored in the 
	`entries' file now.  
	
	* adm_files.c (init_adm): remove repos arg.  
	  (svn_wc__ensure_adm):  remove repos arg.  
	
	* adm_ops.c (svn_wc__ensure_wc):  remove repos arg.  (why does this 
	  routine even exist? :)) 
	
	* get_editor.c (prep_directory): remove repos arg.  
	  (replace_root):  no longer use repos arg.  
	  (make_editor): remove repos arg.  
	  (struct edit_baton):  remove repos_arg.  
	  (svn_wc_get_checkout_editor):  remove repos_arg.  
	
	* apply_edits.c (apply_delta): remove repos arg.  
	  (do_edits):  stop creating repos arg.  
	  (svn_client__checkout_internal):  rename ancestry args as above.  
	
	* wc.h (SVN_WC__ADM_REPOSITORY):  remove repos #define.  
	  (svn_wc__ensure_adm, svn_wc__ensure_wc): update prototype.  
	
	* svn_wc.h (svn_wc_get_checkout_editor): update prototype.  
	
	* checkout-test.c (apply_delta): call svn_wc_get_checkout_editor
	correctly.  
	
	* ra-dav-test.c (main):  ditto.  
	
	* checkout-cmd.c (svn_cl__checkout): call svn_client_checkout
	correctly.  

2001-03-14 15:56  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/skel.c (1.26):

	* libsvn_fs/skel.c 
	
	  Bug fixes: Use apr_pcalloc() throughout for skel allocation, instead 
	  of apr_alloc().  This can be optimized in the future by reverting
	  to apr_palloc() and explicitly setting unused fields to 0.  

2001-03-14 14:44  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_ra_local/ra-local-test.c (1.8):

	* tests/libsvn_ra_local/ra-local-test.c 
	
	  (check_split_url): Removed brain, rotated 180 degrees, reinserted.  
	  Now properly oriented, I realize that I had repos-path and fs-path 
	  confused before.  

2001-03-14 14:26  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.83), tree.c (1.46):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_clone_child): Bug fix.  What good does cloning do if 
	  you don't set the mutability flag?  Geepers...  
	
	* libsvn_fs/tree.c 
	
	  (delete_args): Added boolean field for whether or not a directory 
	  deletion requires the directory to be empty.  
	
	  (svn_fs_delete, svn_fs_delete_tree, txn_body_delete):  Modified to 
	  use the new field in delete_args, which resulted in the 
	  actualization of svn_fs_delete_tree.  
	
	  (txn_body_get_mutable_source_stream): Renamed from 
	  txn_body_get_source_stream, and modified to make a mutable clone
	  of the node whose contents are being hooked up to streams.  This
	  was the source of the Big Bug I saw yesterday, whereby changing the 
	  contents of a file resulted in an edit of the *immutable version
	  of the file*, meaning we never had any version of the file in the 
	  database except the most recent.  I was thinking we'd have to
	  change the name of the project to either LastVersion or
	  SubParVersion.  All caller[sic] changed.  

2001-03-14 14:25  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_ra_local/split_url.c (1.6):

	* libsvn_ra_local/split_url.c 
	
	  (libsvn_ra_local__split_URL): Doh!  Confused which was which 
	  (fs-path v. repos-path).  This makes for sucky results.  

2001-03-14 03:22  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.53):

	* tests/libsvn_fs/fs-test.c 
	
	  Including svn_path.h now.  
	
	  (tree_test_entry_t, get_dir_entries, validate_tree_entry, 
	  validate_tree): New type and helper functions for doing some 
	  freakin' paranoid validation of the directory structure stored
	  under a given revision or transaction root.  
	
	  (test_tree_node_validation): New test for above helper functions.  
	
	  (check_greek_tree_under_root, greek_tree_under_root): Put newline at 
	  the end of the contents string, cuz Karl likes that mo' better.  
	
	  (basic_commit): Moved close of transaction to immediately after 
	  commit.  

2001-03-14 02:17  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.82):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_dup): Bug fix.  Make sure we copy the node kind over
	  when we dup.  

2001-03-13 18:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.45):

	(svn_fs_commit_txn): Check error from commit attempt better.  

2001-03-13 18:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.85), libsvn_fs/dag.c (1.81),
	libsvn_fs/dag.h (1.39), libsvn_fs/err.c (1.27), libsvn_fs/err.h
	(1.23), libsvn_fs/tree.c (1.44), libsvn_fs/txn-table.c (1.21),
	libsvn_fs/txn-table.h (1.12), libsvn_fs/txn.c (1.37),
	libsvn_fs/txn.h (1.10), tests/libsvn_fs/fs-test.c (1.52):

	Do optimal merging, for minimal interference with other committers.  
	
	Test suite passes, but the merging is not really tested right now; 
	Mike Pilato has uncommitted changes to test it thoroughly, and we'll 
	be using those.  
	
	* tree.c: #include rev-table.h.  
	(get_root_args, txn_body_get_root): New struct and func.  
	(merge_args, txn_body_merge): New struct and func.  
	(commit_args, txn_body_commit): New struct and func.  
	(svn_fs_commit_txn): Reimplement using above.  Now merging happens
	in one trail, and committing in another.  
	(svn_fs_merge): Unimplement.  This will be reimplemented to share as 
	much merging code as possible with svn_fs_commit_txn; possibly some
	of the other code removed from this file in this commit can be
	salvaged for that too.  
	
	* dag.h, dag.c (svn_fs__dag_txn_base_root): New func.  
	(svn_fs__dag_merge): Doc fix.  
	(svn_fs__dag_reroot_txn): Removed in favor of new func above.  
	
	* dag.c (dag_merge_args, txn_body_dag_merge, reroot_path_args, 
	txn_body_reroot_path): Removed, see svn_fs_merge change.  
	
	* txn.h, txn.c (svn_fs__txn_fs, svn_fs__txn_pool): New accessor 
	funcs.  
	
	* txn_table.h, txn_table.c (svn_fs__set_txn_base): New func.  
	(svn_fs__set_txn_roots): Removed.  
	
	* svn_error.h (svn_errno_t): New error SVN_ERR_TXN_OUT_OF_DATE.  
	Removed obsolete error SVN_ERR_FS_TXN_NOT_PRISTINE.  
	
	* err.h, err.c (svn_fs__err_txn_not_pristine): Removed.  
	
	* txn.c (svn_fs_commit_txn): Moved to tree.c.  
	
	* fs-test.c (merge_trees): Don't test svn_fs_merge right now; we're 
	testing it through committing.  
	
	Unrelated changes: 
	
	* editor.c (svn_fs_get_editor): Put back BASE_REVISION parameter,
	with note to Ben, to match prototype in svn_fs.h.  

2001-03-13 15:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/old/: draft-korn-vcdiff-01.txt (1.1), karlnotes (1.1)
	(utags: milestone-2):

	
	* notes/old/:  new dir for old notes, move vcdiff docs in here 
	
	* libsvn_vdelta:  nuke this empty dir.  

2001-03-13 14:16   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/include/svn_io.h (1.32):

	Added docstring. Whoops.  

2001-03-13 14:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/svn-dev.el (1.5):

	The gnu style doesn't handle the extern "C" stuff in our headers
	properly.  Create an SVN style that does, and use that instead.  

2001-03-13 12:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.51):

	* fs-test.c (basic_commit): New name for commit_transaction.  
	(merging_commit): New function.  
	(test_funcs): Adjust for above.  

2001-03-13 07:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.80), subversion/include/svn_types.h (1.59):

	
	* svn_types.h:  add new reserved propname prefix 
	
	* STACK:  Change #4 is now finished.  

2001-03-12 23:13   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/: include/svn_io.h (1.31), libsvn_subr/io.c (1.32):

	*removed read_from_file function from client/main.c 
	
	*moved read_from_file function to libsvn_subr/io.c 
	
	*renamed read_from_file to svn_string_from_file 
	
	*added svn_string_from_file declaration to include/svn_io.h 

2001-03-12 21:25   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.69), subversion/libsvn_fs/Makefile.am (1.37),
	subversion/libsvn_fs/fs.c (1.39), ac-helpers/berkeley-db.m4 (1.7,
	milestone-2):

	Add a runtime check on the DB library version. After spending four
	hours tracking down the wrong shared library being pulled in, this
	is a better way to quickly detect the problem.  
	
	* configure.in: pass the values into svn_private_config.h 
	* berkeley-db.m4: put the -ldb right after the -L path setting 
	* Makefile.am: no longer need to pull in -ldb cuz LIBS does it now 
	* fs.c: add runtime check of the DB version 

2001-03-12 21:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.80), dag.h (1.38):

	(svn_fs__dag_commit_txn): Removed cast and duplicate definition, as 
	suggested by Greg Stein.  

2001-03-12 20:40   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/tests/libsvn_subr/.cvsignore (1.7, milestone-2):

	A duck! 

2001-03-12 19:28   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.35):

	Fix the GET response for WORKING resources. We can't fetch regular
	resources yet (since we cannot create revision roots), but we can
	fetch resources from transactions (i.e. from activities and working
	resources).  
	
	* (dav_svn_prep_working): refactor the error handling to ensure we
	    don't deref serr when it is NULL, and to clarify what is happening.  

2001-03-12 19:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.26), include/svn_delta.h
	(1.147), include/svn_fs.h (1.65), include/svn_ra.h (1.46),
	include/svn_wc.h (1.75), libsvn_client/commit.c (1.22),
	libsvn_delta/track_editor.c (1.2), libsvn_fs/editor.c (1.27),
	libsvn_ra_local/ra_plugin.c (1.14), libsvn_wc/adm_crawler.c (1.77),
	tests/libsvn_fs/fs-test.c (1.50), tests/libsvn_wc/commit-test.c
	(1.20):

	New commit architecture!! 
	
	I can't believe it's not butter.  I can't believe that `make check` 
	still works.  I'm not going to pay a lot for this muffler.  
	
	Boy, how many files can I touch?  :) 
	
	* svn_client.h (svn_client_commit):  add log_msg argument.  
	
	* commit.c (svn_client_commit):  rework logic of this routine, 
	  according to option #2 (gstein's proposal).  No more calling 
	  close_commit;  our commit editors bump revisions for us now.  
	
	* svn_fs.h (svn_fs_get_editor):  change declaration.  We don't need
	  to specify the base revision at editor-fetch time;  rather, the
	  editor driver passes it in when calling replace_root().  
	
	* editor.c (struct edit_baton):  per above, remove base_rev.  
	  (replace_root): use base_rev supplied by caller.  
	  (svn_fs_get_editor):  remove base_revision argument.  
	
	* svn_ra.h (get_commit_editor):  change declaration, no longer need 
	  base_path and base_rev.  Instead, base_path is built into the ra 
	  session baton's URL, and base_rev is given to replace_root().  
	
	* ra_plugin.c (get_commit_editor): call svn_fs_get_editor correctly.  
	  Don't take base_revision arg anymore.  Change declaration to match 
	  svn_ra.h too.  Call the track editor correctly (see below).  
	
	* commit-cmd.c (svn_cl__commit):  change call to svn_client_commit.  
	
	* Makefile.am:  link RA_LIBS into the client app.  
	
	* ra-commit.c (main):  in ra-dav-test, call ra-&gt;get_commit_editor 
	  correctly.  
	
	* fs-test.c (call_functions_with_unopened_fs):  test must call 
	  svn_fs_get_editor correctly.  
	
	* adm_crawler.c (svn_wc_crawl_local_mods):  don't return locks, just 
	  unlock them before quitting.  After all, we know that after we
	  call close_edit() that revisions have been bumped! 
	
	* svn_wc.h (svn_wc_crawl_local_mods):  don't return locks.  
	
	* track_editor.c (struct edit_baton, 
	  svn_delta_get_commit_track_editor): take 3 new args for optional 
	  revision bumping.  
	  (close_edit):  add, optionally bumps revisions.  
	  (apply_textdelta, window_handler):  return a no-op handler for 
	  proper delta composition.  
	
	* svn_delta.h (svn_delta_get_commit_track_editor):  change
	  declaration and docstring.  
	
	* commit-test.c (main): call svn_wc_crawl_local_mods correctly.  
	
	* ra-commit.c (main): call svn_wc_crawl_local_mods correctly.  

2001-03-12 19:18   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: activity.c (1.3), dav_svn.h (1.18),
	repos.c (1.34), version.c (1.14):

	Support a PUT to the repository. :-) 
	
	This checkin also removes much of the stub code that was present in
	repos.c to deal with unavailable SVN FS functions. There is also a
	bunch of 
	(untested) work for creating collections (directories), deleting
	items, and fetching resources.  
	
	*) dav_svn.h (dav_svn_private_restype): new enumerated type to
	     specify the different types of private resources.  
	   (dav_resource_private): repos_path now has a leading slash;
	     update comments to match the new semantic. add restype field to
	     discriminate among PRIVATE resource types.  
	   (dav_svn_create_activity): new declaration 
	
	*) repos.c (dav_stream): expand to include a stream for reading, and
	     a handler/baton for writing.  
	   (dav_svn_parse_version_uri, dav_svn_parse_working_uri, 
	     dav_svn_parse_uri): keep the leading slash in the repos_path
	   field.  (struct special_defn): add restype field for mapping
	     from dav_svn_private_restype back to a URI component 
	   (special_subdirs[]): add restype values 
	   (dav_svn_prep_regular): remove stub code and fetch youngest
	     revision.  remove stub code and open the revision root. determine
	     whether the resource is a directory and store in res.collection.  
	   (dav_svn_prep_working): toss stub and implement properly.  
	   (dav_svn_create_private_resource): new function 
	   (dav_svn_get_parent_resource): toss stub and implement parent
	     retrieval for WORKING resources (the only thing that can be
	   modified).  
	(dav_svn_open_stream): don't allow seekable resources (for now).
	     toss stub code and implement read/write dav_stream objects.  
	   (dav_svn_close_stream): toss stub and implement real closing.  
	   (dav_svn_read_stream): update to dav_stream.rstream field for
	   reading.  
	(dav_svn_write_stream): implement 
	   (dav_svn_seek_stream, dav_svn_copy_resource,
	     dav_svn_move_resource): return an error to catch unintended calls 
	   (dav_svn_getetag): fix: use idstr-&gt;data rather than just idstr 
	   (dav_svn_set_headers): remove stub code and implement fetching of
	     file length and storing in the response headers.  
	   (dav_svn_do_walk): do not skip the slash (for repository paths)
	     when using values from the uri_data field. update call to
	     svn_fs_is_file() for new prototype.  
	   (dav_svn_walk): do not skip the slash when setting up repos_path 
	   (dav_svn_create_working_resource): repos_path has a leading
	     slash, so don't place it into PATH.  
	
	*) version.c (dav_svn_make_activity): use the
	     dav_svn_create_activity() utility function to create the activity
	     and an FS transaction. also, make sure the resource gets updated
	("exists" and the txn name) 
	
	*) activity.c (dav_svn_create_activity): new function to create an
	     activity and an FS transaction 

2001-03-12 19:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.64), libsvn_fs/dag.c (1.79),
	libsvn_fs/dag.h (1.37), libsvn_fs/editor.c (1.26),
	libsvn_fs/rev-table.c (1.11), libsvn_fs/rev-table.h (1.6),
	libsvn_fs/txn.c (1.36), tests/libsvn_fs/fs-test.c (1.49):

	Commit the Greek Tree.  
	
	Most of this code is based on Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt;'s 
	original patch posted to the dev list.  
	
	* dag.c (make_node_immutable, stabilize_node): New functions.  
	
	* dag.h, dag.c (svn_fs__dag_commit_txn): New function.  
	
	* txn.c (commit_txn_args): Add char *conflict field.  
	(txn_body_commit_txn): Rewrite.  
	
	* svn_fs.h, txn.c (svn_fs_commit_txn): Finished.  Add conflict_p 
	parameter, set it according to the new conflict record in 
	commit_txn_args.  
	
	* rev-table.h, rev-table.c (youngest_rev_args): Take rev by value,
	not reference, in accordance with Greg Stein's recent suggestions. 
	All callers changed.  
	(txn_body_youngest_rev): Rewrite to use svn_fs__youngest_rev.  
	(svn_fs__youngest_rev): New func.  
	
	* editor.c (close_edit): Adjust call to svn_fs_commit_txn.  
	
	* fs-test.c (fetch_youngest_rev): Adjust call to svn_fs_commit_txn.  

2001-03-12 18:51   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/svnadmin/main.c (1.4):

	More hacking to list out transactions.  

2001-03-12 15:43  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: libsvn_client/commit.c (1.21),
	libsvn_ra_dav/commit.c (1.36), libsvn_subr/io.c (1.31):

	Fixed gcc warnings in the following locations: 
	
	* libsvn_subr/io.c (svn_io_open_unique_file) 
	* libsvn_ra_dav/commit.c (create_activity) 
	* libsvn_client/commit.c (svn_client_commit) 

2001-03-12 12:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/track_editor.c (1.1),
	libsvn_ra_local/track_editor.c (1.7):

	The actual move of track_editor.c 

2001-03-12 12:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.146), include/svn_ra.h
	(1.45), libsvn_delta/Makefile.am (1.18, milestone-2),
	libsvn_ra_local/Makefile.am (1.3), libsvn_ra_local/ra_local.h
	(1.7), libsvn_ra_local/ra_plugin.c (1.13), libsvn_wc/adm_ops.c
	(1.44):

	Put the track editor in libsvn_delta, and modify it to do *nothing*
	but build a target list at a particular address.  (ra_local uses the
	track editor under the hood.) 
	
	* track_editor.c (struct edit_baton, close_file, 
	  svn_ra_local__get_commit_track_editor) : operate on a generic 
	  apr_array_header_t instead of a `closer' baton.  
	
	  (add_file, add_dir): store path in these routines, to align with 
	  crawl_local_mod semantics.  Karl was only storing paths in 
	  close_file, which is not sufficient.  
	
	  (close_file, close_edit):  remove these routines, they're no-ops.  
	
	  (delete_entry, apply_textdelta, change_file_prop, change_dir_prop): 
	  add these routines, they need to store a path too.  
	
	  (store_path):  new helper.  
	
	* svn_delta.h (svn_delta_get_commit_track_editor): declare
	publically.  
	
	* ra_local.h (svn_ra_local__get_commit_track_editor):  undeclare
	privately.  
	
	* libsvn_delta/Makefile.am:  add track_editor.c 
	
	* libsvn_ra_local/Makefile.am:  remove track_editor.c 
	
	* ra_plugin.c (get_commit_editor):  call 
	  svn_delta_get_commit_track_editor correctly.  
	
	* adm_ops.c (svn_wc_set_revision):  bugfixes and logic changes.  
	    - svn_xml_make_open_tag expects logtag string to be initialized.  
	    - new logic for opening logfiles (to handles deleted files
	    correctly.) 

2001-03-12 12:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.78), libsvn_fs/dag.h (1.36),
	libsvn_fs/tree.c (1.43), libsvn_fs/txn.c (1.35),
	tests/libsvn_fs/fs-test.c (1.48):

	Move core of svn_fs_merge into svn_fs__dag_merge.  (Next task is to 
	try Yoshiki Hayashi's commit_txn, replacing an error return with a 
	merge attempt instead.) 
	
	* dag.h, dag.c (svn_fs__dag_merge): New func.  
	(svn_fs__dag_dir_entries_hash): New func.  
	(svn_fs__dag_dir_entries_skel): New name for
	svn_fs__dag_dir_entries, all callers changed.  
	
	* dag.c (replace_dir_entry): Doc fix.  Replace assertion with a real 
	error check.  
	(add_new_entry): Take an id instead of a node for the new entry. 
	All callers changed.  
	
	* tree.c (txn_body_dir_entries): Use svn_fs__dag_dir_entries_hash.  
	(dag_merge_args, txn_body_dag_merge): New struct and func.  
	(svn_fs_merge): Implement using above.  
	
	Unrelated changes: 
	
	* dag.c (find_dir_entry_skel): Indentation fix.  

2001-03-12 10:32  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.47):

	* tests/libsvn_fs/fs-test.c 
	
	  Sweeping change: use APR_HASH_KEY_STRING throughout instead of 
	  explicit strlen() calls.  

2001-03-12 10:20   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: libsvn_fs/editor.c (1.25), libsvn_fs/rev-table.c
	(1.10), libsvn_fs/tree.c (1.42), libsvn_fs/txn.c (1.34),
	tests/libsvn_fs/fs-test.c (1.46):

	Make sure that every function which requires an open filesystem
	calls svn_fs__check_fs, so the user gets an error, instead of a
	crash in Berkeley DB.  (Changes from Yoshiki Hayashi --- Thanks!) 
	* libsvn_fs/editor.c: #include "err.h".  
	(svn_fs_get_editor): Call svn_fs__check_fs.  
	* libsvn_fs/rev-table.c (svn_fs_youngest_rev, svn_fs_revision_prop, 
	svn_fs_revision_proplist, svn_fs_change_rev_prop): Same.  
	* libsvn_fs/tree.c (svn_fs_revision_root): Same.  
	* libsvn_fs/txn.c (svn_fs_begin_txn, svn_fs_open_txn, 
	svn_fs_list_transactions): Same.  
	* tests/libsvn_fs/fs-test.c: Add new tests for above behavior.  
	(check_no_fs_error, call_functions_with_unopened_fs): New functions.  
	(test_funcs): Add call_functions_with_unopened_fs.  
	
	* libsvn_fs/editor.c (svn_fs_get_editor): Don't forget to initialize 
	the edit baton's pointer to the filesystem.  

2001-03-12 09:43   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.19, postmerge_strings-reps-dev,
	premerge_strings-reps-dev, strings-reps-dev-done, milestone-2):

	Noonie noonie noo...  

2001-03-12 09:43   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.63):

	* include/svn_fs.h (svn_fs_free_file_contents): Function deleted.  
	svn_fs_file_contents no longer returns a baton anyway; it returns an 
	svn_stream_t, which can be closed by calling `svn_stream_close'.  

2001-03-11 11:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.44), libsvn_ra/ra_loader.c
	(1.2), tests/libsvn_ra_local/ra-local-test.c (1.7):

	Rename the ra loading routines, now that they live in libsvn_ra.  
	
	* ra_loader.c (svn_client_init_ra_libs, svn_client_get_ra_library): 
	  renamed to svn_ra_init_ra_libs and svn_ra_get_ra_library.  
	
	* svn_ra.h:  same rename here.  
	
	* ra-local-test.c (get_ra_local_plugin):  call new names.  

2001-03-11 02:04  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_error.h (1.84), include/svn_ra.h (1.43),
	libsvn_ra_local/ra_local.h (1.6), libsvn_ra_local/split_url.c
	(1.5), tests/libsvn_ra_local/ra-local-test.c (1.6):

	* include/svn_error.h 
	
	  (SVN_ERR_RA_NOT_VERSIONED_RESOURCE): New error id.  
	
	* include/svn_ra.h 
	
	  (svn_client_get_ra_library): Added reference notes about the 
	  validity of URLs.  
	
	* libsvn_ra_local/ra_local.h 
	
	  Some docstring changes.  
	
	* libsvn_ra_local/split_url.c 
	
	  (svn_ra_local__split_URL): Re-worked this function.  
	
	* tests/libsvn_ra_local/ra-local-test.c 
	
	  The following code was added, but is currently #ifdef'd out to 
	  preserve portability.  Any hints on making this actually work 
	  without a bunch of system-specific operations is appreciated.  
	
	  (try_split_url): Helper function 
	
	  (split_url_test_1): New test for svn_ra_local__split_URL's 
	  well-formed-ness checking capabilities.  
	
	  (check_split_url): Helper function 
	
	  (split_url_test_2): New test for svn_ra_local__split_URL's accuracy 
	  at splitting URLs up into a valid filesystem path and a repository 
	  path.  

2001-03-10 20:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/txn.c (1.33), tests/libsvn_fs/fs-test.c
	(1.45):

	* fs-test.c (commit_transaction): Run in the test suite, with 
	post-commit check commented out.  It passes, though it doesn't do 
	anything of significance right now.  
	
	* txn.c (commit_txn_args, txn_body_commit_txn): New struct and func.  
	Note current State of the Onion in body of latter.  
	(svn_fs_commit_txn): Fill in using above.  

2001-03-10 19:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.77), libsvn_fs/dag.h (1.35),
	libsvn_fs/tree.c (1.41), tests/libsvn_fs/fs-test.c (1.44):

	Finish svn_fs_merge, test it as far as it can be tested before we
	have some committed trees to work on: 
	
	* tree.c (reroot_path_args, txn_body_reroot_path): Replace 
	reroot_txn_args and txn_body_reroot_txn with these, because more 
	general.  
	
	* dag.h, dag.c: Change according to Greg Stein's advice: 
	(add_new_entry_skel): New helper func.  
	(add_new_entry): Use it.  
	(find_dir_entry_skel): New name for find_dir_entry, to match 
	add_new_entry_skel.  
	(svn_fs__dag_set_entry): Rewrite to use above.  
	(replace_dir_entry): Assert that we found the entry.  This whole 
	function should probably be factored with svn_fs__dag_set_entry, but 
	they are sufficiently different behaviors that I'm leaving it alone 
	for now.  
	
	* fs-test.c (merge_trees): Extend.  
	(attempt_merge): Fix sense of conflict information test.  

2001-03-10 16:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/: dag.c (1.76), skel.c (1.25), txn-table.c
	(1.20):

	Fix up some casting related to svn_fs__str_atom 
	
	* dag.c, txn-table.c (...): remove some casts from calls to
	svn_fs__str_atom 
	* skel.c (svn_fs__str_atom): add a cast for the assignment to
	skel-&gt;data 

2001-03-10 12:14   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/: dag.c (1.75), dag.h (1.34), tree.c (1.40):

	Implement svn_fs_file_length() 
	
	* dag.h (svn_fs__dag_file_length): new declaration 
	* dag.c (svn_fs__dag_file_length): new function 
	* tree.c (svn_fs_file_length, txn_body_file_length): new functions 
	  (file_length_args): new structure for txn_body_file_length args 

2001-03-10 11:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.62), libsvn_fs/tree.c (1.39):

	* svn_fs.h (svn_fs_is_file, svn_fs_is_dir): these need to be able to
	    return an error (generally, related to database operation), and they
	    require a pool argument.  
	
	* tree.c (svn_fs_is_file, svn_fs_is_dir, txn_body_is_kind): new
	  functions 
	(is_kind_args): new struct for use with txn_body_is_kind 

2001-03-10 08:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.10):

	Weekly status update for March 10.  

2001-03-10 00:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.83), libsvn_fs/dag.c (1.74),
	libsvn_fs/dag.h (1.33), libsvn_fs/err.c (1.26), libsvn_fs/err.h
	(1.22), libsvn_fs/id.c (1.17), libsvn_fs/skel.c (1.24),
	libsvn_fs/skel.h (1.18), libsvn_fs/tree.c (1.38),
	libsvn_fs/txn-table.c (1.19), libsvn_fs/txn-table.h (1.11),
	tests/libsvn_fs/fs-test.c (1.43):

	Continuing work on svn_fs_merge: 
	
	* fs-test.c (merge_trees): Note in message that this test is still 
	incomplete.  
	
	* tree.c (reroot_txn_args, txn_body_reroot_txn): New helper funcs.  
	(svn_fs_merge): Filling out.  
	
	* dag.h, dag.c (svn_fs__dag_reroot_txn, svn_fs__dag_set_entry): New 
	funcs.  
	
	* txn-table.h, txn-table.c (svn_fs__set_txn_roots): New func.  
	
	* err.h, err.c (svn_fs__err_txn_not_pristine): New func.  
	
	* svn_err.h (svn_errno_t): New error SVN_ERR_FS_TXN_NOT_PRISTINE.  
	
	* id.c (svn_fs_unparse_id): Removed old doc string from code; this
	is documented in svn_fs.h now.  
	
	* dag.c (replace_dir_entry): Copy the skel before modifying it.  
	
	* skel.h, skel.c (svn_fs__str_atom): Constify string argument.  

2001-03-09 21:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.37):

	(svn_fs_merge): Put error check in front.  

2001-03-09 21:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.36):

	(svn_fs_merge): Further condensation.  

2001-03-09 21:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.35):

	(svn_fs_merge): Reduce case tree to minimal form, start filling in 
	pseudocode.  

2001-03-09 18:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.34):

	(svn_fs_merge): Update pseudocode to recurse correctly.  Or, as Noah 
	Friedman would have it, "to recur correctly".  

2001-03-09 18:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.61):

	(svn_fs_merge): Undo previous doc change, it was just an obsolete
	note to myself.  

2001-03-09 18:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.60), libsvn_fs/tree.c (1.33),
	tests/libsvn_fs/fs-test.c (1.42):

	* fs-test.c (merge_trees, attempt_merge): New functions.  
	(abort_txn): Removed obsolete comment.  
	(greek_tree_under_root): Refer the reader to greek-tree.txt now.  
	
	* tree.c (svn_fs_merge): Set *conflict_p to null and return success 
	for now.  Map out implementation in pseudocode.  
	
	* svn_fs.h (svn_fs_merge): Doc changes.  

2001-03-09 18:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/skel.c (1.23):

	(svn_fs__make_empty_list): Use apr_pcalloc, instead of apr_palloc,
	to get zeroed memory.  Previously, this function explicitly set
	certain fields to 0, but the `next' field was not among them.  This
	led to a run-time digestive disturbance, which could be reproduced
	by creating three greek trees in three different txns
	simultaneously.  

2001-03-09 16:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.25), libsvn_client/commit.c
	(1.20):

	Pave the way for RA commits.  
	
	* svn_client.h (svn_client_commit):  new docstring promises! 
	  Franklin 
	(ahem) forgot to put a docstring here originally.  
	
	* commit.c (svn_client_commit):  rewrite internal code paths.  

2001-03-09 15:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.74), libsvn_client/commit.c
	(1.19), libsvn_wc/adm_crawler.c (1.76), libsvn_wc/adm_ops.c (1.43),
	tests/libsvn_wc/commit-test.c (1.19):

	Clearing WC dust away.  &lt;cough, cough&gt; 
	
	* adm_ops.c (svn_wc_set_revision): implement.  
	
	* adm_crawler.c, svn_wc.h (svn_wc_crawl_local_mods):  return locks 
	  hash now.  Update documentation.  
	
	* svn_wc.h (svn_wc_close_commit_baton, svn_wc_set_revision): 
	  renamed from svn_wc_bump_baton and svn_wc_bump_target.  
	
	* commit.c (svn_client_commit):  call crawl_local_mods() correctly.  
	
	* commit-test.c, ra-commit.c (main):  call crawl_local_mods()
	correctly.  

2001-03-09 12:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.59):

	(svn_fs_merge): Doc fix.  

2001-03-09 12:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/greek-tree.txt (1.2, milestone-2):

	Rearrange so the whole tree is more likely to be visible on the
	screen when you bring it up the first time.  It's little touches
	like this that make a home.  

2001-03-09 11:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/: Makefile.am (1.13), greek-tree.txt (1.1),
	xml/README (1.2, milestone-2), xml/co1.txt (1.6):

	Put the Greek Tree in its own file: 
	
	* greek-tree.txt: New file.  
	* xml/co1.txt: Removed.  
	
	All references changed.  

2001-03-09 11:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.68), subversion/Makefile.am (1.25),
	ac-helpers/svn-define-libs.m4 (1.2),
	subversion/include/svn_client.h (1.24), subversion/include/svn_ra.h
	(1.42), subversion/libsvn_client/Makefile.am (1.13),
	subversion/libsvn_client/ra_loader.c (1.6),
	subversion/libsvn_ra/.cvsignore (1.1, milestone-2),
	subversion/libsvn_ra/Makefile.am (1.1, milestone-2),
	subversion/libsvn_ra/ra_loader.c (1.1),
	subversion/libsvn_ra_dav/commit.c (1.35),
	subversion/tests/libsvn_ra_local/Makefile.am (1.4),
	subversion/tests/libsvn_ra_local/ra-local-test.c (1.5):

	Create a new library "libsvn_ra", contains nothing but 2 public 
	routines for loading RA implementations.  
	
	* configure.in:  create Makefile for libsvn_ra 
	
	* svn-define-libs.m4:  build RA variable.  
	
	* Makefile.am: add libsvn_ra 
	
	* svn_client.h:  remove declarations of ra funcs 
	
	* svn_ra.h (svn_client_init_ra_libs, svn_client_get_ra_library): 
	  redeclare them here! 
	
	* commit.c (make_activity):  #if 0 the wc call.  We have WC props
	  for this now.  
	
	* libsvn_client/Makefile.am:  remove ra_loader.c from the client
	lib.  
	
	* libsvn_client/ra_loader.c:  removed.  
	
	* libsvn_ra/ra_loader.c:  added over here.  We need `svn mv'! 
	
	* tests/libsvn_ra_local/Makefile.am:  include ra libs, and the magic 
	  "client deps" variable.  
	
	* ra-local-test.c (get_ra_local_plugin):  use gstein's api.  
	  (test_funcs): #if, not #ifdef.  Shame on Franzlin. :) 

2001-03-09 09:43  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* TASKS (1.19, milestone-2):

	Just thought I would let everyone know that I am still here :), and
	what I would like to work on once the libsvn_client interface
	settles down a bit.  

2001-03-09 08:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_wc.h (1.73):

	(struct svn_wc_bump_baton): hehe, fix typo.  

2001-03-09 08:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.72), libsvn_wc/adm_ops.c (1.42):

	Start to open brave, new code paths in WC, to prepare for docking
	with ra_local.  
	
	* adm_ops.c (svn_wc_bump_target):  start writing.  
	* svn_wc.h (svn_wc_bump_target, struct svn_wc_bump_baton): declare.  

2001-03-08 17:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_ra_local/Makefile.am (1.3):

	Remove spurious 'n'.  

2001-03-08 17:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_ra_local/ra-local-test.c (1.4):

	(test_funcs): Comment out failing tests, so make check still works.  

2001-03-08 16:13   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/ra_plugin.c (1.12):

	
	* ra_plugin.c 
	 (cleanup_commit): fill out.  
	 (get_commit_editor):  initialize array_header_t correctly, duh.  

2001-03-08 15:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_ra_local/: Makefile.am (1.2),
	ra-local-test.c (1.3):

	Total rewrite of tests/libsvn_ra_local/ area.  It's now using the
	real C test harness.  :) 

2001-03-08 13:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.34), ra_dav.h (1.11):

	Oops, make ra_dav stuff compile again after that last change.  
	GregH, sorry!  The base_path arg is in there now, but being mostly 
	ignored.  
	
	* ra_dav.h (svn_ra_dav__get_commit_editor) take base_path argument.  
	* commit.c (svn_ra_dav__get_commit_editor) take base_path argument.  
	* ra-commit.c (main):  change call appropriately.  

2001-03-08 12:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.41), libsvn_ra_local/ra_plugin.c
	(1.11):

	
	* svn_ra.h (get_commit_editor): take base_path argument, for the
	  same reason that svn_fs_get_editor now does.  Namely, the client
	  already knows the "grandaddy" dir where it will call replace root. 
	  It's silly to force the editor-driver to always begin changes at the
	  very top of a revision tree.  
	
	* ra_local.c (open, close, get_latest_revnum, get_commit_editor):
	  use SVN_ERR macro for readability.  Uncomment some things.  
	
	  (get_commit_editor): take base_path argument.  

2001-03-08 11:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.40), libsvn_ra_local/ra_plugin.c
	(1.10):

	When an RA session baton is closed, the session baton itself should 
	*not* be freed... only the data within the baton should be.  
	
	* svn_ra.h (close):  change docstring promise.  
	
	* ra_plugin.c (open):  allocate the session baton in pool, not
	  subpool.  
	(close):  fix docstring.  

2001-03-08 10:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.24):

	Make the fs commit-editor use memory more efficiently. 
	Specifically, after the driver calls close_file, free any memory
	used for writing file contents.  
	
	(struct file_baton):  add a subpool field.  
	(add_file, replace_file):  initialize file baton's subpool.  
	(apply_textdelta):  use file baton's subpool for streamy writes.  
	(close_file):  free the file baton's subpool.  

2001-03-07 20:03   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/project_members.html (1.12):

	Doh.  

2001-03-07 19:48   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/project_members.html (1.11):

	Mine tastes like burning.  

2001-03-07 16:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.23):

	Finish rewrite of filesystem commit-editor using svn_fs.h interface.  
	This editor is now *much* simpler than it used to be. :) 
	
	(add_directory, add_file):  total rewrite; use svn_fs_copy if
	possible.  
	
	(replace_directory, replace_file):  nothing but baton construction
	now.  
	
	(close_directory, close_file):  no-op routines! 
	
	(apply_textdelta, change_dir_prop, change_file_prop):  these are now 
	  mindless wrappers around fs routines.  
	
	(replace_root, close_edit):  these routines do the only lofty
	things.  

2001-03-07 14:32  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.41):

	* tests/libsvn_fs/test.c 
	
	  (revision_props): Reworked this function to use apr_hash_get instead 
	  of looping through the hash values (instead of `for each j of each 
	  i', do `for each i of each j').  Probably boils down to just being 
	  easier to read.  Also, I don't think it needed a txn anymore, so I 
	  ganked it.  
	
	  (node_props): New function, with thanks to Yoshiki for the concept, 
	  but reworked in the same fashion as revision_props (see above).  
	  Also, changed the property names and values to something different 
	  than those used in the revision property test.  

2001-03-07 13:20  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.40):

	* tests/libsvn_fs/test.c 
	
	  (revision_props): Reworked this function to use apr_hash_get instead 
	  of looping through the hash values (instead of `for each j of each 
	  i', do `for each i of each j').  Probably boils down to just being 
	  easier to read.  

2001-03-07 11:06  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_wc/lock.c (1.22):

	* libsvn_wc/lock.c 
	
	  (svn_wc__lock): Bug fix.  Sleeping for 1 second now, instead of 1000 
	  microseconds (0.001 seconds).  As of June 7, 2000, apr_sleep now 
	  takes an apr_interval_time_t instead of an apr_time_t.  

2001-03-07 10:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_fs.h (1.58):

	(svn_fs_get_editor):  clarify comment.  

2001-03-07 10:40  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.32):

	* libsvn_fs/tree.c 
	
	  (txn_body_node_prop): Small patch by Yoshiki, showing off his new 
	  function. :-) 

2001-03-06 23:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/txn.c (1.32):

	(svn_fs_commit_txn): A small novella about how to do commits.  

2001-03-06 19:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.39):

	(abort_txn): Doc fixes and tweaks.  

2001-03-06 18:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.82), include/svn_fs.h (1.57),
	libsvn_fs/dag.c (1.73), libsvn_fs/dag.h (1.32),
	libsvn_fs/node-rev.c (1.9), libsvn_fs/node-rev.h (1.8),
	libsvn_fs/nodes-table.c (1.16), libsvn_fs/nodes-table.h (1.8),
	libsvn_fs/txn-table.h (1.10), libsvn_fs/txn.c (1.31),
	tests/libsvn_fs/fs-test.c (1.38):

	Finished svn_fs_abort_txn and friends: 
	
	* fs-test.c (abort_txn): Completed.  
	
	* txn.c (delete_from_id): New func.  
	(svn_fs_abort_txn, txn_body_abort_txn, abort_txn_args): Filled in.  
	
	* nodes-table.h, nodes-table.c (svn_fs__delete_nodes_entry): New
	name for what was svn_fs__delete_node_revision.  
	
	* node-rev.h, node-rev.c (svn_fs__delete_node_revision): New wrapper 
	for above, also taking the old name of above.  Don't be confused.  
	
	* dag.h (svn_fs__dag_get_node): Doc fix.  
	
	* dag.c (svn_fs__dag_get_node): Indentation fix.  
	
	* svn_error.h (svn_errno_t): Doc fix for SVN_ERR_FS_NOT_MUTABLE.  
	
	* svn_fs.h (svn_fs_open_txn): Promise that the error returned is 
	SVN_ERR_FS_NO_SUCH_TRANSACTION if no such txn.  
	
	* txn-table.h (svn_fs__get_txn): Same.  

2001-03-06 18:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.22):

	Oops, missed part of the previous commit.  

2001-03-06 18:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_fs.h (1.56), include/svn_types.h (1.58),
	libsvn_fs/editor.c (1.21):

	Begin rewrite of filesystem commit-editor, using svn_fs.h interface 
	instead of the dag.h layer.  Woohoo! 
	
	* svn_fs.h (svn_fs_get_editor):  new base_path argument, change 
	  docstring promises accordingly.  
	
	* editor.c (svn_fs_get_editor):  accept new base_path argument 
	
	  (struct edit_baton):  reorder args by hierarchy for readability.  
	                        add base_path arg.  
	  (struct dir_baton):  remove dag_node_t, add absolute path,
	  simplify.  (struct file_baton): remove dag_node_t, add absolute
	path, simplify.  
	
	  (txn_body_clone_root, txn_body_delete, delete_args, 
	  txn_body_add_directory, txn_body_replace_directory, add_repl_args, 
	  txn_body_get_base_contents, txn_body_handle_window, 
	  handle_txdelta_args, txn_body_add_file, txn_body_replace_file, 
	  change_prop_args, txn_body_change_prop): 
	       remove all these things. We don't "do" db txns at this level.  
	
	  (replace_root):  greatly simplify.  
	
	  (close_edit): call svn_fs_abort_txn() if commit_txn 
	  fails.  call svn_fs_change_rev_prop to set log message.  (see code 
	  comments on both of these changes.) 
	
	* svn_types.h (SVN_PROP_REVISION_LOG):  our very first reserved prop
	name. :) 

2001-03-06 15:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/txn.c (1.30), tests/libsvn_fs/fs-test.c
	(1.37):

	Test case for svn_fs_abort_txn: 
	
	* fs-test.c (abort_txn): New test.  Mostly done, but parts commented 
	out until svn_fs_abort_txn works.  
	(greek_tree_under_root): It's "A/B/F", not "A/B/E/F".  
	
	* txn.c (svn_fs_abort_txn): New empty function, to link against.  
	(abort_txn_args, txn_body_abort_txn): New struct and function.  

2001-03-06 11:48   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_io.h (1.30):

	Clarify stream interface comment.  

2001-03-06 11:16  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.36):

	Patches by Yoshiki Hayashi, applied and tweaked by cmpilato.  
	
	* tests/libsvn_fs/fs-test.c 
	
	  (revision_props): Removed unnecessary txn argument.  
	
	  (node_props): New test case for node properties.  
	
	  (check_greek_tree_under_root):  New helper function for 
	  commit_transaction.  Mike Pilato drastically re-formulated this 
	  function, so if it sucks, blame him.  
	
	  (commit_transaction): New test for svn_fs_commit.  Not active at 
	  this time (awaiting patch approval on commit_txn stuff).  
	
	  (fetch_youngest_rev): Expanded scope of this test.  Not active at
	  this time (awaiting patch approval on commit_txn stuff).  
	
	  (test_funcs): Added (inactive) commit_transaction test, and moved 
	  (the temporarily inactive) fetch_youngest_rev test to follow 
	  commit_transaction, since there is a code dependency on committed 
	  transactions now.  

2001-03-06 10:56  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.72), tree.c (1.31):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_get_proplist, svn_fs__dag_set_proplist): Bug fixes by 
	  Yoshiki Hayashi.  
	
	* libsvn_fs/tree.c 
	
	  (struct proplist_args, txn_body_node_proplist, 
	  svn_fs_node_proplist): Implemented this function, helper, and 
	  friends.  A poem by Yoshiki Hayashi.  
	
	  (txn_body_change_node_prop): Implemented promise that property will 
	  be removed when value is NULL.  More YH poetry.  

2001-03-05 22:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/err.h (1.21):

	(svn_fs__err_dangling_id): Doc fix.  

2001-03-05 22:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.81), libsvn_fs/err.c (1.25),
	libsvn_fs/nodes-table.h (1.7), tests/libsvn_fs/fs-test.c (1.35):

	Check that deleting mutable nodes actually removes them from the 
	filesystem entirely.  Also, this code should come in handy later
	when we're testing svn_fs_abort_txn.  
	
	* fs-test.c #include nodes-table.h; and #include trail.h, not
	trail.c.  
	(check_entry): Document.  
	(check_id, check_id_present, check_id_absent): New helper functions.  
	(check_id_args, txn_body_check_id): New helper struct and function, 
	respectively.  
	(delete_mutables): Use check_id_* to ensure the node revisions
	really vanished.  
	
	* svn_fs.h (SVN_ERR_FS_ID_NOT_FOUND): New error.  
	
	* err.c (svn_fs__err_dangling_id): Return the new error.  
	
	* nodes-table.h (svn_fs__get_rep): Document the circumstances under 
	which SVN_ERR_FS_ID_NOT_FOUND is returned.  

2001-03-05 21:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.h (1.5):

	A guide to the perplexed.  

2001-03-05 21:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.71), libsvn_fs/nodes-table.c
	(1.15), libsvn_fs/nodes-table.h (1.6), tests/libsvn_fs/fs-test.c
	(1.34):

	* dag.c (svn_fs__dag_delete): Completed.  A large portion of this 
	change came from Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt;.  
	
	* nodes-table.c, nodes-table.h (svn_fs__delete_node_revision): New 
	function, contributed by Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt;.  
	
	* fs-test.c (delete_mutables): Completed.  
	(check_entry_absent, check_entry_present): New helpers for above.  
	(check_entry): New helper for above new helpers.  
	
	Unrelated changes: 
	
	* fs-test.c (greek_tree_under_root): Create "A/C", not "A/B/C".  Can 
	you say "Cut and paste?"  Because I can say "Subpoena"...  Also,
	don't take subpool arg.  All callers changed.  
	(verify_entry): Doc fix.  

2001-03-05 18:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.26), subversion/tests/README (1.6, milestone-2),
	subversion/tests/TEST-FRAMEWORK (1.6):

	* HACKING: New section "Writing test cases before code".  Moved the 
	sections "Writing log entries" and "Generating changelogs" to come 
	after all discussion of coding style.  
	
	* subversion/tests/TEST-FRAMEWORK: Removed, all material moved to 
	README.  
	
	* subversion/tests/README: Incorporate material from above.  

2001-03-05 18:11   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/rev-table.c (1.9):

	* include/svn_fs.h (svn_fs_free_file_contents): Function deleted.  
	svn_fs_file_contents no longer returns a baton; instead, it returns
	an svn_stream_t, which should be freed using svn_stream_close.  

2001-03-05 12:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/nodes-table.c (1.14):

	* libsvn_fs/nodes-table.c 
	
	  (svn_fs__new_successor_id): Bug fix.  Make sure we're doing our 
	  database lookup using an up-to-date key based on the new ID we
	  just assembled.  

2001-03-05 12:26   Greg Hudson &lt;ghudson@mit.edu&gt;

	* notes/delta.dtd (1.1, milestone-2):

	DTD for tree deltas.  Written by Branko back in September 2000.  I 
	think it's still correct.  

2001-03-05 11:07   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: libsvn_fs/skel.c (1.22), libsvn_fs/skel.h (1.17),
	tests/libsvn_fs/skel-test.c (1.16):

	Don't bother to indent the skels.  Skels will usually be small and 
	simple, and the indentation is impossible to read anyway in output 
	from db_dump, which hexifies the newline characters.  
	
	* libsvn_fs/skel.c (estimate_unparsed_size, unparse): Remove `depth' 
	arguments; callers fixed.  Don't emit or reserve space for
	indentation.  
	* libsvn_fs/skel.h: Doc fix.  
	* tests/libsvn_fs/skel-test.c (unparse_implicit_length): Don't
	expect a space after the atom; the interface doesn't promise it.  

2001-03-05 05:01   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* tools/cvs2svn/cvs2svn.pl (1.3, milestone-2):

	Now digs out the repository info from CVS/Root if -d wasn't
	specified. Very minor change.  PR: Obtained from: Submitted by: 
	Reviewed by: 

2001-03-03 15:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.55), libsvn_fs/dag.c (1.70),
	tests/libsvn_fs/fs-test.c (1.33):

	Working on svn_fs__dag_delete and dependencies: 
	
	* fs-test.c (greek_tree_under_root): New helper for various fs
	tests.  Fix the greek tree it creates to match the one in
	tests/xml/co1.txt.  
	(create_greek_tree_transaction): Use above.  
	(delete_mutables): New test, also uses above.  This test is 
	incomplete, and the bulk of it is #if'd out.  
	
	* svn_fs.h (svn_fs_delete): Doc fix -- promise specific errors, so
	we can test for them.  
	
	* dag.c (svn_fs__dag_delete): Dup node revision skel before
	modifying.  Use `for' loop with compacted initialization.  
	
	NOTE: These changes are incomplete.  svn_fs__dag_delete is not yet 
	known to work correctly.  I'm just committing up because I have to
	run unexpectedly right now.  

2001-03-03 12:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/co1.txt (1.5):

	Better formatting.  

2001-03-03 12:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/co1.txt (1.4):

	Get rid of hated whitespace.  

2001-03-03 12:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/co1.txt (1.3):

	Add alternate (more compact) listing of the Greek Tree.  

2001-03-03 11:27   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_fs/editor.c (1.20), tests/libsvn_fs/fs-test.c
	(1.32):

	update some callers. svn_fs_txn_name now returns a const char * for
	the transaction name.  

2001-03-03 11:25   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.54), libsvn_fs/txn.c (1.29):

	* svn_fs.h (svn_fs_txn_name): name_p parameter should be "const" 
	* txn.c (svn_fs_txn_name): name_p parameter is now "const" 

2001-03-03 09:34   Greg Stein &lt;gstein@lyra.org&gt;

	* TASKS (1.18):

	hurpty durpty durpty.  

2001-03-03 09:19   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.31):

	[ sorry, I just can't resist. aprpool is "different" and the
	  hobgoblin is strong in my brain today. ] 
	
	Just toss the pool argument and use the global variable.  
	
	(stream_to_string, set_file_contents): Lose the "aprpool" parameter.
	  All callers changed. Use the "pool" global.  

2001-03-03 09:09   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/tests/libsvn_fs/.cvsignore (1.5, milestone-2):

	Mmmmm... donuts...  

2001-03-03 08:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.30):

	(test_funcs):  Duh... why were we running verify_txn_list twice? 

2001-03-03 04:18  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.29):

	* tests/libsvn_fs/fs-test.c 
	
	  (stream_to_string, set_file_contents): Renamed POOL argument to 
	  APRPOOL to eliminate warnings from GCC about name clashes.  
	
	  (revision_props): New test function for revision properties.  
	
	  (test_funcs): Added revision_props test to the queue.  

2001-03-03 04:18  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.69), rev-table.c (1.8),
	rev-table.h (1.5), skel.c (1.21), skel.h (1.16):

	The following patch was submitted by Yoshiki Hayashi, with some 
	comments supplied by cmpilato, mostly for his own understanding
	while reviewing the patch.  
	
	* libsvn_fs/skel.h 
	* libsvn_fs/skel.c 
	
	  (svn_fs__atom_matches_string): New function and prototype.  
	
	* libsvn_fs/rev-table.c 
	* libsvn_fs/rev-table.h 
	* libsvn_fs/dag.c 
	
	  (svn_fs__get_rev, svn_fs__put_rev): Instead of a txn and a pool, 
	  these functions now take a trail, and use the trail's txn and pool 
	  members.  All callers are changed.  
	
	* libsvn_fs/rev-table.c 
	
	  (txn_body_revision_prop, svn_fs_revision_prop): New functions for 
	  getting a named property from a given FS revision.  
	
	  (txn_body_revision_proplist, svn_fs_revision_proplist): New 
	  functions for getting a list of properties from a given FS
	  revision.  
	
	  (txn_body_change_rev_prop, svn_fs_change_rev_prop): New function for 
	  adding, removing, or changing the value of a property in a given
	  FS revision.  

2001-03-02 20:07   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.28):

	this may be just a test program, but cutesy variable name wonkiness
	is simply going to cause headaches.  

2001-03-02 18:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.68):

	(svn_fs__dag_delete): Note where to pick up tomorrow.  

2001-03-02 17:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.67), ac-helpers/berkeley-db.m4 (1.6):

	(SVN_LIB_BERKELEY_DB): Look for the new (3.2.x) version of Berkeley
	DB now.  

2001-03-02 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.9):

	update weekly status page.  

2001-03-02 17:07   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.53), libsvn_fs/fs.c (1.38),
	tests/libsvn_fs/fs-test.c (1.27):

	Be more aggressive about collecting whatever error and warning 
	messages the filesystem can provide.  
	* libsvn_fs/fs.c (svn_fs_set_berkeley_errcall): New function.  
	* include/svn_fs.h (svn_fs_set_berkeley_errcall): New declaration.  
	* tests/libsvn_fs/fs-test.c (berkeley_error_handler): New function.  
	(fs_new): New function.  
	(create_fs_and_repos, open_berkeley_filesystem): Use fs_new, and 
	register a function to print Berkeley DB error messages.  
	
	* libsvn_fs/fs.c (svn_fs_delete_berkeley, check_apr): New functions.  
	* include/svn_fs.h (svn_fs_delete_berkeley): New declaration.  
	* tests/libsvn_fs/fs-test.c (create_fs_and_repos): If there's an old 
	repository where we're trying to create a new one, delete the old
	one first.  

2001-03-02 16:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.67), tests/libsvn_fs/fs-test.c
	(1.26):

	(svn_fs__dag_dir_entries): Fill in, with contribution from Yoshiki 
	Hayashi &lt;yoshiki@xemacs.org&gt;.  
	
	* fs-test.c (list_directory, verify_entry): New test and helper, 
	respectively.  Passes.  

2001-03-02 16:49   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/trail.h (1.7):

	Doc fix.  

2001-03-02 16:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/rev-table.c (1.7):

	* libsvn_fs/rev-table.c (txn_body_youngest_rev): Don't forget to
	close the cursor.  

2001-03-02 16:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.25):

	(create_greek_tree_transaction):  add CONTENT to our tree of files! 

2001-03-02 16:25   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/nodes-table.c (1.13):

	NOTE!!!  With this change, the Subversion filesystem now requires 
	Berkeley DB 3.2.9.  
	
	* libsvn_fs/nodes-table.c (compare_nodes_keys): Add `DB *' argument, 
	to match the prototype expected by Berkeley DB 3.2.9.  GCC flags
	this mismatch as a warning, not an error, which seems silly.  

2001-03-02 16:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.24):

	
	(set_file_contents):  helper func.  
	(write_and_read_file):  use above helper now.  

2001-03-02 16:17   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_error.h (1.80), libsvn_subr/svn_error.c
	(1.56):

	* libsvn_subr/svn_error.c (svn_handle_warning): Make the `fmt'
	argument const, for compatibility with svn_fs_warning_callback_t in
	`include/svn_fs.h'.  
	* include/svn_error.h (svn_handle_warning): Update declaration.  

2001-03-02 16:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/tree.c (1.30), tests/libsvn_fs/fs-test.c
	(1.23):

	We can read and write data to a repository file!!!  Woohoo!! 
	
	Two bugfixes: 
	
	* tree.c (svn_fs_apply_textdelta):  duh, initialize the
	svn_string_t.  
	
	* fs-test.c (test_funcs):  fix ordering.  

2001-03-02 15:47  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/: libsvn_fs/run-fs-tests.sh (1.4, milestone-2),
	libsvn_wc/Makefile.am (1.18), libsvn_wc/checkout-test.sh (1.12,
	milestone-2):

	Patches submitted by Yoshiki Hayashi 
	
	* tests/libsvn_fs/run-fs-tests.sh 
	
	  Change output format to match other make check target.  Always 
	  return 0 since other targets do so.  
	
	* tests/libsvn_wc/Makefile.am 
	
	  (check): Home made check target to avoid using automake's one.  
	
	* tests/libsvn_wc/checkout-test.sh 
	
	  Output what has happened.  cmpilato tweaked this patch to print 
	  'SUCCESS' instead of 'DONE' for consistency with other tests.  

2001-03-02 15:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.22):

	Let's see if this read/write test works. :) 
	
	(stream_to_string):  new helper func.  
	(read_and_write_file):  simplify with above and *uncomment* this
	test. :) 
	(test_funcs):  add this new test.  

2001-03-02 15:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.29):

	Implement the ability to read data from a repos file: 
	
	(svn_fs_file_contents):        implement 
	(txn_body_get_file_contents):  new machinery for above.  
	(file_contents_baton_t):       new machinery for above.  
	
	Also, stop calling open_path in svn_fs_apply_textdelta: 
	
	(txn_body_get_source_stream):  call get_dag instead of open_path.  
	(txdelta_baton_t):  lose parent_path, gain a dag_node_t instead.  

2001-03-02 15:18  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.28):

	* libsvn_fs/tree.c 
	
	  (get_dag): Wrapper function around open_path for those who care only 
	  about the dag_node_t of the found node (the implication here being 
	  that the node must have been found).  
	
	  (node_id_args, txn_body_node_id, svn_fs_node_id): New stuff, 
	  complements of Yoshiki.  Minor tweak to his patch, whereby we make
	  a call to our new open_path() wrapper function, get_dag().  

2001-03-02 14:32  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.66), dag.h (1.31):

	* libsvn_fs/dag.h 
	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_get_node): Renamed from create_node, and exposed to 
	  other FS module components outside of dag.c.  

2001-03-02 13:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.145),
	libsvn_delta/text_delta.c (1.29):

	Convenience routine to push an svn_string_t at txdelta window
	handler.  
	
	* svn_delta.h (svn_txdelta_send_string):  return an svn_error_t.  
	* text_delta.c (svn_txdelta_send_string): implement.  

2001-03-02 11:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.27):

	Implement svn_fs_apply_textdelta().  We're almost ready to put data
	in repository files.  :) 
	
	(svn_fs_apply_textdelta):         implement.  
	(write_to_string):                necessary machinery.  
	(txn_body_get_source_stream):     necessary machinery.  
	(txn_body_write_target_string):   necessary machinery.  
	(window_consumer):                necessary machinery.  (struct
	txdelta_baton_t):         baton used by all machinery.  

2001-03-02 11:38  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.65):

	* libsvn_fs/dag.c 
	
	  (find_dir_entry): Take a NODE-REVISION skel_t instead of a 
	  dag_node_t in which to find the desired entry.  All callers
	  changed.  
	
	  (replace_dir_entry): New helper function.  
	
	  (svn_fs__dag_clone_child): Made this function no longer suck.  

2001-03-02 10:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_fs.h (1.52):

	(svn_fs_apply_textdelta):  augment docstring.  

2001-03-01 18:28  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.21):

	* tests/libsvn_fs/fs-test.c 
	
	  (create_mini_tree_transaction): Updated comment.  
	
	  (create_greek_tree_transaction): New function.  Builds a tree in the 
	  filesystem database to mimic the one used in the svn client XML 
	  tests (you know the one, with all the Greek letter-named files and 
	  such).  

2001-03-01 18:14  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.26):

	* libsvn_fs/tree.c 
	
	  (make_dir_args, txn_body_make_dir): New stuff for making directories 
	  in the filesystem.  
	
	  (svn_fs_make_dir): Changed to use new stuff (above) for making 
	  directories in filesystem.  

2001-03-01 18:11  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.20):

	* tests/libsvn_fs/fs-test.c 
	
	  (create_mini_tree_transaction): New function (adds a file, then a 
	  subdir, then a file *in* that subdir, to the DB).  
	
	  (test_funcs): Added new test func (see above).  

2001-03-01 18:03  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/txn-table.c (1.18):

	* libsvn_fs/txn-table.c 
	
	  (put_txn): kfogel sez: "Prepending means doing things in reverse 
	  order".  Doh! 

2001-03-01 17:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.64):

	(svn_fs__dag_clone_root): Only put the new txn root when necessary.  
	Double doh.  

2001-03-01 17:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.63):

	#include "svn_error.h".  I think this was being included by 
	implication anyway, but it's cleaner to make it explicit.  
	
	(svn_fs__dag_clone_root): Set the txn's new root when done.  Doh.  

2001-03-01 12:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.25):

	Saving work:  beginning implementation of fs's txdelta consumption.  
	
	(svn_fs_apply_text_delta):  skeletal machinery... needs meat.  
	(window_consumer):  same.  
	(consumer_baton_t): same.  

2001-03-01 12:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.167):

	(close_file, close_directory): Use %ld, not %d, to avoid warnings 
	about int versus svn_revnum_t.  

2001-03-01 12:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.88):

	(svn_wc__entries_init): Use %d, not %ld, to avoid silly warning.  

2001-03-01 11:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.144),
	tests/libsvn_fs/fs-test.c (1.19):

	Revise file read/write test case.  
	
	* svn_delta.h (svn_txdelta_from_string):  remove declaration. never
	  mind.  
	(svn_txdelta_send_string):  a better interface instead.  
	
	* fs-test.c (write_and_read_file): use new interface above.  

2001-03-01 01:59   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* PORTING (1.3):

	'Nevermore' quoth the raven.  

2001-03-01 01:56   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/: blupixel.gif (1.2), redpixel.gif (1.2):

	http://burnallgifs.org/ 

2001-03-01 01:55   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/project_status.html (1.8):

	I like *my* bikeshed more of an ecru.  

2001-03-01 01:15   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/tests/libsvn_fs/run-fs-tests.sh (1.3):

	Applied patch from Yoshiki Hayashi 

2001-03-01 00:22   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* PORTING (1.2):

	Looks like a duck, quacks like a Duracell? Must be a pimple.  

2001-02-28 18:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.18):

	(write_and_read_file):  new test.  (feedback?  does this look
	right?) 

2001-02-28 17:22   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: dag.c (1.62), nodes-table.c (1.12):

	* libsvn_fs/structure: Clarify definition of `mutable' flag.  
	* libsvn_fs/dag.c (set_mutable_flag): Use an empty atom as the
	parent node revision ID of a mutable root directory.  
	* libsvn_fs/nodes-table.c (is_valid_flag): Revert previous change
	--- all valid mutable flags are two-element lists.  

2001-02-28 17:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.143):

	(svn_txdelta_from_string):  add details about this func's promise.  

2001-02-28 17:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.142):

	(svn_txdelta_from_string):  new prototype.  (to be written) 

2001-02-28 16:07   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.35):

	Tweak Karl's tweak of the syntax of the "mutable" flag.  

2001-02-28 15:37  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.61):

	* libsvn_fs/dag.c 
	
	  (make_entry): Little edits to comments.  
	
	  (svn_fs__dag_make_copy): Implement this function.  Still has some 
	  todo stuff in it that requires buggin' Jim (or others) for
	  guidance, but as far as I know, the COPY node stuff is all kinda
	  up-in-the-air from a design (and perhaps, necessity) perspective,
	anyway.  

2001-02-28 15:36  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.17):

	* tests/libsvn_fs/fs-test.c 
	
	  (test_funcs): Little compiler warning fix.  The functions now return 
	  svn_error_t *, not int.  Confidence level: 65% 

2001-02-28 15:31   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/validate.c (1.5):

	Dang... the Premature Optimization Gremlins wouldn't leave me
	alone...  
	
	* (svn_fs__is_single_path_component): we don't need strlen(), and
	  strchr() is *way* faster than a while loop.  

2001-02-28 15:25   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_error.h (1.79), tests/TEST-FRAMEWORK
	(1.5), tests/svn_tests_main.c (1.17), tests/libsvn_fs/skel-test.c
	(1.15), tests/libsvn_subr/hashdump-test.c (1.18),
	tests/libsvn_subr/stringtest.c (1.6):

	Change the common test framework to indicate failure by returning a 
	Subversion error.  This means that: 
	- we can use SVN_ERR in the usual way to report a failure whenever a 
	  library call fails, 
	- use svn_handle_error to print out the messages, 
	- set a breakpoint on svn_error_create to stop the process before we 
	  lose the context in which the failure was detected.  
	* tests/TEST-FRAMEWORK: Update documentation.  
	* tests/svn_tests_main.c (test_funcs): This is an array of functions 
	returning Subversion errors, not ints.  
	(do_test_num): Expect a Subversion error, not an int.  Tighten up
	some of the message formatting.  
	* tests/libsvn_fs/skel-test.c (fail): Take printf-style arguments,
	and return an svn_error_t.  All callers fixed.  
	(parse_implicit_length, try_explicit_length, parse_explicit_length, 
	parse_invalid_atoms, parse_list, unparse_implicit_length, 
	unparse_list): Return Subversion errors, not ints.  
	(test_funcs): Adjust to match declaration in `svn_tests_main.c'.  
	* tests/libsvn_subr/hashdump-test.c (check): New function.  
	(test1, test2, test3): Return Subversion errors, not ints.  
	(test_funcs): Adjust to match declaration in `svn_tests_main.c'.  
	* tests/libsvn_subr/stringtest.c (fail): New function.  
	(test1, test2, test3, test4, test5, test6, test7, test8, test9, 
	test10, test11, test12): Return Subversion errors, not ints.  
	(test_funcs): Adjust to match declaration in `svn_tests_main.c'.  
	* include/svn_error.h (SVN_ERR_TEST_FAILED): New error code.  

2001-02-28 15:10   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_subr/svn_error.c (1.55):

	* libsvn_subr/svn_error.c (svn_handle_error): Don't print
	err-&gt;message unless it's non-zero.  In some cases (e.g., Subversion
	errors wrapping APR errors), we can get the message from the error
	code alone.  

2001-02-28 15:09   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_subr/hashdump.c (1.22):

	* libsvn_subr/hashdump.c (svn_hash_write, read_length_line, 
	svn_hash_read): Since we return an apr_status_t, not an svn_error_t, 
	return APR_SUCCESS, not SVN_NO_ERROR.  

2001-02-28 14:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.16):

	Major rewrite of fs automated tests, to fix isolation issues.  
	
	Everything should be smaller and leaner now; each test creates its
	own repository.  Removed all tests of "implementation details";
	we're only testing straight API promises now.  
	
	Also: jimb has changed our testing system so that each automated
	test return an svn_error_t.  This allows us to use the SVN_ERR macro 
	everywhere, and get detailed errors in `make check`'s logfile. 
	(He's about to check this in.) 
	
	(fail):  no longer need this func;  see note above.  If you need an 
	equivalent breakpoint, break on svn_error_create() instead. :) 
	
	(repository):  deleted global name.  
	
	(check_filesystem_root_id):  internal implementation check; no
	longer needed, so we remove it.  
	
	(create_fs_and_repos):  new factorized helper func.  
	
	(create_berkeley_filesystem):   call helper func.  
	(open_berkeley_filesystem):  call helper func.  
	(fetch_youngest_rev):  broke this out into a new standalone test.  
	(trivial_transaction): call helper func.  
	(reopen_trivial_transaction): call helper func, and reopen *by name*
	now.  
	(create_file_transaction): call helper func.  
	(verify_txn_list):  rename of (list_live_transactions);  better list
	testing.  

2001-02-28 14:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.78):

	Revert previous change.  I was wrong: dag.c is complaining about 
	SVN_ERR_FS_NOT_SINGLE_PATH_COMPONENT, but that error is declared
	here, so dag.c must be smoking something else.  

2001-02-28 14:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.77):

	(svn_errno_t): Add SVN_ERR_FS_NOT_SINGLE_PATH_COMPONENT.  It was
	already being used in dag.c, someone probably just forgot to add it
	here.  

2001-02-28 14:09  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/validate.c (1.4):

	* libsvn_fs/validate.c 
	
	  (svn_fs__is_single_path_component): Oops!  Bug fix! 

2001-02-28 14:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.19):

	#if out whole file till rest of fs is done 

2001-02-28 13:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/TEST-FRAMEWORK (1.4):

	New section "What not to test" (inspired by conversation with JimB).  

2001-02-28 13:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.7):

	Bump last-updated date.  

2001-02-28 13:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.6):

	Composer, pianist, and musical theorist, Easley Blackwood's career
	has been consistent only in its seeming contradictions and strong 
	individuality.  Blackwood is Professor Emeritus at the University of 
	Chicago, where he has taught since 1958.  He received his musical 
	training from such legendary figures as Olivier Messiaen, Paul 
	Hindemith (at Yale, where Blackwood earned his Bachelor's and
	Master's degrees in 1953 and 1954), and Nadia Boulanger, Blackwood's
	return to tonal composition since 1981 stems from his groundbreaking
	research into the properties of microtonal tunings and his
	decades-long study of traditional harmony.  

2001-02-28 13:23  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_error.h (1.76), libsvn_fs/dag.c (1.60),
	libsvn_fs/validate.c (1.3), libsvn_fs/validate.h (1.2):

	* include/svn_error.h 
	
	  (SVN_ERR_FS_NOT_SINGLE_PATH_COMPONENT): New error.  
	
	* libsvn_fs/dag.c 
	
	  (add_new_entry, find_dir_entry): Updated docstring.  
	
	  (svn_fs__dag_clone_child, svn_fs__dag_delete, make_entry, 
	  svn_fs__dag_link, svn_fs__dag_open, svn_fs__dag_make_copy): Making 
	  good on the promise that we'll only react if NAME is a valid
	  single path component.  
	
	* libsvn_fs/validate.c 
	
	  (svn_fs__is_single_path_component): New function.  
	
	* libsvn_fs/validate.h 
	
	  (svn_fs__is_single_path_component): New prototype.  

2001-02-28 13:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_status.html (1.5):

	Reorder sections, tweak a few wordings, fill in "Last Week's 
	Activities" section.  

2001-02-28 11:34  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.15):

	* tests/libsvn_fs/fs-test.c 
	
	  (common_test_prologue): New helper function for opening filesystem 
	  and init'ing an FS object.  
	
	  (open_berkeley_filesystem, trivial_transaction,
	  reopen_trivial_transaction, create_file_transaction,
	  list_live_transactions): Changed to use new helper 
	common_test_prologue.  

2001-02-28 09:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: dbt.c (1.17), nodes-table.c (1.11),
	rev-table.c (1.6), txn-table.c (1.17):

	* libsvn_fs/txn-table.c (allocate_txn_id): Add missing call to 
	svn_fs__track_dbt! 
	
	Pair calls to svn_fs__track_dbt more closely with the corresponding 
	calls to svn_fs__result_dbt, to reduce the likelihood that people
	will make changes that leak storage.  
	* libsvn_fs/nodes-table.c (svn_fs__get_rep, svn_fs__new_node_id):
	Move call to svn_fs__track_dbt immediately after the Berkeley DB
	operation; it's fine to call svn_fs__track_dbt on a DBT with a null
	data pointer.  
	* libsvn_fs/rev-table.c (svn_fs__get_rev): Same.  
	* libsvn_fs/txn-table.c (svn_fs__get_txn): Same.  
	
	* libsvn_fs/dbt.c (svn_fs__recno_dbt): Move this out from between 
	svn_fs__result_dbt and svn_fs__track_dbt; those are meant to be used 
	together.  

2001-02-28 09:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dbt.h (1.17):

	* libsvn_fs/dbt.h: Formatting tweak.  Don't put svn_fs__recno_dbt 
	between svn_fs__result_dbt and svn_fs__track_dbt; the latter two are 
	supposed to be used as a pair.  

2001-02-28 09:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/nodes-table.c (1.10):

	Doc fixes.  

2001-02-28 01:53  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.59):

	* libsvn_fs/dag.c 
	
	  (add_new_entry): New helper function for connecting a parent node 
	  with a new entry.  This code was ganked from make_entry, and a 
	  bug-fix was made therein (I was previously tacking the new ENTRY 
	  skel into the wrong place in the parent's NODE-REVISION).  This
	  bug fix preserves the criteria for tonight's earlier beer
	  consumption -- without it, the beer would have been a premature
	bonus.  
	
	  (make_entry): Added some error-checking, and modified to use new 
	  helper add_new_entry.  
	
	  (svn_fs__dag_link): Implemented this function (does error-checking, 
	  then calls new helper add_new_entry).  
	
	  (svn_fs__dag_rename): Added stub for this function.  
	
	  (svn_fs__dag_make_copy): Began work on this implementation.  Okay, 
	  so not much is done, yet.  Geez, everybody's a critic...  

2001-02-27 20:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_status.html (1.4):

	Increment fs status bar.  

2001-02-27 20:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_fs/dag.c (1.58), libsvn_fs/nodes-table.c
	(1.9), tests/libsvn_fs/fs-test.c (1.14):

	Bugfixes on the path to beer.  (Karl, why are we still here??) 
	
	* nodes-table.c (is_valid_flag): one-item lists are valid flags too, 
	   sometimes, e.g. (mutable). see the most recent commit to the BNF
	   in `structure'.  
	
	* dag.c (make_entry): dup the parent skel for safety.  Also fix the 
	  append() which was...... wrong.  But moving on.  
	
	* fs-test.c (create_file_transaction):  appropriate first file name.
	:) 

2001-02-27 19:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.57):

	(set_mutable_flag): New function.  
	(svn_fs__dag_clone_root): Use above to make the new node mutable.  

2001-02-27 18:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/structure (1.34):

	(PARENT-ID): Allow the absent id, because root nodes have no parent.  

2001-02-27 17:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.56):

	(create_node): Don't take the node's content as an argument, deduce
	it from the other arguments instead.  Take a trail instead of a
	pool, since we need a trail for get_node_revision, and all callers
	have one handy anyway.  Sanity check arguments using assert()
	instead of the full run-time error system.  All callers changed.  
	
	(find_dir_entry): Promise that the returned entry is well-formed,
	and that it is allocated in either PARENT-&gt;pool or TRAIL-&gt;pool.  
	
	(make_entry): Do sanity checks before any real work.  
	
	(svn_fs__dag_open): More helpful error message.  
	
	(svn_fs__dag_revision_root, svn_fs__dag_txn_root, 
	svn_fs__dag_clone_child, svn_fs__dag_clone_root, svn_fs__dag_open): 
	Simplify.  
	
	(node_is_kind_p): Inspect header correctly.  (Ben found this bug.) 
	
	(cache_node_revision, uncache_node_revision, get_node_revision, 
	set_node_revision, has_mutable_flag): Move earlier in the file.  

2001-02-27 17:30   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/trail.h (1.6):

	Doc fixes --- give a general overview of how trails and 
	svn_fs__retry_txn are supposed to be used.  

2001-02-27 16:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/id.c (1.16):

	(svn_fs_parse_id):  bugfix:  make this func use malloc if no pool is 
	given, as described in its documentation.  

2001-02-27 16:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.55):

	(svn_fs__dag_dir_entries):  create stub so binaries can still link
	with fs 

2001-02-27 16:24  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.13):

	* tests/libsvn_fs/fs-test.c 
	
	  (create_file_transaction): New function--a test, in fact--that is 
	  *NOT EXPECTED TO WORK AT THIS TIME!!* 

2001-02-27 16:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.54):

	(svn_fs__dag_get_proplist):  simplify.  :) 

2001-02-27 16:15   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.24):

	* libsvn_fs/tree.c (struct dir_entries_args, txn_body_dir_entries): 
	New type; new function.  
	(svn_fs_dir_entries): Fill in this definition.  

2001-02-27 16:03   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.30):

	Doc fix.  

2001-02-27 15:58   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.29):

	* libsvn_fs/dag.h (svn_fs__dag_get_proplist): Doc fix.  
	
	* libsvn_fs/dag.h (svn_fs__dag_dir_entries): New function.  

2001-02-27 15:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.53):

	(file_content_baton_t):  finish comment. :) 

2001-02-27 15:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.52):

	(svn_fs__dag_get_contents):  implement.  
	(read_file_contents):  local helper func for above.  
	(file_content_baton_t):  local helper struct for above.  

2001-02-27 15:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.79):

	Today I had a Biggie.  Usually I just have a small, and refill.  Why 
	pay more?  But today I needed a Biggie inside me.  Some days, I
	guess, are like that.  Only a biggie will do.  You wake up and you
	know: today I will get a Biggie and I will put it inside me and I
	will feel better.  One time I saw a guy with three Biggies at once. 
	One wonders not about him but about what it is that holds us back.  

2001-02-27 14:00   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/subversion-diagram.png (1.2, milestone-2):

	Trying this again.  

2001-02-27 13:29   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/: project_status.html (1.3), subversion-diagram.gif (1.2),
	subversion-diagram.png (1.1):

	Duh--use png. What am I smoking crack here? 

2001-02-27 12:55   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* www/: project_status.html (1.2), subversion-diagram.gif (1.1):

	Added pretty graphical diagram. Down with ascii art\! 

2001-02-27 11:48   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.28):

	* libsvn_fs/dag.h (svn_fs__dag_check_mutable): Doc fix.  
	
	* libsvn_fs/dag.h (svn_fs__dag_link): Doc fix.  
	(svn_fs__dag_rename): New function.  

2001-02-27 10:54  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: TODO (1.18), dag.c (1.51), dag.h (1.27),
	tree.c (1.23):

	BIG PHREAKIN' CHANGE - STILL A WORK IN PROGRESS 
	
	* libsvn_fs/TODO 
	
	  Um...some to-do was to-done today.  Perhaps some more todo will be 
	  to-done tomorrow.  
	
	* libsvn_fs/dag.h 
	
	  (svn_fs__dag_check_mutable): Renamed from svn_fs__dag_is_mutable, 
	  this function now takes a trail argument, and calls 
	  get_node_revision to ensure having an up-to-date NODE-REVISION
	  skel to pass into has_mutable_flag().  It returns an svn_error_t
	  (hence the name change from something that should return a boolean
	  value to something that should *populate* a boolean argument.  
	
	* libsvn_fs/dag.c 
	
	  (dag_node_kind_t): New enum for representing node kinds (file, dir, 
	  copy, etc.) 
	
	  (dag_node_t): Added 'kind' member for tracking node's permanent kind 
	  (file, dir, copy, etc.).  Also updated docstring regarding 
	  node-revisions.  
	
	  (node_is_kind_p): Takes NODE-REVISION skel now, node dag_node_t.  
	
	  (create_node): New constructor function for dag_node_t's 
	
	  (svn_fs__dag_is_file, svn_fs__dag_is_directory, 
	  svn_fs__dag_is_copy): Converted these into the trivial functions 
	  they now are thanks to the caching of the node 'kind' in the 
	  dag_node_t; 
	
	  (has_mutable_flag): Updated docstring to warn about function's use 
	  (specifically, if you don't have a fresh NODE-REVISION in hand, 
	  don't use this helper function!! 
	
	  (get_node_revision, set_node_revision): Renamed from 
	  get_node_revision_cached and set_node_revision_cached,
	  respectively.  
	
	  (svn_fs__dag_check_mutable): Renamed from svn_fs__dag_is_mutable, 
	  this function now takes a trail argument, and calls 
	  get_node_revision to ensure having an up-to-date NODE-REVISION
	  skel to pass into has_mutable_flag().  It returns an svn_error_t
	  (hence the name change from something that should return a boolean
	  value to something that should *populate* a boolean argument.  
	
	  (find_dir_entry): Now takes a trail_t, and uses get_node_revision to 
	  retrieve a fresh NODE-REVISION before going to work.  Also,
	  returns an svn_error_t and populates a skel_t * (with an ENTRY
	  list) instead of returning the skel_t *.  Also, wrote an actual
	  docstring for this function.  
	
	  (svn_fs__dag_get_proplist, svn_fs__dag_set_proplist, 
	  svn_fs__dag_set_contents): Now uses get_node_revision to retrieve
	  a fresh NODE-REVISION before going to work.  
	
	  (svn_fs__dag_revision_root, svn_fs__dag_txn_root, 
	  svn_fs__dag_clone_root, svn_fs__dag_open, make_entry): Use the new 
	  fab create_node function! 
	
	  (svn_fs__dag_clone_child, svn_fs__dag_delete): TODO - Make this not
	  SUCK! 
	
	* libsvn_fs/tree.c 
	
	  (make_path_mutable): Updated used of svn_fs__dag_is_mutable (now 
	  svn_fs__dag_check_mutable).  

2001-02-27 10:54   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_nav.html (1.3):

	Add status page to sidebar.  

2001-02-27 10:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/: blupixel.gif (1.1), index.html (1.19), project_status.html
	(1.1), redpixel.gif (1.1):

	* project_status.html:  new status webpage.  
	* redpixel.gif, blupixel.gif:  new files.  
	* index.html:  add link to status page, fix events.  

2001-02-27 09:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.17):

	Categorize.  Maybe it would be more useful to prioritize this.  

2001-02-27 09:20   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/trail.c (1.7):

	* libsvn_fs/trail.c (begin_trail): The trail's pool must be a
	subpool of POOL, as described in the documentation for
	svn_fs__retry_txn.  

2001-02-27 09:16   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: txn-table.c (1.16), txn-table.h (1.9):

	* libsvn_fs/txn-table.c (svn_fs__delete_txn): New function.  
	* libsvn_fs/txn-table.h (svn_fs__delete_txn): New declaration.  
	(Thanks to Yoshiki Hayashi.) 

2001-02-27 08:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.12):

	* tests/libsvn_fs/fs-test.c (open_berkeley_filesystem): Follow
	interface change of svn_fs_youngest_rev.  (Thanks to Yoshiki
	Hayashi.) 

2001-02-27 08:45   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.50):

	* libsvn_fs/dag.c (find_dir_entry): Fix typo in entry list
	traversal.  (Thanks to Yoshiki Hayashi.) 

2001-02-26 22:41   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/libsvn_fs/dag.h (1.26):

	Compile time error pointed out by Yoshiki Hayashi 

2001-02-26 18:53   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* PORTING (1.1):

	Incorporated several reports from dev list to create this doc for
	tracking builds.  

2001-02-26 18:52   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.49):

	* libsvn_fs/dag.c (svn_fs__dag_clone_child): Note bug.  

2001-02-26 18:44   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.48):

	* libsvn_fs/dag.c (svn_fs__dag_set_proplist): Note dangerous code.  

2001-02-26 18:39   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.47):

	* libsvn_fs/dag.c (has_mutable_flag): Don't assume that every flag
	is a list.  At the moment, they are, but there's no reason they must
	be.  
	
	* libsvn_fs/dag.c (has_mutable_flag): Minor style tweak: use `for'
	for linked list traversal.  

2001-02-26 18:35   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.46):

	* libsvn_fs/dag.c (node_is_kind_p): Unredund.  

2001-02-26 18:35   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.45):

	* libsvn_fs/dag.c (find_dir_entry): Minor style tweak: use `for' for 
	linked list traversal.  

2001-02-26 17:40   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.51), libsvn_fs/rev-table.c
	(1.5):

	* libsvn_fs/rev-table.c (svn_fs_youngest_rev): Add a `pool' argument
	--- the caller should be able to say where temporary allocation
	should happen.  Also, don't touch *youngest_p unless we're going to
	return SVN_NO_ERROR --- functions which return results by reference
	should leave their referents untouched unless they succeed.  
	* include/svn_fs.h (svn_fs_youngest_rev): Fix declaration.  
	
	* libsvn_fs/rev-table.c (txn_body_youngest_rev): Use 
	svn_fs__recno_dbt, instead of using svn_fs__result_dbt and 
	svn_fs__track_dbt and casting pointers to get the recno.  
	
	* libsvn_fs/rev-table.c (txn_body_youngest_rev): Formatting tweaks.  
	
	* include/svn_fs.h: Doc fix.  

2001-02-26 17:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.h (1.25):

	* libsvn_fs/dag.h 
	
	  (svn_fs__dag_link): Updated docstring to more adequately describe 
	  the intent of this function, "thus increasing shareholder value." 

2001-02-26 17:01  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/TODO (1.16):

	Somotodo 

2001-02-26 15:09   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.22):

	* libsvn_fs/tree.c (make_path_mutable): Remove call to
	svn_fs__dag_close.  (Thanks to Yoshiki Hayashi.) 

2001-02-26 12:04   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_error.h (1.75), libsvn_fs/dag.c (1.44):

	When we detect an error caused by an inconsistency in the
	filesystem's own code, don't return an error --- the user can't do
	anything about it, and you may not get a chance to reproduce the
	bug.  Instead, call `abort', which gives you a core dump you can
	debug.  (This explanation should go somewhere --- HACKING?) 
	* include/svn_error.h (SVN_ERR_FS_MALFORMED_SKEL): Delete error.  
	* libsvn_fs/dag.c (malformed_proplist_error): Delete.  
	(svn_fs__dag_set_proplist): Call `abort', not
	`malformed_proplist_error'.  

2001-02-26 12:00   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.15):

	To put Christian principles into practice through programs that
	build healthy Spirit, Mind, and Body for all people, regardless of
	race, creed, sex, ability or economic status.  

2001-02-26 11:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.43):

	* libsvn_fs/dag.c (dag_node_t): Rename `contents' member to 
	`node_revision'.  There are new rules for accessing this member, and 
	this makes sure any code referring to `contents' will break.  
	(uncache_node_revision, cache_node_revision,
	get_node_revision_cached, set_node_revision_cached): New functions.  
	
	* libsvn_fs/dag.c (svn_fs__dag_dup): No need to copy the FS
	structure.  Leave the cache zero, to avoid dealing with pool
	complexities.  

2001-02-26 11:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_fs.h (1.50), libsvn_fs/dag.c (1.42),
	libsvn_fs/fs.h (1.18), libsvn_fs/rev-table.c (1.4), libsvn_fs/txn.h
	(1.9), tests/TEST-FRAMEWORK (1.3), tests/libsvn_fs/fs-test.c
	(1.11):

	Bunch of patches from Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt;.  
	
	* svn_fs.h (svn_fs_abort_txn): docfix 
	
	* TEST-FRAMEWORK: docfix 
	
	* fs.h (struct svn_fs_t): remove DB *clones.  
	
	* txn.h (svn_fs__create_transactions, svn_fs__open_transactions): 
	  removed... these functions do the same thing as 
	  svn_fs__open_transactions_table with different signature.  
	
	* rev-table.c (txn_body_youngest_rev): new function.  
	  (svn_fs_youngest_rev): new function.  
	
	* subversion/tests/libsvn_fs/fs-test.c (open_berkeley_filesystem): 
	  test if youngest rev equals 0.  
	
	* dag.c (svn_fs__dag_txn_root): new function.  
	
	  ((svn_fs__dag_dup):  fix typo.  :)) 

2001-02-26 11:34   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.24):

	Doc fix.  

2001-02-26 10:56  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.41):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_dup): Make this function use fresh allocations for all 
	  pieces of the dag_node_t.  

2001-02-26 10:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/Makefile.am (1.36):

	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Remove `node.h',
	which doesn't exist any more.  

2001-02-24 16:39  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.40):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_clone_child): How many times will I re-work this 
	  function? 
	
	  (svn_fs__dag_dup): Some temporary gutz for this one, with comments 
	  and todos for researching this function's intent (Jim B., are you 
	  there?) 
	
	  (svn_fs__dag_open): Implemented this function.  

2001-02-24 03:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/: txn.c (1.28), txn.h (1.8):

	* txn.c (svn_fs__txn_id): New function.  
	
	Submitted by: Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt; 

2001-02-24 03:11   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/node-rev.c (1.8):

	sizeof() was returning 9 (the null-term), but should return 8. fix
	it.  [ bug found by Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt; ] 

2001-02-24 03:09   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.36), configure.in (1.66):

	* autogen.sh: Pass --foreign to automake so that it won't complain
	    missing ChangeLog 
	* configure.in: Fix variable name to print client only build warning 
	    correctly.  
	
	Submitted by: Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt; 

2001-02-23 18:31   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/Makefile.am (1.24):

	subversion/Makefile.am (DIST_SUBDIRS): New variable, so that `make 
	TAGS' will index libsvn_fs, and others.  

2001-02-23 18:25   Jim Blandy &lt;jimb@redhat.com&gt;

	* autogen.sh (1.35):

	Check for APR and Neon before running any commands.  Running
	automake takes a while on my little Pentium 166.  

2001-02-23 17:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.74), libsvn_fs/dag.c (1.39):

	It's life, jimb, but not as we know it.  
	
	* dag.c (svn_fs__dag_set_contents):  implement.  
	* svn_error.c (SVN_ERR_FS_NOT_FILE): new error type.  

2001-02-23 16:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.38):

	(svn_fs__dag_revision_root):  gee, is this routine *really* so easy?
	:) 

2001-02-23 16:06  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.37):

	Just claiming some territory here, my personal todo list for the
	near future.  

2001-02-23 13:16  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.36):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_clone_child): How now, Brown Cow.  Now this sow has 
	  bowels.  
	
	  (make_entry): Added some error returns, renamed an internval 
	  variable or two.  Ya know, the same ol' same ol'.  

2001-02-23 07:10   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.34):

	fix up some of the dependencies between the various config
	components. also try to deal with automake's insistence on certain
	make dependencies.  

2001-02-23 05:24   Greg Stein &lt;gstein@lyra.org&gt;

	* tools/check-license.py (1.4, milestone-2),
	subversion/tests/libsvn_subr/.cvsignore (1.6),
	subversion/tests/libsvn_subr/target-test.c (1.2):

	- add the (missing) license header to target-test.c 
	- add target-test to .cvsignore 
	- update check-license.py to recognize copyrights for the year 2000,
	  or 2001, or 2000-2001 
	  (and let Karl determine policy for updating the values across SVN) 

2001-02-23 00:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.73), libsvn_fs/dag.c (1.35):

	Implement __dag_delete.  
	
	* dag.c (has_mutable_flag):  break this code out of
	  svn_fs__dag_is_mutable.  
	(svn_fs__dag_is_mutable):  call has_mutable_flag.  
	  (svn_fs__dag_delete):  implement.  
	
	* svn_error.c (SVN_ERR_FS_DIR_NOT_EMPTY, SVN_ERR_FS_NO_SUCH_ENTRY): 
	  new error values.  

2001-02-22 17:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_error.h (1.72):

	Doh!  Committed too far down.  :) 
	
	* svn_error.h (SVN_ERR_FS_MALFORMED_SKEL):  new error value.  

2001-02-22 17:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.34):

	
	* dag.c (node_is_kind_p, svn_fs__dag_is_mutable, 
	  svn_fs__dag_get_proplist): add todo comment about impending 
	  dag_node_t change.   (want!  want!) 
	
	  (node_is_kind_p): simplify with svn_fs__matches_atom().  
	
	  (svn_fs__dag_set_proplist):  implement.  
	
	  (malformed_proplist_error):  helper for above.  
	
	* svn_error.h (SVN_ERR_FS_MALFORMED_SKEL):  new error value.  

2001-02-22 17:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/node-rev.h (1.7):

	For more than half a century, interferometry at radio wavelengths
	has succeeded brilliantly, mapping the structures of distant
	galaxies and quasars by their radio emissions.  

2001-02-22 16:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.18):

	(handle_txdelta_args, txn_body_handle_txdelta, 
	txn_body_handle_window): New struct and function helpers for 
	apply_textdelta.  
	(apply_textdelta): Start to implement.  
	(dir_baton, file_baton): New base_path fields; also, move and
	document the base_rev that was already here.  
	(replace_file, replace_dir): Set base_revision in the returned
	baton.  
	(add_file, add_dir): Same, plus set base_path.  

2001-02-22 13:00  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/skel.c (1.20):

	* libsvn_fs/skel.c 
	
	  (svn_fs__prepend, svn_fs__append): These functions now abort() if 
	  the LIST_SKEL arguments are not actually lists.  

2001-02-22 12:59  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.33), dag.h (1.23):

	* libsvn_fs/dag.h 
	
	  (svn_fs__dag_find_dir_entry): Removed this prototype (the function 
	  is now going undercover! 
	
	* libsvn_fs/dag.c 
	
	  (find_dir_entry): Renamed from svn_fs__dag_find_dir_entry.  Also: 
	  Bug fix!  Misread the language in the FS structure document 
	  regarding the construction of NODE-REVISION skels.  Little helper 
	  functions like this are of no use if they don't have a friggin'
	  clue what they're doing.  
	
	  (make_entry, svn_fs__dag_make_file, svn_fs__dag_make_dir): Moved the 
	  guts from the recently implement svn_fs__dag_make_file into a new 
	  helper function, make_entry, that now takes a boolean IS_DIR 
	  argument.  Why?  Because that made the implementation of 
	  svn_fs__dag_make_dir a cinch.  Now, svn_fs__dag_make_file and 
	  svn_fs__dag_make_dir just call the helper make_entry, which does 
	  slightly different things based on the value of IS_DIR.  

2001-02-22 12:03  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.32), dag.h (1.22):

	* libsvn_fs/dag.h 
	
	  (svn_fs__dag_find_dir_entry): New function prototype.  
	
	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_find_dir_entry): New function.  
	
	  (svn_fs__dag_make_file): Fixed this so that it will not attempt to 
	  add a new file entry to the parent directory if the parent already 
	  has an entry of the same name.  

2001-02-22 11:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.21):

	(free_parent_path): Removed, and removed all calls.  This was the
	only caller of the now-defunct svn_fs__dag_close.  We're not freeing
	at this granularity anymore.  

2001-02-22 11:57  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* www/project_members.html (1.10):

	Added myself to the members_list.  

2001-02-22 11:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/node-rev.c (1.7):

	#include &lt;string.h&gt;, for memset.  

2001-02-22 11:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.31):

	Bugfixes from GregS.  Thanks, Greg. :) 
	
	(node_is_kind_p):  use correct length in memcmp().  
	(svn_fs__dag_is_mutable):  use svn_fs__matches_atom().  

2001-02-22 10:20  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.30):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_make_file): Itty bitty docstring fix.  

2001-02-22 08:59   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.29):

	Doc fix from Yoshiki Hayashi.  

2001-02-22 08:56   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.28):

	* libsvn_fs/dag.c (struct dag_node_t): Doc fixes.  

2001-02-21 21:17   Greg Stein &lt;gstein@lyra.org&gt;

	* doc/future.texi (1.11, milestone-2):

	correct our discussion of Berkeley DB and SQL database.  

2001-02-21 21:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.33):

	* libsvn_fs/structure: More doc fixes from Yoshiki Hayashi.  

2001-02-21 17:28  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.27):

	* libsvn_fs/dag.c 
	
	  (svn_fs__dag_make_file): Gave this function some gutz.  

2001-02-21 17:26  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/: skel.c (1.19), skel.h (1.15):

	* libsvn_fs/skel.h 
	* libsvn_fs/skel.c 
	
	  (svn_fs__append): New function.  Similar to svn_fs__prepend, 
	  yet...different.  

2001-02-21 17:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.26):

	(svn_fs__dag_get_proplist):  implement.  

2001-02-21 16:03   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: trail.c (1.6), trail.h (1.5):

	Allow trail users to register functions to be run whenever the trail 
	completes, either successfully or unsuccessfully.  
	* libsvn_fs/trail.c (struct undo): New field, `when'.  
	(abort_trail): Only invoke actions marked to run on failure.  
	(commit_trail): New function.  
	(svn_fs__retry_txn): Call commit_trail instead of calling txn_commit 
	ourselves.  
	(record_undo): New function, containing old guts of
	svn_fs__record_undo, for use by both svn_fs__record_undo and
	svn_fs__record_completion.  
	(svn_fs__record_undo): Invoke record_undo.  
	(svn_fs__record_completion): New function.  
	* libsvn_fs/trail.h (svn_fs__record_undo): Doc fix.  
	(svn_fs__record_completion): New declaration.  
	
	* libsvn_fs/trail.c (begin_trail): Use `apr_pcalloc' instead of 
	`apr_palloc', just because.  

2001-02-21 15:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.25):

	
	(svn_fs__dag_is_mutable):  implement.  

2001-02-21 14:22   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.24):

	Act II, Scene 7: Recognizing that he is outnumbered, Gesualdo exits, 
	vowing to leave no nit unpicked.  (Aria: ``Osso pichi'') 
	* libsvn_fs/dag.c (svn_fs__dag_clone_root): No need to call 
	`svn_fs__get_node_revision' if we just cloned the root.  Doc fixes.  

2001-02-21 13:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.23):

	* libsvn_fs/dag.c (svn_fs__dag_clone_root): Use SVN_ERR.  

2001-02-21 11:29   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.22):

	* libsvn_fs/dag.c (struct dag_node_t): Doc fixes.  
	(txn_body_dag_init_fs): Renamed from dag_init_fs.  Use 
	svn_fs__put_node_revision to create the initial root directory; let 
	node-rev.h take care of choosing representations.  Remove extraneous 
	spaces from revision skel.  
	(svn_fs__dag_init_fs): Update for renaming above.  

2001-02-21 11:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.21), dag.h (1.21):

	
	(svn_fs__dag_close): removed for now.  we're not currently worried 
	about freeing memory at the resolution of individual dag nodes.  
	
	(node_is_kind_p, svn_fs__dag_is_file, svn_fs__dag_is_dir, 
	svn_fs__dag_is_copy):  implement.  

2001-02-21 10:58   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/Makefile.am (1.35):

	* libsvn_fs/Makefile.am: Doc fix: file.[ch], revision.[ch] are no
	longer waiting to be added back into the build.  They're completely
	deleted.  

2001-02-21 10:57   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: revision.c (1.10), revision.h (1.5):

	* libsvn_fs/revision.c, libsvn_fs/revision.h: Deleted; this stuff is 
	handled by tree.c now.  

2001-02-21 10:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/file.h (1.10):

	* libsvn_fs/file.h: Deleted.  We don't have a file.c module any
	more.  

2001-02-21 10:52   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/node-rev.c (1.6):

	* libsvn_fs/node-rev.c: #include "nodes-table.h".  
	
	* libsvn_fs/node-rev.c (svn_fs__stable_node): Trivial
	implementation, for our current non-deltifying situation.  

2001-02-21 10:47   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/node-rev.c (1.5):

	* libsvn_fs/node-rev.c: Finally complete the reorganization of the 
	mid-level node management stuff.  Most of the things in this file
	have been segregated into nodes-table.c.  This file will become
	fatter when we actually do deltification, or split file contents
	into a separate table.  
	(make_nodes, get_representation_skel, put_representation_skel, 
	new_node_id, last_key_before, new_successor_id): Deleted.  
	(svn_fs__get_node_revision): Call `svn_fs__get_rep', from 
	nodes-table.h, instead of `get_representation_skel'.  
	(svn_fs__put_node_revision): Remove interface explanation; this is a 
	public function, described in the interface file.  Don't rely on 
	automatic array initialization to construct the representation skel;
	I think that's a GCC extension.  Instead, construct the skel
	explicitly.  Call `svn_fs__put_rep', from nodes-table.h, instead of 
	`put_representation_skel'.  
	(svn_fs__create_node): Call `svn_fs__put_node_revision, defined 
	elsewhere in this file, instead of `put_representation_skel'.  Not 
	only does the latter not exist, but it's the wrong function ---
	we're passing it a NODE-REVISION, not a REPRESENTATION.  
	(svn_fs__create_successor): Same.  And call
	`svn_fs__new_successor_id' from nodes-table.h, not
	`new_successor_id'.  

2001-02-21 10:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.17):

	(replace_root): Improve comment by using Jim's suggested wording.  
	(change_prop_args, txn_body_change_prop): New baton/func txn pair.  
	(change_file_prop, change_dir_prop): Implement using above.  

2001-02-21 10:38   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/nodes-table.c (1.8):

	* libsvn_fs/nodes-table.c (svn_fs__new_successor_id): When
	allocating space for the successor ID, there's no need to multiply
	the expected length of the ID by the *square* of the size of an ID. 
	(What kind of dimension is a square byte, anyway?) 

2001-02-21 09:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/editor.c (1.16):

	* libsvn_fs/editor.c: Use the SVN_ERR macro throughout, for 
	consistency with the rest of the filesystem code.  
	(txn_body_clone_root, replace_root, txn_body_delete, delete_entry, 
	txn_body_add_directory, add_directory, txn_body_replace_directory, 
	replace_directory, txn_body_add_file, add_file,
	txn_body_replace_file, replace_file, close_edit): Use SVN_ERR.  
	
	* libsvn_fs/editor.c (close_directory, close_file): Doc fixes.  
	
	* libsvn_fs/editor.c (struct edit_baton, struct dir_baton, struct 
	file_baton): Doc fixes.  

2001-02-21 09:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.71):

	Doc fix.  

2001-02-21 08:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.20):

	P.P.S. You will not be billed for your gift until after January 1.  

2001-02-21 08:50   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/node-rev.h (1.6):

	We are reserving a teacher's time for you, so if you can not keep
	this appointment, please telephone me.  

2001-02-20 22:49  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/: compose_editors.c (1.14), xml_parse.c
	(1.150):

	* libsvn_delta/compose_editors.c 
	* libsvn_delta/xml_parse.c 
	
	  Removed unnecessary sanity checks that preceded the use of editor 
	  functions since 1) all editors should be created using the default 
	  editor method, and 2) the default editor should have non-NULL 
	  routines for all functions available via the editor.  

2001-02-20 18:58   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_subr/svn_error.c (1.54):

	* svn_error.c (svn_error_create): Use apr_pstrdup to dup the
	message.  

2001-02-20 18:52   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/tests/libsvn_subr/target-test.sh (1.2):

	if ! ... is not portable.  

2001-02-20 18:40   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_subr/svn_error.c (1.53):

	Fix non-portable use of 'va_list' argument.  
	
	* svn_error.c (make_error_internal): Don't set the 'message' field 
	of the error object here.  (svn_error_create, svn_error_createf):
	Set it here instead.  

2001-02-20 18:21   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_subr/svn_error.c (1.52):

	* svn_error.c (abort_on_pool_failure): Prevent compiler warning on 
	Tru64.  

2001-02-20 17:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.20):

	(svn_fs__dag_get_fs): another tricky implementation.  

2001-02-20 17:22   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/path.c (1.32):

	(svn_path_is_empty): Construct current dir correctly.  
	
	Submitted by: Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt; 

2001-02-20 16:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: node-rev.c (1.4), nodes-table.c (1.7),
	rev-table.c (1.3), revision.c (1.9), skel.c (1.18), skel.h (1.14),
	txn-table.c (1.15):

	(svn_fs__matches_atom): New name for svn_fs__is_atom; because it 
	doesn't merely test for atomness, it tests whether the skel is an
	atom and matches a particular string.  [I kept getting confused.
	:-)] 

2001-02-20 16:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.19):

	(svn_fs__dag_get_id):  implement difficult func. ;) 

2001-02-20 16:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.15):

	(txn_body_replace_file): New func.  
	(replace_file): Implement using above.  

2001-02-20 15:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.14):

	(txn_body_replace_directory): Implemented.  

2001-02-20 15:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.13):

	(add_repl_args): Replaces add_args, since useful for replaces too.  
	(txn_body_replace_directory): New func, still incomplete.  
	(replace_directory): Implement using above.  

2001-02-20 15:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.h (1.19):

	(svn_fs__dag_txn_root): Change doc to reflect presumed semantics.  

2001-02-20 15:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.12):

	Oops, remove noncompiling code from last checkin.  

2001-02-20 15:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.18), editor.c (1.11), node-rev.h
	(1.5):

	(txn_body_clone_root): New name for clone_root, same motivation as 
	similar recent change.  
	
	Also, added some comments about possibly missing functionality.  

2001-02-20 14:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.10):

	Greg Stein noticed that the fs editor should be consistent with
	Jim's naming convention for transaction helpers: 
	
	(delete_args, txn_body_delete): New names for deletion_baton and 
	delete_name_in_node, respectively.  
	
	(add_args, txn_body_add_directory, txn_body_add_file): New names for 
	add_baton, add_dir_in_node, add_file_in_node, respectively.  
	
	All callers changed.  

2001-02-20 10:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/track_editor.c (1.6):

	Upgrade bikeshed exterior to mauve, as was decided by the dead horse 
	committee.  
	
	*  s/long int/svn_revnum_t *  (add_directory): use copyfrom_* * 
	(replace_directory, replace_file): use base_revision *  (add_file):
	use copy_* 

2001-02-20 03:30   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.65):

	RUN_SUBDIR_CONFIG_NOW -&gt; APR_SUBDIR_CONFIG 

2001-02-19 21:52   Greg Stein &lt;gstein@lyra.org&gt;

	* AUTHORS (1.11, milestone-2):

	"My bologna has a first name, it's K-E-V-I-N ...." 

2001-02-19 21:47   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/get-neon-ver.sh (1.3, milestone-2):

	fix the detection of older versions of Neon 
	
	Submitted by: Sam TH &lt;sam@uchicago.edu&gt; 

2001-02-19 14:29   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/trail.h (1.4):

	Doc fix from Yoshiki Hayashi.  

2001-02-19 14:27   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: rev-table.h (1.4), structure (1.32):

	Doc fix.  

2001-02-19 08:13  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* configure.in (1.64):

	Change mkdir to apr/build/mkdir.sh instead of apr/helpers/mkdir.sh.  
	Is there any way to get this directory automagically from APR? 

2001-02-18 23:59  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.49), libsvn_fs/libsvn_fs.dsp
	(1.8):

	2001-02-18 Bill Tutt &lt;rassilon@lyra.org&gt;: 
	* include/svn_fs.h: (svn_fs_get_editor) Make prototype match usage
	in libsvn_fs/editor.c.  
	* libsvn_fs/libsvn_fs.dsp: Update file list so it builds again.  

2001-02-18 20:29   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_error.h (1.70), libsvn_subr/svn_error.c
	(1.51):

	apr_clear_pool became apr_pool_clear. follow suit.  

2001-02-18 19:33   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.78):

	some random changes (also testing email from subversion.tigris.org) 

2001-02-17 17:52   Joe Orton &lt;joe@light.plus.com&gt;

	* autogen.sh (1.33), configure.in (1.63),
	subversion/libsvn_ra_dav/fetch.c (1.40), ac-helpers/get-neon-ver.sh
	(1.2):

	Update to neon 0.11.  
	
	* configure.in: libneon.la has moved to neon/src/libneon.la 
	
	* autogen.sh: 0.8 -&gt; 0.11.  
	
	* ac-helpers/get-neon-ver.sh: Look for version number in
	macros/neon.m4.  
	
	* subversion/libsvn_ra_dav/fetch.c (start_resource): Renamed to
	create_private.  
	(end_resource): Renamed to pfind_results and adjusted for new API.  
	(fetch_dirents):  Adjust for new API; fetch a set of 'complex'
	properties.  
	(start_element, end_element): Adjusted for new API.  

2001-02-17 12:08  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_delta.h (1.141),
	libsvn_delta/compose_editors.c (1.13),
	libsvn_delta/default_editor.c (1.5), libsvn_delta/xml_output.c
	(1.34), libsvn_delta/xml_parse.c (1.149), libsvn_ra_dav/commit.c
	(1.33), libsvn_wc/get_editor.c (1.166), tests/svn_test_editor.c
	(1.19), tests/xml/pipatch.xml (1.2, milestone-2):

	Cleaning stuff found by the careful eye of Greg S., in the following 
	basic categories: 
	
	1.  Editor add_* functions that should have copyfrom_path and 
	    copyfrom_revision instead of base_* or ancestor_*.  
	
	2.  Editor replace_* functions that should have base_revision
	    instead of ancestor_revision.  
	
	3.  Editors that should have been created by instantiating a default 
	    editor and then overriding necessary functions, instead of the
	    old way of everyone declaring their own static editor structure.  
	
	4.  Uses of fixed-length char buffers which, while likely to be of 
	    safe size, would be better handled as dynamically allocated 
	    buffers of *always* safe size.  
	
	--- 
	
	* client/trace-commit.c 
	* client/trace-update.c 
	
	  (add_directory, add_file): Renamed ancestor_* arguments to 
	  copyfrom_*, also changing 'long int' to 'svn_revnum_t' type for 
	  copyfrom_revision.  
	
	  (replace_directory, replace_file): Changed 'long int' to 
	  'svn_revnum_t' type for base_revision.  
	
	* include/svn_delta.h 
	
	  (svn_delta_edit_fns_t): Updated docstrings 
	
	  (svn_delta_edit_fns_t-&gt;add_directory, add_file): renamed 
	  base_revision and base_path to copyfrom_revision and
	  copyfrom_path.  
	
	* libsvn_delta/compose_editors.c 
	* libsvn_delta/default_editor.c 
	
	  (add_directory, add_file): Renamed base_* arguments to copyfrom_*, 
	  also changing 'long int' to 'svn_revnum_t' type for 
	  copyfrom_revision.  
	
	  (replace_directory, replace_file): Changed 'long int' to 
	  'svn_revnum_t' type for base_revision.  
	
	* libsvn_delta/xml_output.c 
	
	  (output_addreplace): Using SVN_DELTA__XML_ATTR_COPYFROM_PATH and 
	  SVN_DELTA__XML_ATTR_COPYFROM_REV for adds, *_BASE_REV for replaces 
	  (replace has no base_path).  Also, no longer using static buf[128] 
	  for intermediate number-to-string conversion.  Going with 
	  svn_string_createf instead per Greg S.' request.  
	
	  (replace_root): Using svn_string_createf instead of buf[128] per 
	  Greg S.' request.  
	
	  (add_directory, add_file): Renamed base_* arguments to copyfrom_*.  
	
	* libsvn_delta/xml_parse.c 
	
	  (xml_handle_start): Looking for copyfrom-path and copyfrom-rev in 
	  add tags now, base-path and base-rev in other ones.  
	
	* libsvn_ra_dav/commit.c 
	
	  (commit_add_dir, commit_add_file): Renamed ancestor_* arguments to 
	  copyfrom_*.  
	
	  (commit_rep_dir, commit_rep_file): Renamed ancestor_path to 
	  base_path.  
	
	* libsvn_wc/get_editor.c 
	
	  (add_directory, add_file): Renamed base_* arguments to copyfrom_*.  
	
	* tests/svn_test_editor.c 
	
	  (test_add_directory, test_add_file): Renamed base_* arguments to 
	  copyfrom_*, also changing 'long int' to 'svn_revnum_t' type for 
	  copyfrom_revision.  
	
	  (test_replace_directory, test_replace_file, add_or_replace_dir, 
	  add_or_replace_file): Changed 'long int' to 'svn_revnum_t' type
	  for base_revision.  
	
	* tests/xml/pipatch.xml 
	
	  Removed replace tag "ancestor" attributes, and renamed the "ver" 
	  attributes to "base-rev".  

2001-02-17 07:42   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.62):

	apr_common just moved 

2001-02-17 07:02   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_ra.h (1.39):

	oops. a bit overaggressive there. we need apr_tables.h for the
	array_header.  

2001-02-17 06:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_ra.h (1.38):

	Doc fix. Parameter name fix.  

2001-02-17 06:47   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.61):

	Be a bit more fine-grained about linking ra_local into the client.  

2001-02-17 06:29   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.60), subversion/Makefile.am (1.23),
	subversion/tests/Makefile.am (1.12):

	* configure.in: if shared builds are disabled, then link the RA
	    libraries into the client 
	  revamp decision making for subversion/ subdirs and
	    subversion/tests/ subdirs. this correctly orders them, and puts
	    ra_local into the list of dirs/tests that are dependent upon DB3
	    being present (by virtue of its dependency upon libsvn_fs) 
	
	* subversion/Makefile.am, subversion/tests/Makefile.am: use new
	    FS_BASED_* macros to determine what subdirs to build.  
	
	* subversion/client/Makefile.am: use new LIBSVN_CLIENT_DEPS macro to 
	    determine what needs to be linked into the client 

2001-02-17 05:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_client/ra_loader.c (1.5):

	Enable DSO loading and "prelinked" support for RA libraries.  
	
	(ra_libraries[]): new data structure to define RA library names and,
	  if linked-in, their initialization function 
	
	(load_ra_module): new function to load an RA module if DSO support
	  is available, and the module can be found.  
	
	(svn_client_init_ra_libs): revamp to use ra_libraries. linked-in
	  functions are preferred; otherwise, we try to load the RA module.  
	  rename "url_type" to "url_scheme" 
	
	(svn_client_get_ra_library): update scheme comparison logic --
	  schemes are case-sensitive and must be followed by a colon.  

2001-02-17 05:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_ra.h (1.37):

	* remove some include cruft 
	
	* (SVN_RA_ABI_VERSION): new define and doc on what it means 

2001-02-17 05:05   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_client/client.h (1.11):

	clean out some cruft 

2001-02-17 04:49   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.59), ac-helpers/svn-define-libs.m4 (1.1):

	shift some bulk out of configure.in 

2001-02-17 03:14   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.77):

	Humpty Dumpty sat on a wall.  Humpty Dumpty had a great fall.  
	Everybody had scrambled eggs for three weeks after that.  

2001-02-16 20:33   Greg Stein &lt;gstein@lyra.org&gt;

	* IDEAS (1.21, milestone-2):

	Anyone ever consider whether Android 18 can be classified as a
	"babe" or just as an intelligent toaster? 

2001-02-16 19:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: Makefile.am (1.34), editor.c (1.9):

	Bring everyone into line with cmpilato's recent sweeping editor 
	changes, and: 
	
	(deletion_baton): New type.  
	(delete_node): New helper func.  
	(delete_entry): Implement using above.  
	
	(addition_baton): New type.  
	(add_dir_in_node, add_file_in_node): New helper functions.  
	(add_directory, add_file): Implement using above.  

2001-02-16 19:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_ra_local/track_editor.c (1.5):

	Oops -- I must have done "make check" from the wrong place before, 
	because this thing was full of errors from the last commit.  
	
	(add_directory, add_file): Remove legacy code.  
	(close_file): Use apr_array_push instead of apr_hash_set, since,
	after all, it's an array not a hash.  Remove unused err variable.  
	(svn_ra_local__get_commit_track_editor): Don't initialize 
	delete_entry, since we don't define it.  Remove unused err variable.  

2001-02-16 18:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.140), include/svn_fs.h
	(1.48), libsvn_fs/delta.c (1.25), libsvn_fs/editor.c (1.8),
	libsvn_repos/delta.c (1.25):

	Complete the "begin_edit" to "replace_root" rename, as promised to 
	cmpilato.  

2001-02-16 18:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_ra_local/track_editor.c (1.4):

	(svn_ra_local__get_commit_track_editor): Comment fix.  

2001-02-16 18:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_ra_local/: ra_local.h (1.5), ra_plugin.c (1.9),
	track_editor.c (1.3):

	(svn_ra_local__commit_closer_t): New name for 
	svn_ra_local__commit_hook_baton_t, all callers changed.  It felt
	weird calling it a baton, because it wasn't opaque to anyone.  Also,
	it was a really long name.  
	
	(svn_ra_local__get_commit_track_editor): Return a real editor.  

2001-02-16 18:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/tree.c (1.20):

	#include "svn_error.h" 

2001-02-16 17:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.69):

	(SVN_ERR_FS_ALREADY_EXISTS, SVN_ERR_FS_ROOT_DIR): Doc
	clarifications.  

2001-02-16 17:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.68):

	(SVN_ERR_FS_ALREADY_EXISTS, SVN_ERR_FS_ROOT_DIR): New errors.  

2001-02-16 17:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/: split_url.c (1.4), track_editor.c
	(1.2):

	Minor tweaks; saving work to look at from home over weekend.  

2001-02-16 16:59   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.47):

	* include/svn_fs.h: Doc fix.  

2001-02-16 16:58   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.19):

	Finish off the tree-level support for file creation.  
	* libsvn_fs/tree.c (open_path_flags_t): New type.  
	(open_path): Add flag to allow the last path component to not exist.  
	(txn_body_node_prop, txn_body_change_node_prop, txn_body_delete):
	Pass the new argument to open_path.  (struct make_file_args,
	txn_body_make_file, svn_fs_make_file): New type/functions.  
	
	Absolute and null paths are legal now.  
	* libsvn_fs/tree.c (next_entry_name, open_path): Handle absolute and 
	null paths.  
	
	* libsvn_fs/tree.c (not_found, already_exists): New functions.  
	(open_path, txn_body_make_file): Improve error reporting.  

2001-02-16 16:40   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_ra_local/.cvsignore (1.1):

	Over the river, and through the woods...  

2001-02-16 14:28  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/xml_output.c (1.33):

	(svn_delta_get_xml_editor): Updated this to use the new default
	editor standard instead of explicitly constructing its own 
	svn_delta_edit_fns_t.  

2001-02-16 13:45  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.148):

	(xml_handle_start): Allowing the clients to override the target 
	revision found in the xml file's delta-pkg tag.  This is more for 
	debugging purposes than anything, and should be tagged as a 
	potentially reversible change once we have a real filesystem in
	place.  However, we're going to return an error if the delta-pkg tag
	has no valid revision number and we aren't given one to use from the
	client.  This would trigger an error later anyway, but we'll catch
	the case here because it's much easier to understand the cause at
	this stage.  

2001-02-16 13:44  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/delta.h (1.53):

	(svn_xml__digger_t): Removing unnecessary target_revision.  

2001-02-16 13:43  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_client/update.c (1.12):

	(svn_client_update): Renamed some arguments for consistency with a) 
	the header files and b) the similar svn_client_checkout() function.  

2001-02-16 13:43  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_client/apply_edits.c (1.13):

	(svn_client__checkout_internal, svn_client__update_internal):
	Changed 0 and 1 to FALSE and TRUE for more intuitive reading of that
	boolean value.  

2001-02-16 13:41  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/include/svn_client.h (1.23):

	(svn_client_checkout, svn_client_update): Gave these functions 
	docstrings that count, mainly for my own benefit, but I'm into 
	sharing the wealth.  

2001-02-16 08:44   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: fetch.c (1.39), session.c (1.18):

	Various cleanup.  
	
	* session.c: remove SVN_VERSION define and pick up
	svn_private_config.h 
	
	* fetch.c (fetch_props): activity collection is no longer a
	    property, so it can be removed; we will fetch the revision
	    elsewhere, so version-name is no longer needed 
	  (validate_element, end_element): target is now checked-in; remove
	    activity and version-name props 
	  (start_element): remove unneeded props 
	  (fetch_dirents): simplify logic for which props to fetch since we
	    don't fetch the activity collection set now 
	  (begin_checkout): new function to gear up for a checkout 
	  (svn_ra_dav__do_checkout): call begin_checkout to get activity_url
	    and the target_rev. call set_target_revision on the editor.  

2001-02-16 08:19   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.18):

	Use a cleaner method to distinguish revision roots from transaction
	roots.  
	* libsvn_fs/tree.c (root_kind_t): New type.  
	(svn_fs_root_t): New member `kind', used to distinguish revision and 
	transaction roots.  These are no longer distinguished by special 
	values for `txn' or `rev'.  
	(make_root): Don't initialize `rev'.  
	(make_revision_root, make_txn_root): Set the root's `kind'.  
	(root_node, mutable_root_node, svn_fs_is_txn_root, 
	svn_fs_is_revision_root, svn_fs_txn_root_name, 
	svn_fs_revision_root_revision): Distinguish transaction and revision 
	roots by their `kind' field, not by checking for magic values of
	`txn' and `rev'.  

2001-02-16 08:05   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.76):

	can I get a Mech suit for my b-day? 

2001-02-16 08:01   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.32), ac-helpers/get-neon-ver.sh (1.1):

	Inspired by Mo DeJong, create the get-neon-ver.sh to fetch Neon's
	version.  This should allow us to upgrade to the next Neon a bit
	more easily.  

2001-02-15 17:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.22), include/svn_ra.h
	(1.36), libsvn_client/ra_loader.c (1.4), libsvn_ra_dav/ra_dav.h
	(1.10), libsvn_ra_dav/session.c (1.17), libsvn_ra_local/ra_plugin.c
	(1.8), tests/libsvn_ra_local/ra-local-test.c (1.2):

	Rewrite interface twixt libsvn_ra_ and libsvn_client; no more dso's! 
	
	* ra_loader.c (svn_client_init_ra_libs, svn_client_get_ra_library): 
	  new public funcs.  
	
	* svn_client.h (svn_client_init_ra_libs, svn_client_get_ra_library):
	  new declarations.  
	
	* svn_ra.h (svn_ra_init_func_t):  add `url_type' arg.  
	  (svn_ra_dav_init, svn_ra_local_init):  must declare now! 
	
	* session.c (svn_ra_dav_init):  return new value.  
	
	* ra_plugin.c (svn_ra_local_init):  return new value.  
	
	* ra_dav_test.c, ra-commit.c (main): use new init interface, remove 
	  declaration.  

2001-02-15 17:17   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: Makefile.am (1.33), tree.c (1.17):

	New path representation and cloning strategy.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add back tree.c;
	this compiles again.  
	* libsvn_fs/tree.c: #include "txn.h", since we want svn_fs__txn_id.  
	(mutable_root_node, make_path_mutable): New function.  
	(txn_body_node_prop): Use the new open_path function.  
	(svn_fs_node_prop): Fix node/root typo.  (struct
	change_node_prop_args, txn_body_change_node_prop, 
	svn_fs_change_node_prop): Use a root / path pair instead of a node.  
	(txn_body_delete, svn_fs_delete): Adapt to new parent_path_t
	arrangement.  
	(txn_body_txn_root, svn_fs_txn_root): Transaction objects are opaque 
	to us now.  (struct revision_root_args): Fix typo in declaration of
	root_p member.  

2001-02-15 17:02   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: err.c (1.24), err.h (1.20):

	* libsvn_fs/err.c (svn_fs__err_not_mutable): Take a revision number 
	and path as arguments, instead of a node ID.  This should be a bit 
	more informative.  
	* libsvn_fs/err.h (svn_fs__err_not_mutable): Fix declaration.  

2001-02-15 17:01   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.18):

	* libsvn_fs/dag.h (svn_fs__dag_clone_child): Put amongst the other 
	directory operations.  Cloning a transaction root goes with the
	other root operations, so...  

2001-02-15 17:00   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.14):

	Annual Health Screening for the Older Pet 

2001-02-15 15:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/node-rev.c (1.3):

	Make some comments excruciatingly accurate.  

2001-02-15 15:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/node-rev.c (1.2):

	Heh, it's "NODE-REVISION" not "NODE-VERSION".  

2001-02-15 15:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: Makefile.am (1.32), node-rev.c (1.1),
	rep.c (1.4):

	* Makefile.am: Build node-rev.c, remove all mention of obsolete
	rep.c.  
	
	* rep.c: Removed (renamed to node-rev.c).  
	
	* node-rev.c: New file, inherit code from old rep.c, with the 
	following changes: 
	
	(svn_fs__get_node_revision, get_representation_skel, 
	put_representation_skel, svn_fs__get_node_revision, new_node_id, 
	svn_fs__create_node, new_successor_id, svn_fs__create_successor): 
	Accept a trail_t instead of db_txn and pool, to match Jim Blandy's 
	interface change of 2001-02-09 16:13.  
	
	(svn_fs__create_nodes, svn_fs__open_nodes): Delete these one-liners, 
	as they have no callers.  JimB's log entry of 2000-10-11 13:18 
	mentions some new calls to these functions, but I think he really 
	meant svn_fs__open_nodes_table, as that's what appears in the code.  
	
	(make_nodes): #ifdef out this callerless, static function, with 
	comment asking about its future.  
	
	(compare_nodes_keys, compare_ids, parse_node_revision_dbt): Deleted; 
	these live in nodes-table.c now.  
	
	(svn_fs__put_node_revision): Cast away a const warning, prepare to 
	receive ticking package from Branko.  

2001-02-15 13:00   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.c (1.17):

	* libsvn_fs/dag.c (svn_fs__dag_txn_node): Delete stub function; was 
	deleted from interface in an earlier change.  

2001-02-15 12:58   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: err.c (1.23), fs.c (1.37), nodes-table.c
	(1.6), rep.c (1.3), revision.c (1.8), trail.c (1.5), tree.c (1.16),
	txn-table.c (1.14):

	Cleanup from Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt;: 
	* libsvn_fs/err.c (svn_fs__wrap_db, svn_fs__check_fs): Return 
	SVN_NO_ERROR instead of 0 for uniformity and readability.  
	* fs.c (check_already_open, cleanup_fs_db, cleanup_fs, allocate_env, 
	svn_fs_create_berkeley, svn_fs_open_berkeley, 
	svn_fs_berkeley_recover): Same.  
	* nodes-table.c (svn_fs__get_rep, svn_fs__put_rep, 
	svn_fs__new_node_id, svn_fs__new_successor_id): Same.  
	* rep.c (make_nodes): get_representation_skel, 
	put_representation_skel, svn_fs__get_node_revision, new_node_id, 
	svn_fs__create_node, new_successor_id, svn_fs__create_successor):
	Same.  
	* revision.c (get_revision_skel): svn_fs__revision_root, 
	put_revision_skel, make_revisions): Same.  
	* trail.c (begin_trail, abort_trail, svn_fs__retry_txn): Same.  
	* tree.c (txn_body_node_prop, svn_fs_node_prop, 
	txn_body_change_node_prop, svn_fs_change_node_prop,
	txn_body_delete): Same.  
	* txn-table.c (put_txn, allocate_txn_id, svn_fs__create_txn, 
	svn_fs__get_txn, svn_fs__set_txn_root): Same.  

2001-02-15 12:33   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.15):

	* libsvn_fs/tree.c (root_node): New function.  
	(parent_path_t): New type.  
	(make_parent_path, free_parent_path, next_entry_name): New
	functions.  
	(open_path): Take another shot at implementing this.  

2001-02-15 11:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.58):

	Ooops, add ra_local.  (See yesterday's commit) 

2001-02-15 11:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.17):

	* libsvn_fs/dag.h (svn_fs__dag_txn_node): Delete function.  In the 
	absence of a clones table making references to arbitrary nodes, it 
	should be sufficient to simply access nodes by following the
	directory structure.  
	
	* libsvn_fs/dag.h (svn_fs__dag_txn_root): New function.  

2001-02-15 10:24   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dbt.h (1.16):

	Doc fix.  

2001-02-15 08:37   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: dbt.c (1.16), dbt.h (1.15):

	* libsvn_fs/dbt.c (svn_fs__recno_dbt): Remove comment above
	function.  For functions that form part of a module's public
	interface, any explanation of their purpose or usage (as opposed to
	notes about the implementation) should be in the header file.  
	* libsvn_fs/dbt.h (svn_fs__recno_dbt): Beef up explanatory comment.  

2001-02-14 16:53  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.147):

	Little bug fix-er-oo in xml_handle_start() callback function.  

2001-02-14 15:31  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_delta.h (1.139), include/svn_types.h
	(1.57), libsvn_delta/compose_editors.c (1.12),
	libsvn_delta/default_editor.c (1.4), libsvn_delta/delta.h (1.52),
	libsvn_delta/xml_output.c (1.32), libsvn_delta/xml_parse.c (1.146),
	libsvn_ra_dav/commit.c (1.32), libsvn_ra_dav/fetch.c (1.38),
	libsvn_wc/adm_crawler.c (1.75), libsvn_wc/get_editor.c (1.165),
	tests/svn_test_editor.c (1.18),
	tests/libsvn_delta/xml-output-test.c (1.12):

	SWEEPING CHANGE: Updated editor composition functions to make use of 
	the new interface described in the following file(s): 
	
	* include/svn_delta.h 
	
	  Herein lies interface changes that have been debated, debated, and 
	  debated again.  The gist of the final (?) outcome of the debates
	  is as follows: 
	
	  (svn_delta_edit_fns_t-&gt;set_target_revision): New function to handle 
	  setting of global target revision for the current edit operation.  
	
	  (svn_delta_edit_fns_t-&gt;begin_edit): Re-re-named to "replace_root()".  
	  See below for further changes.  
	
	  (svn_delta_edit_fns_t-&gt;replace_file, replace_directory, 
	  replace_root): These now take only a base_revision instead of both
	  a target_revision and base_revision (or ancestor_revision).  
	
	  (svn_delta_edit_fns_t-&gt;add_file, add_directory): Renamed 
	  ancestor_revision and ancestor_path to base_revision and base_path 
	  respectively.  
	
	The following file(s) were lined up and shot with this sweeping
	change: 
	
	* client/trace-commit.c 
	* client/trace-update.c 
	* libsvn_delta/compose_editors.c 
	* libsvn_delta/default_editor.c 
	* libsvn_ra_dav/commit.c 
	* libsvn_wc/adm_crawler.c 
	* libsvn_wc/get_editor.c 
	* tests/svn_test_editor.c 
	* tests/libsvn_delta/xml-output-test.c 
	
	In addition to the sweeping change above, the following file(s) were 
	modified as described below: 
	
	* libsvn_delta/xml_parse.c 
	* libsvn_delta/xml_output.c 
	
	  Now using the "base-rev" attributes instead of "ver", "base-path" 
	  instead of "ancestor", and the delta-pkg tag can now have a 
	  "target-rev" attribute.  
	
	Here are other files changed as a result of this group of edits, but 
	did not really suffer a "sweeping change.": 
	
	* include/libsvn_types.c 
	
	  (SVN_IGNORED_REVNUM): Re-define'ing this to be the same value as 
	  SVN_INVALID_REVNUM until which time someone can verify that all 
	  checks of a revision number against SVN_INVALID_REVNUM are a)
	  still valid or b) changed to use the SVN_IS_VALID_REVNUM() macro.  
	
	* libsvn_delta/delta.h 
	
	  (svn_xml__digger_t): Added target_revision.  
	
	* libsvn_ra_dav/fetch.c 
	
	  (svn_ra_dav__do_checkout): This is the checkout case, so pass 
	  SVN_IGNORED_REVNUM to the editor's replace_root() function.  
	
	MIKE'S NOTEZ:  While these changes do compile, and "make check" does 
	run without error, there are some obviously erraneous results from 
	these changes.  I am attacking these problems immediately after 
	checking this stuff in, but other works in progress depend on these 
	interfaces changes.  

2001-02-14 14:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.35), libsvn_ra_local/Makefile.am
	(1.2), libsvn_ra_local/ra_local.h (1.4),
	libsvn_ra_local/ra_plugin.c (1.7), libsvn_ra_local/track_editor.c
	(1.1), tests/Makefile.am (1.11), tests/libsvn_ra_local/Makefile.am
	(1.1), tests/libsvn_ra_local/ra-local-test.c (1.1):

	Progress on ra_local.  
	
	* ra_local.h (svn_ra_local__session_baton_t): remove useless 
	  `revision' field.  
	
	* ra_plugin.c (svn_ra_local_init):  simplify return value.  :) 
	  (open):  temporary debugging printf.  
	
	* svn_ra.h (svn_ra_local_init):  now publically declared, since
	  we're no longer using on-demand DSOs 
	
	* configure.in (@SVN_LIBSVN_RA_DAV_LIBS@, AC_OUTPUT): add ra_local.  
	
	* Makefile (x2):  add ra_local.  
	
	* target.c (PATH_MAX):  compensate for now, so freebsd will build.  
	
	* tests/libsvn_ra_local/*:  new dir & files for ra_local mini-test 

2001-02-14 12:01   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.25), subversion/include/svn_path.h (1.30),
	subversion/include/svn_test.h (1.10), subversion/libsvn_fs/dbt.h
	(1.14), subversion/libsvn_fs/id.h (1.9),
	subversion/libsvn_fs/structure (1.31):

	Documentation fixes.  
	
	Contributed by Yoshiki Hayashi &lt;yoshiki@xemacs.org&gt; 

2001-02-14 12:00   Branko Cibej &lt;brane@xbc.nu&gt;

	* STACK (1.75):

	Added item about svn_path_first_component.  

2001-02-13 19:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.16):

	(svn_fs__dag_clone_root): Clarifying comments.  

2001-02-13 18:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.15):

	Include "node-rev.h" and "txn-table.h".  
	
	(svn_fs__dag_clone_root): Implemented, but untested.  
	(svn_fs__dag_revision_root): Undid previous changes -- am not using 
	this function after all.  
	(dag_node_t): Doc fix.  

2001-02-13 16:29   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: tree.c (1.14), tree.h (1.4):

	Another intermediate checkin of tree.c.  
	
	* libsvn_fs/tree.c: Don't #include "clones-table.h" --- it doesn't 
	exist any more.  (struct svn_fs_root_t): Add `root_dir' member.  
	(make_revision_root): New argument, to initialize the root's 
	`root_dir' member.  
	(open_path): New prototype for this.  I'd like to to try writing a 
	bunch of the callers to see what they need, and then see if the job 
	can't be factored into something a bit simpler than Branko's 
	`open_path' function.  (struct node_prop_args): Renamed from `struct
	get_node_prop_args'.  Replace `node' member with a root / path pair.  
	(txn_body_node_prop): Renamed from `txn_body_get_node_prop'.  Adjust 
	to use root / path pair and hypothetical `open_path' function.  
	(svn_fs_node_prop): Adjust for above rearrangements.  
	(traverse_path, traverse_to_parent): Deleted.  
	(svn_fs__txn_root_node): Deleted.  Instead, move entire task of
	creating transaction and revision roots to this file: (struct
	txn_root_args, txn_body_txn_root, svn_fs_txn_root, struct 
	revision_root_args, txn_body_revision_root, svn_fs_revision_root):
	New types and functions.  
	* libsvn_fs/tree.h (svn_fs__txn_root_node): Delete declaration.  

2001-02-13 16:06   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.46), libsvn_fs/txn.c (1.27):

	* include/svn_fs.h (svn_fs_txn_fs): New declaration.  
	* libsvn_fs/txn.c (svn_fs_txn_fs): New function.  
	
	* libsvn_fs/txn.c (struct txn_root_args, txn_body_txn_root, 
	svn_fs_txn_root): Moved to tree.c; will appear in a subsequent
	commit.  

2001-02-13 13:38  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/libsvn_subr/target.c (1.3):

	Sorry, one more occurrence of a system maximum path length macro
	changed to the APR version.  

2001-02-13 13:31  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/libsvn_subr/target.c (1.2):

	Changed to use the new APR_PATH_MAX define, instead of the local
	system version for portability reasons.  

2001-02-13 11:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.24):

	Mention the left-paren exception to the GNU coding standards.  
	
	See dev messages from Greg Stein, Greg Hudson, and myself on this 
	(&lt;20010212183750.V8123@lyra.org&gt;, 
	&lt;200102131635.LAA05760@egyptian-gods.MIT.EDU&gt;, and 
	&lt;87g0hizr40.fsf@galois.ch.collab.net&gt;).  

2001-02-13 10:44   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: Makefile.am (1.31), clones-table.c (1.7),
	clones-table.h (1.5), fs.c (1.36):

	Remove the final traces of the clones table.  
	* libsvn_fs/clones.c, libsvn_fs/clones.h: Delete files.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Remove clones.c and
	clones.h from the list.  
	* libsvn_fs/fs.c: Don't #include "clones-table.h".  
	(cleanup_fs, svn_fs_create_berkeley, svn_fs_open_berkeley): Don't 
	clean up, create, or open the `clones' table.  

2001-02-13 10:38   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: dag.c (1.14), dag.h (1.16), tree.c (1.13):

	Continue working on converting tree.c to the new interface.  
	* libsvn_fs/tree.c (struct clone_path_t, struct svn_fs_node_t, 
	new_child, clone_path_to_string, undo_set_clone, set_clone, 
	check_for_clone, clone_path, make_clone, check_node_mutable, 
	svn_fs_close_node, svn_fs_is_dir, svn_fs_is_file, svn_fs_node_id, 
	svn_fs_get_node_txn, svn_fs_get_node_rev): Deleted.  (struct
	svn_fs_root_t): New type.  
	(make_root): Renamed from `new_root_object'.  
	(make_revision_root, make_txn_root, svn_fs_close_root,
	svn_fs_root_fs, svn_fs_is_txn_root, svn_fs_is_revision_root,
	svn_fs_txn_root_name, svn_fs_revision_root_revision): New functions.  
	(open_path): Moved here from dag.c, where it was named
	`svn_fs__dag_open_path'.  
	* libsvn_fs/dag.c (svn_fs__dag_open_path): Function moved to tree.c, 
	made static, and renamed to `open_path'.  
	* libsvn_fs/dag.h (svn_fs__dag_open_path): Remove declaration.  
	
	* libsvn_fs/dag.c (dag_init_fs): Pass a trail to svn_fs_put_rep, not
	a DB transaction and pool.  

2001-02-13 10:21   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/txn-table.c (1.13):

	* libsvn_fs/txn-table.c (is_valid_transaction): Move this earlier in
	the file.  
	(put_txn): Call it, to sanity check the structure we just built.  

2001-02-13 10:18   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.30):

	Doc fix.  

2001-02-13 10:17   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: nodes-table.c (1.5), nodes-table.h (1.5):

	Convert the nodes table code to use trails.  
	* libsvn_fs/nodes-table.c (svn_fs__get_rep, svn_fs__put_rep, 
	svn_fs__new_node_id, svn_fs__new_successor_id): Take a trail_t 
	argument, instead of a Berkeley DB transaction and a pool.  
	* libsvn_fs/nodes-table.h: Fix declarations.  

2001-02-13 10:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/txn.h (1.7):

	Fix descriptive comment at top of file.  

2001-02-13 10:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: err.c (1.22), err.h (1.19):

	* libsvn_fs/err.c (svn_fs__err_not_directory): New function.  
	* libsvn_fs/err.h (svn_fs__err_not_directory): New declaration.  

2001-02-13 09:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/txn.c (1.26):

	(txn_body_txn_root): Comment out call to svn_fs__txn_root_node to
	get fs to compile, will undo this change when tree.c is part of the 
	compilation again.  

2001-02-12 22:34   Greg Stein &lt;gstein@lyra.org&gt;

	* BUGS (1.5, milestone-2):

	a bit more refinement on APR bug reporting.  

2001-02-12 22:33   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.17), deadprops.c (1.8),
	repos.c (1.33), version.c (1.13):

	Updates to the new FS API 
	
	* dav_svn.h (dav_svn_repos): toss the root info since one repository
	    may have multiple roots opened (depending on what we're doing).  
	  (dav_svn_root): new struct to hold onto a repository root and its 
	    associated information.  
	  (dav_resource_private): add repos_path to state where the resource
	    is located within the FS repository. toss object_name (obsolete),
	    and activity_id and txn_name (moved to dav_svn_root) 
	
	* deadprops.c (dav_svn_db_fetch, dav_svn_db_store,
	    dav_svn_db_remove, dav_svn_db_exists, dav_svn_db_firstkey): path
	    ROOT and REPOS_PATH to the FS functions.  
	
	* version.c (dav_svn_checkout): use repos_path rather than
	  object_name 
	(dav_svn_make_activity): use root.activity_id rather than
	object_name 
	
	* repos.c (dav_stream): remove "file" member from structure 
	  (dav_svn_parse_version_uri, dav_svn_parse_history_uri): use
	    repos_path rather than object_name 
	  (dav_svn_parse_working_uri): use repos_path rather than
	    object_name. use root.activity_id rather than activity_id.  
	  (dav_svn_parse_activity_uri): use root.activity_id rather than
	  activity_id 
	(dav_svn_parse_uri): fill in repos_path for REGULAR resources 
	  (dav_svn_prep_regular): update for new FS API taking
	    priv.root.root and priv.repos_path parameters 
	  (dav_svn_prep_working, dav_svn_prep_activity): use 
	    root.activity_id/txn_name rather than activity_id/txn_name.  
	  (dav_svn_get_resource): initialize new priv.root structure 
	  (dav_svn_open_stream, dav_svn_getetag, dav_svn_set_headers, 
	      dav_svn_create_collection, dav_svn_remove_resource): use new
	    FS API which take info-&gt;root.root and info-&gt;repos_path
	  parameters 
	(dav_svn_do_walk): update for new FS API; no longer needs to
	    save/restore nodes, but just do path manipulation 
	  (dav_svn_walk): for now, only allow walking REGULAR resources;
	    prep the repos_path value.  
	  (dav_svn_create_working_resource): update for new root structure 

2001-02-12 19:29   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/dag.c (1.13):

	(svn_fs__dag_open_path): Return child's name in its parent dir, too.  

2001-02-12 19:28   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/dag.h (1.15):

	(svn_fs__dag_open_path): Return child' name in its parent dir, too.  

2001-02-12 19:20   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/tree.c (1.12):

	Reworking to fit new FS interface.  
	
	Saving current work. tree.c does *not* compile yet, but another 
	iteration should get us there.  
	
	(svn_fs_node_t): Renamed to svn_fs_root_t; some fields removed.  
	(new_node_object): Renamed to new_root_object.  
	
	(svn_fs_is_dir, 
	 svn_fs_is_file, 
	 svn_fs_node_id, 
	 svn_fs_node_prop, 
	 svn_fs_node_proplist, 
	 svn_fs_change_node_prop, 
	 svn_fs_merge, 
	 svn_fs_dir_entries, 
	 svn_fs_make_dir, 
	 svn_fs_delete, 
	 svn_fs_delete_tree, 
	 svn_fs_rename, 
	 svn_fs_copy): Renamed and/or changed to conform to new API.  
	
	(svn_fs_open_node): Removed.  
	
	(txn_body_delete): Partial rewrite, use DAG nodes instead of FS
	nodes.  
	
	(svn_fs__txn_root_node): Reflect the svn_fs_node_t -&gt; svn_fs_root_t
	change.  

2001-02-12 18:27   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/dag.c (1.12):

	Reworking to fit new FS interface.  
	
	(svn_fs__dag_open_path): Dummy implementation.  

2001-02-12 18:26   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/dag.h (1.14):

	Reworking to fit new FS interface.  
	
	(svn_fs__dag_open_path): New interface; will be used in tree.c to
	open DAG nodes.  

2001-02-12 17:29   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/txn.c (1.25):

	Reworking to fit new FS interface.  
	
	(svn_fs_open_txn_root): Renamed to svn_fs_txn_root.  
	(open_txn_root_args): Renamed to txn_root_args.  
	(txn_body_open_txn_root): Renamed to txn_body_txn_root.  

2001-02-12 17:26   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/include/svn_fs.h (1.45):

	(svn_fs_revision_root, svn_fs_txn_root): root_p must be an
	svn_fs_root_p**.  

2001-02-12 17:18   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/Makefile.am (1.30):

	Enable compilation of txn.c again.  

2001-02-12 17:16   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/txn.c (1.24):

	Reworking to fit new FS interface.  
	
	(open_txn_root_args): Replace dir_p with root_p, an svn_fs_root_t.  
	(txn_body_open_txn_root): Adjust for this change.  
	(svn_fs_open_txn_root): Likewise.  

2001-02-12 17:12   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/tree.h (1.3):

	Reworking to fit new FS interface.  
	
	(svn_fs__txn_root_node): Return an svn_fs_root_t.  

2001-02-12 13:22  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/svndiff.c (1.17):

	* libsvn_delta/svn_diff.c 
	
	  (window_handler): Minor fix for compiler warning (needed cast).  

2001-02-12 13:21  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/include/svn_types.h (1.56):

	* include/svn_types.h 
	
	  (SVN_IS_VALID_REVNUM):  Oops.  Not supposed to have a space in the
	  macro.  

2001-02-12 12:00   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.44):

	* include/svn_fs.h (svn_fs_revision_proplist): Renamed from 
	svn_fs_get_rev_proplist, for consistency with other functions.  

2001-02-12 12:00  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/: include/svn_path.h (1.29), libsvn_subr/Makefile.am
	(1.16), libsvn_subr/target.c (1.1), tests/libsvn_subr/Makefile.am
	(1.17), tests/libsvn_subr/target-test.c (1.1),
	tests/libsvn_subr/target-test.sh (1.1):

	The implementation of svn_path_get_absolute, svn_path_split_if_file 
	and svn_path_condense_targets.  
	    * new file libsvn_subr/target.c implementations 
	
	    * new file test/libsvn_subr/target-test.c a test program for above 
	
	    * new file test/libsvn_subr/target-test.sh invokation script for
	    test 
	
	    * libsvn_subr/Makefile.am test/libsvn_subr/Makefile.am, addition of 
	        those files and test suites.  
	
	    * include/svn_path.h prototypes for the above functions.  

2001-02-12 11:57   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.43), libsvn_fs/Makefile.am
	(1.29):

	Change filesystem interface to use roots and paths, instead of node 
	objects.  
	* include/svn_fs.h (svn_fs_node_t, svn_fs_close_node, 
	svn_fs_get_node_id, svn_fs_get_node_txn, svn_fs_get_node_rev, 
	svn_fs_open_node, svn_fs_open_rev_root): Deleted.  
	(svn_fs_root_t, svn_fs_revision_root, svn_fs_txn_root, 
	svn_fs_close_root, svn_fs_root_fs, svn_fs_is_txn_root, 
	svn_fs_is_revision_root, svn_fs_txn_root_name, 
	svn_fs_revision_root_revision): New type and functions.  
	(svn_fs_change_node_prop, svn_fs_merge, svn_fs_dir_entries, 
	svn_fs_make_dir, svn_fs_delete, svn_fs_delete_tree, svn_fs_rename, 
	svn_fs_copy, svn_fs_file_length, svn_fs_file_contents, 
	svn_fs_make_file, svn_fs_apply_textdelta, svn_fs_dir_delta, 
	svn_fs_file_delta): Use svn_fs_root_t's and paths, not 
	svn_fs_node_t's.  
	(svn_fs_is_dir, svn_fs_is_file, svn_fs_node_prop, 
	svn_fs_node_proplist): Renamed from svn_fs_node_is_dir, 
	svn_fs_node_is_file, svn_fs_get_node_prop, svn_fs_get_node_proplist; 
	use an svn_fs_root_t and path, not svn_fs_node_t.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Remove editor.c, 
	tree.c, and txn.c from the list, since they don't compile any more.  
	We'll put them back as we fix them.  
	
	* include/svn_fs.h (svn_fs_youngest_rev): Fix order of arguments; 
	youngest_p is a return value, so it should come first.  
	
	* include/svn_fs.h (svn_fs_revision_prop): Renamed from 
	svn_fs_get_revision_prop, for consistency with other functions.  

2001-02-12 11:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.74):

	Added item from list discussion between GregS and Ben.  

2001-02-12 10:53  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/libsvn_subr/path.c (1.31):

	Fixed a minor fencepost error, that was causing two null terminators
	if it reached the end of a string.  

2001-02-12 10:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/trail.c (1.4):

	* libsvn_fs/trail.c (svn_fs__retry_txn): Doc fix.  

2001-02-12 10:49   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/fs.c (1.35):

	* libsvn_fs/fs.c: Formatting tweak.  

2001-02-12 09:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.13):

	* libsvn_fs/dag.h: Doc fixes about copy nodes.  
	(svn_fs__dag_is_copy, svn_fs__dag_get_copy): New functions.  

2001-02-12 06:47   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* BUGS (1.4):

	as Greg Stein just pointed out on the list, the email address for
	APR bug report was wrong, fixed now PR: Obtained from: Submitted by: 
	Reviewed by: 

2001-02-11 22:40   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_subr/hashdump.c (1.21), libsvn_subr/io.c
	(1.30), libsvn_wc/entries.c (1.87), libsvn_wc/questions.c (1.50):

	Fix a bad rename: apr_file_read_file should be apr_file_read_full 
	(was originally apr_full_read) 

2001-02-11 18:26   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_fs/clones-table.c (1.6),
	libsvn_fs/clones-table.h (1.4), libsvn_fs/convert-size.c (1.10),
	libsvn_fs/convert-size.h (1.6), libsvn_fs/dag.c (1.11),
	libsvn_fs/dag.h (1.12), libsvn_fs/dbt.c (1.15), libsvn_fs/dbt.h
	(1.13), libsvn_fs/delta.c (1.24), libsvn_repos/delta.c (1.24),
	libsvn_fs/err.c (1.21), libsvn_fs/err.h (1.18), libsvn_fs/file.h
	(1.9), libsvn_fs/fs.c (1.34), libsvn_fs/fs.h (1.17), libsvn_fs/id.c
	(1.15), libsvn_fs/id.h (1.8), libsvn_fs/node-rev.h (1.4),
	libsvn_fs/nodes-table.c (1.4), libsvn_fs/nodes-table.h (1.4),
	libsvn_fs/rep.c (1.2), libsvn_fs/rev-table.h (1.3),
	libsvn_fs/revision.c (1.7), libsvn_fs/revision.h (1.4),
	libsvn_fs/skel.c (1.17), libsvn_fs/skel.h (1.13), libsvn_fs/trail.c
	(1.3), libsvn_fs/trail.h (1.3), libsvn_fs/tree.c (1.11),
	libsvn_fs/tree.h (1.2), libsvn_fs/txn-table.c (1.12),
	libsvn_fs/txn-table.h (1.8), libsvn_fs/txn.c (1.23),
	libsvn_fs/txn.h (1.6), libsvn_fs/validate.c (1.2):

	Let's follow the coding style: Removed all tabs, added local eval
	bits where missing.  

2001-02-09 20:22   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/dag.h (1.11):

	* dag.h (svn_fs__dag_make_copy): First stab at interface for
	creating copy nodes.  

2001-02-09 20:08   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_ra_local/.cvsignore (1.1, milestone-2):

	This one is obvious.  

2001-02-09 19:46   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/structure (1.29):

	Added description of COPY nodes, and a `Copying' section (just the 
	template from STACK right now).  
	
	Oh, and must have done an `M-x untabify RET' somewhere along the 
	line. Sorry about the spurious diffs.  

2001-02-09 18:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.57), subversion/Makefile.am (1.22),
	subversion/libsvn_ra_local/Makefile.am (1.1),
	subversion/libsvn_ra_local/ra_local.h (1.3),
	subversion/libsvn_ra_local/ra_plugin.c (1.6),
	subversion/libsvn_ra_local/split_url.c (1.3):

	OK, libsvn_ra_local is now linked into main svn tree and is
	compiling.  
	
	* configure.in:  add libsvn_ra_local 
	* Makefile.am:  add libsvn_ra_local 
	* Makefile.am:  new file in libsvn_ra_local 
	
	* ra_local.h (svn_ra__local_commit_hook_baton_t):  fix func
	  pointers.  Also, this symbol gets nominated for longest silly type
	name.  :-) 
	
	* ra_plugin.c (many symbols):  fix typos, compile-o's as necessary.  
	
	* split_url.c (svn_ra_local__split_URL):  filled out routine.  

2001-02-09 17:14  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.51), xml_output.c (1.31),
	xml_parse.c (1.145):

	* libsvn_delta/delta.h 
	
	  Added #defines for the various XML tag names and attribute names
	  used by the xml parser and xml output routines in this module.  
	
	* libsvn_delta/xml-parse.c 
	* libsvn_delta/xml-output.c 
	
	  Modified various functions to use the newly abstracted XML tag names
	  and attribute names found in delta.h instead of explicitly
	  referencing char strings.  
	
	  All of the above was done in anticipation of (yea, as a precursor 
	  to) a slew of editor interface changes that I'll soon be working
	  on, which will inevitably result in changes to the XML DTD as
	  well.  Greg Stein, please put on your Namespace Protection Police
	  cap and make sure that new brain I ordered this morning is working
	  better than my old one.  

2001-02-09 16:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/node-rev.h (1.3):

	* libsvn_fs/node-rev.h (svn_fs__get_node_revision, 
	svn_fs__put_node_revision, svn_fs__create_node, 
	svn_fs__create_successor, svn_fs__stable_node): Accept a trail, 
	instead of a Berkeley DB transaction and a pool.  

2001-02-09 15:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.34):

	(do_update):  docfix, based on latest discussions.  

2001-02-09 14:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.10):

	Doc fixes.  

2001-02-09 14:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.9):

	* libsvn_fs/dag.h (svn_fs__dag_get_fs): Remove stray `const'.  

2001-02-09 02:22  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/svn_com/SVN.cpp (1.5, milestone-2):

	SVN.cpp (CSVNWorkingCopy::wc_statuses): Rename apr_make_hash to
	apr_hash_make to follow APR's lead.  

2001-02-08 23:39  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/include/svn_types.h (1.55):

	Fixing a gross violation of namespace integrity (IS_VALID_REVNUM
	should be, and now is, SVN_IS_VALID_REVNUM), as well as dishonest
	comment.  

2001-02-08 22:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/: ra_local.h (1.2), ra_plugin.c (1.5),
	split_url.c (1.2):

	Saving work.  

2001-02-08 21:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_path.h (1.28):

	docfix in header comment.  

2001-02-08 20:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.32):

	(dav_svn_prep_regular): add "fs" parameter to svn_fs_youngest_rev
	    call [this call is still #if'd out] 
	(dav_svn_open_stream): add a check for opening a writable stream 
	(dav_svn_create_collection): begin some implementation 
	(dav_svn_remove_resource): begin some implementation 

2001-02-08 20:02   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.42), libsvn_fs/tree.c (1.10):

	* include/svn_fs.h (svn_fs_make_dir): add "const" to path parameter 
	* libsvn_fs/tree.c (svn_fs_make_dir): add "const" to path parameter 

2001-02-08 19:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/ra_plugin.c (1.4):

	Fleshing out routines, bit by bit.  

2001-02-08 19:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_fs.h (1.41):

	(svn_fs_youngest_rev):  um, I think we need the `fs' arg in the 
	declaration here.  :-) 

2001-02-08 19:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.10), editor.c (1.7):

	(dag_node_t): Added skel field.  Removed is_mutable and kind fields; 
	they just cache information that's in the skel anyway, and it's 
	premature to make a cache at this point.  Removed ancestor field.  
	
	(edit_baton): Cache txn name.  
	(clone_root): New helper func, a txn_body for svn_fs__retry_txn.  
	(begin_edit): Use it.  
	
	(svn_fs__dag_revision_root, svn_fs__dag_clone_root): Started 
	implementing.  

2001-02-08 19:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/: ra_local.h (1.1), ra_plugin.c (1.3),
	split_url.c (1.1):

	Adding files for backup;  not attempting compilation yet.  

2001-02-08 19:00   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.73):

	bumble bumble bumbly boo 

2001-02-08 18:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.33), libsvn_ra_dav/commit.c
	(1.31), libsvn_ra_dav/ra_dav.h (1.9), libsvn_ra_local/ra_plugin.c
	(1.2):

	Temporary change to RA interface until Change #2 is completed.  
	
	* svn_ra.h (svn_ra_plugin_t-&gt;get_commit_editor): add base_revision 
	  argument, to align correctly with svn_fs_get_editor.  
	
	* ra_dav.h (svn_ra_dav__get_commit_editor): add base_revision arg 
	  temporarily 
	
	* commit.c (svn_ra_dav__get_commit_editor): same.  

2001-02-08 16:37  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/include/svn_types.h (1.54):

	(IS_VALID_REVNUM): New macro for determining validity of a revision 
	number.  
	
	(SVN_IGNORED_REVNUM): New #define for svn_revnum_t's that are not 
	really invalid...just unimportant to functions that take them as
	arguments.  

2001-02-08 12:55   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.28):

	* libsvn_fs/structure: Remove all references to the `clones' table; 
	we're simplifying the FS interface to make it unnecessary.  Remove
	the optional BASE-PATH from directory entries; that also existed
	only to allow clone tracking.  

2001-02-08 12:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dag.c (1.9):

	(dag_node_t): Doc clarification.  

2001-02-08 12:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: dag.c (1.8), editor.c (1.6):

	(dag_node_t): Removed silly svn_fs_node_t field.  Added is_mutable, 
	kind, and ancestor fields.  Documented all fields.  
	
	(dir_baton, file_baton): Added dag_node_t node fields.  
	(begin_edit): Use the dag interface, not that other interface.  
	
	(everywhere): Replace "db" with "dirb", because in the filesystem 
	context, saying "db" for dir baton might cause it to be confused 
	with the database.  

2001-02-08 11:53  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* STACK (1.72):

	Assigning myself a little piece o' Hell.  

2001-02-08 11:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.8):

	* libsvn_fs/dag.h (svn_fs__dag_get_fs, svn_fs__dag_is_mutable, 
	svn_fs__dag_is_file, svn_fs__dag_is_directory): New functions.  
	
	* libsvn_fs/dag.h: Doc fixes.  
	
	* libsvn_fs/dag.h (svn_fs__dag_revision_root, svn_fs__dag_txn_node): 
	Move these to a separate page, with the other root-handling
	functions.  
	(svn_fs__dag_dup, svn_fs__dag_get_id): Move these to "Generic DAG
	node stuff" page.  

2001-02-08 06:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_client/add.c (1.6),
	libsvn_client/apply_edits.c (1.12), libsvn_client/commit.c (1.18),
	libsvn_client/delete.c (1.7), libsvn_client/status.c (1.9),
	libsvn_delta/svndiff.c (1.16), libsvn_delta/text_delta.c (1.28),
	libsvn_delta/xml_output.c (1.30), libsvn_delta/xml_parse.c (1.144),
	libsvn_fs/dbt.c (1.14), libsvn_fs/delta.c (1.23), libsvn_fs/fs.c
	(1.33), libsvn_fs/revision.c (1.6), libsvn_fs/trail.c (1.2),
	libsvn_fs/tree.c (1.9), libsvn_fs/txn.c (1.22),
	libsvn_repos/delta.c (1.23), libsvn_ra_dav/commit.c (1.30),
	libsvn_ra_dav/fetch.c (1.37), libsvn_ra_dav/session.c (1.16),
	libsvn_subr/base64.c (1.15), libsvn_subr/hashdump.c (1.20),
	libsvn_subr/io.c (1.29), libsvn_subr/keysort.c (1.8),
	libsvn_subr/quoprint.c (1.2), libsvn_subr/svn_error.c (1.50),
	libsvn_subr/xml.c (1.35), libsvn_wc/adm_crawler.c (1.74),
	libsvn_wc/adm_files.c (1.68), libsvn_wc/entries.c (1.86),
	libsvn_wc/get_editor.c (1.164), libsvn_wc/log.c (1.86),
	libsvn_wc/props.c (1.24), libsvn_wc/questions.c (1.49),
	libsvn_wc/util.c (1.16), mod_dav_svn/liveprops.c (1.14),
	svnadmin/main.c (1.3), tests/svn_tests_main.c (1.16),
	tests/libsvn_delta/deltaparse-test.c (1.63),
	tests/libsvn_delta/random-test.c (1.19),
	tests/libsvn_subr/hashdump-test.c (1.17),
	tests/libsvn_wc/checkout-test.c (1.40),
	tests/libsvn_wc/commit-test.c (1.18):

	Big APR renaming for function name consistency.  
	
	see: http://apr.apache.org/~dougm/apr_rename.pl 

2001-02-08 06:08   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/version.c (1.12):

	(dav_svn_checkout): ensure the activity exists 

2001-02-08 05:45   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.16), liveprops.c (1.13),
	repos.c (1.31), version.c (1.11):

	Get the rough outline of CHECKOUT working. This allows a client to
	perform a checkout against a version resource URL and get back a
	meaningful working resource URL. (bits are missing, but the
	framework is now there) 
	
	* dav_svn.h (dav_svn_repos): rename root_uri to root_path for
	    clarity (it is just the path portion of a URI); add base_url and
	  special_uri 
	(dav_resource_private): remove pool; rename path to uri_path for
	    clarity (and to prevent confusion with a repos path); add comments
	    about object_name interpretation; add activity_id for working and
	    activity resources to use; add node_id for version resources to use 
	  (dav_svn_create_working_resource): new func. add prototype.  
	
	* liveprops.c (dav_svn_insert_prop): private.pool is now gone; grab
	    pool from the public part of the resource.  
	
	* repos.c (dav_svn_parse_version_uri): implement 
	  (dav_svn_parse_working_uri): implement 
	  (dav_svn_parse_activity_uri): store activity_id in
	    private.activity_id rather than object_name.  
	  (dav_svn_prep_regular): private.path is now private.uri_path 
	  (dav_svn_prep_version): pretend version resources always exist 
	  (dav_svn_prep_working): implement 
	  (dav_svn_prep_activity): use private.activity_id rather than
	  object_name 
	(dav_svn_get_resource): rename parameter from root_uri to root_path
	    to better reflect its semantic; private.pool is now gone;
	    private.path is now private.uri_path; store base_url and special_uri
	    into the repos structure 
	  (dav_svn_get_parent_resource, dav_svn_is_same_resource, 
	      dav_svn_get_parent_resource, dav_svn_is_parent_resource, 
	      dav_svn_do_walk, dav_svn_walk): private.path is now
	  private.uri_path 
	(dav_svn_open_stream, dav_svn_getetag): private.pool is now gone,
	    use resource pool instead 
	  (dav_svn_create_working_resource): new function 
	
	* version.c (dav_svn_checkout): implement 

2001-02-08 02:12   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: mod_dav_svn/Makefile.am (1.13),
	libsvn_delta/Makefile.am (1.17):

	FS now depends on DELTA. include that into the mod_dav_svn
	installation handling.  

2001-02-08 01:49   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.32), libsvn_ra_dav/commit.c
	(1.29), libsvn_ra_dav/fetch.c (1.36), libsvn_ra_dav/ra_dav.h (1.8),
	libsvn_ra_dav/session.c (1.15):

	switch over to the new RA API.  (no functional change) 

2001-02-07 22:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_ra_local/ra_plugin.c (1.1):

	New file with ra_local skeleton in it.  

2001-02-07 17:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.31):

	Minor tweaks to new RA interface.  
	
	(svn_ra_reporter_t):  don't need set_baseline, because the root URL
	is already specified in open().  Also change some doc strings.  
	
	(svn_ra_plugin_t-&gt;do_checkout):  don't need root_path arg, again 
	because root URL is specified in open() (thus it's part of the 
	ra_session object).  

2001-02-07 17:29  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/: include/svn_fs.h (1.40), libsvn_fs/editor.c (1.5),
	libsvn_fs/txn.c (1.21):

	* include/svn_fs.h 
	  (svn_fs_commit_txn): Changed prototype to return the new revision 
	  number that results from this successful commit! 
	
	* libsvn_fs/editor.c 
	  General Statement:  base revision handling is about to undergo 
	  Change #2, so stay tuned for more updates in this arena.  
	
	  (begin_edit): Implemented basic functionality, which for now means 
	  that we call svn_fs_begin_txn() to get a txn, then toss that into 
	  svn_fs_open_txn_root() to get the root directory of the
	  transaction.  Also added necessary variables to the edit_baton,
	  dir_baton, and file_baton structures associated with transactions.  
	
	  (close_edit): Began (perhaps completed?) implementation of this one.  
	
	* libsvn_fs/txn.c 
	  (svn_fs_commit_txn): Implemented skeleton function.  Does precious 
	  little.  

2001-02-07 16:54   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/svnadmin/Makefile.am (1.2):

	FS now depends on DELTA, so we must link that in, too.  

2001-02-07 16:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.30):

	Beginning change #4 and #5, which revise the RA interface quite a
	bit.  
	
	(This is in preparation for writing ra_local, which will use the 
	filesystem commit-editor being written on top of libsvn_fs/dag.c.) 
	
	* svn_ra.h: 
	
	  (svn_ra_reporter_t): new vtable type for reporting WC state, part of 
	  change #5.  
	
	  (svn_ra_close_commit_func_t, svn_ra_set_wc_prop_func_t):  new 
	  function types, for closing a commit.  
	
	  (svn_ra_plugin_t-&gt;get_commit_editor):  major new interface (Change
	  #4).  
	
	  (svn_ra_plugin_t-&gt;do_checkout) doc fix;  add root_path back in.  
	
	  (svn_ra_plugin_t-&gt;do_update) new interface to use `reporter' and
	  `targets' 

2001-02-07 14:42   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.39):

	Doc fixes.  

2001-02-07 10:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.38), libsvn_fs/dag.c (1.7),
	libsvn_fs/editor.c (1.4):

	(svn_fs_get_editor): Take log_message arg, store it in edit_baton.  
	(dag_node_t): Include underlying svn_fs_node_t.  

2001-02-07 06:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: repos.c (1.30), version.c (1.10):

	Update to latest mod_dav API (some CHECKOUT code was updated in
	Apache, which affected the APIs) 

2001-02-07 03:43   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.56), subversion/libsvn_fs/Makefile.am (1.28),
	subversion/tests/libsvn_fs/Makefile.am (1.14):

	System headers are hopelessly whacked. I give up. This commit backs
	out the POSIX_SOURCE thing. As a result, we can't check for
	redundant declarations because we'll get errors from the system
	headers.  

2001-02-06 19:30   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/dag.c (1.6):

	Oh all right, I give in.  
	
	(But I still think svn_fs__parse_skel and friends should take `const 
	char*' parameters.) 
	
	
	(dag_init_fs): Make rep_skel and rev_skel non-const and remove
	casts.  

2001-02-06 19:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.37), libsvn_fs/dag.c (1.5),
	libsvn_fs/editor.c (1.3):

	(svn_fs_commit_hook_t): Removed log_msg argument, adjust callers and 
	documentation accordingly.  
	(dag_node_t): Start defining this struct.  

2001-02-06 18:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/editor.c (1.2):

	Do baton construction and swapping correctly.  

2001-02-06 18:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: compose_editors.c (1.11),
	default_editor.c (1.3):

	(change_dir_prop): Fix typo.  

2001-02-06 17:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_fs.h (1.36), libsvn_fs/Makefile.am
	(1.27), libsvn_fs/editor.c (1.1):

	Start tree editor interface for committing changes to the
	repository: 
	
	(svn_fs_commit_hook_t): New prototype 
	(svn_fs_get_editor): New function.  
	
	* libsvn_fs/editor.c: New file.  

2001-02-06 15:16  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion/libsvn_fs/libsvn_fs.dsp (1.7):

	After a chat with Jim, we've found some files in the libsvn_fs win32
	build that shouldn't be there, namely dir.c, node.c, and node.h. 
	Also, the file txn-table.h was inaccurately existing in the project
	as txm-table.h.  

2001-02-06 12:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: Makefile.am (1.26), dir.c (1.14), node.h
	(1.9):

	* dir.c, node.h: Removed, Jim says they're not relevant anymore.  

2001-02-06 10:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/Makefile.am (1.17):

	(noinst_PROGRAMS): Restored "commit-test".  
	(commit_test_SOURCES): Uncommented.  
	(commit_test_LDADD): Use the right incantation.  

2001-02-05 18:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.21), include/svn_delta.h
	(1.138), include/svn_fs.h (1.35), include/svn_ra.h (1.29),
	include/svn_test.h (1.9), include/svn_wc.h (1.71),
	libsvn_client/apply_edits.c (1.11), libsvn_client/checkout.c
	(1.14), libsvn_client/client.h (1.10), libsvn_client/commit.c
	(1.17), libsvn_client/update.c (1.11),
	libsvn_delta/compose_editors.c (1.10),
	libsvn_delta/default_editor.c (1.2), libsvn_delta/delta.h (1.50),
	libsvn_delta/xml_output.c (1.29), libsvn_delta/xml_parse.c (1.143),
	libsvn_fs/delta.c (1.22), libsvn_repos/delta.c (1.22),
	libsvn_ra_dav/commit.c (1.28), libsvn_ra_dav/fetch.c (1.35),
	libsvn_ra_dav/ra_dav.h (1.7), libsvn_wc/adm_crawler.c (1.73),
	libsvn_wc/adm_ops.c (1.41), libsvn_wc/get_editor.c (1.163),
	libsvn_wc/status.c (1.26), tests/svn_test_editor.c (1.17),
	tests/libsvn_delta/deltaparse-test.c (1.62),
	tests/libsvn_delta/xml-output-test.c (1.11),
	tests/libsvn_wc/Makefile.am (1.16), tests/libsvn_wc/checkout-test.c
	(1.39), tests/libsvn_wc/commit-test.c (1.17):

	Reverted Change #1, also known as "2001-01-30 17:06   Karl Fogel".  
	
	The unrelated portions of that change were not reverted, however.  
	Also, where Change #1 overlapped with Change #8, appropriate 
	adjustments were made, and this new code was added: 
	
	* libsvn_delta/default_editor.c (replace_root, close_edit): New 
	functions.  
	(default_editor): Include them.  
	
	Unrelated to the reversion, renamed two editor functions: 
	
	* include/svn_delta.h (svn_delta_edit_fns_t): Rename "replace_root"
	to "begin_edit" and "delete_item" to "delete_entry".  All callers
	and providers changed.  Considered fixing the doc string here to
	describe how an editor should remain inactive until begin_edit() is
	called, but the existing doc implies this, and it's intuitively what
	one would expect anyway.  
	
	Finally, one non-code bugaboo about the reversion, which will need
	to be investigated further: 
	
	* tests/libsvn_wc/Makefile.am (noinst_PROGRAMS, commit_test_SOURCES, 
	commit_test_LDADD): Don't build commit-test for now, due to the 
	bizarre linker error mentioned in a comment in the sources.  I think 
	it's just a matter of changing some orderings in commit_test_LDADD, 
	will go back and investigate after this commit.  

2001-02-05 14:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/: svn_tests_main.c (1.15), libsvn_fs/fs-test.c
	(1.10):

	Make the test framework able to run multiple named tests: 
	
	* tests/svn_tests_main.c (main): Handle multiple test number
	arguments.  
	
	Untangle filesystem intertest dependencies, so tests can be run 
	independently: 
	
	* tests/libsvn_fs/fs-test.c (create_berkeley_filesystem, 
	trivial_transaction): Do nothing if run twice.  Latter make sure 
	former has been run, too.  
	(open_berkeley_filesystem, reopen_trivial_transaction, 
	list_live_transactions): Make sure dependees have been run.  

2001-02-05 08:11   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.15), repos.c (1.29):

	Store the transaction name for later usage.  

2001-02-05 08:08   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: activity.c (1.2), dav_svn.h (1.14),
	repos.c (1.28), version.c (1.9):

	Get activity creation working. We now have ACTIVITY -&gt; TXN mappings.  
	
	* version.c (dav_svn_can_be_activity): the resource must be a
	    non-existing activity resource to be allowed as an activity.  
	  (dav_svn_make_activity): make up a transaction name and store a
	    mapping from the activity name (info-&gt;object_name) to the txn
	name.  
	
	* activity.c (dav_svn_get_txn): new function. get a transaction name
	    given an activity id.  
	  (dav_svn_store_activity): new function. store a mapping from an
	    activity id to a transaction name.  
	
	* dav_svn.h (dav_svn_get_txn, dav_svn_store_activity): new
	prototypes 
	
	* repos.c (dav_svn_prep_activity): set the EXISTS flag based on
	    whether the activity already exists in the mapping table.  
	  (dav_svn_get_resource): store the pool into the repository
	  structure 

2001-02-05 07:44   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.27):

	fix typo: wrong prep function.  

2001-02-05 07:20   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: Makefile.am (1.12), activity.c (1.1):

	add a placeholder for some activity manipulation functions 

2001-02-05 07:18   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.71):

	"Hey! Give me back my holy man!" 
	  -- Glory, Buffer the Vampire Slayer (TV Series) 

2001-02-05 06:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: repos.c (1.26), version.c (1.8):

	Shift some code around in repos.c for cleanliness; fix a few
	buglets. Begin some of the versioning code.  
	
	* repos.c (dav_svn_parse_version_uri, dav_svn_parse_working_uri):
	      set the .versioned flag for these resource types 
	  (struct special_defn): rename member from "func" to "parse" 
	  (special_subdirs[]): reorder to match mod_dav.h's
	  dav_resource_type 
	(dav_svn_parse_uri): fix leading comment. use (renamed) -&gt;parse
	  member 
	(dav_svn_prep_regular): new function, extracted from
	  dav_svn_get_resource.  
	(dav_svn_prep_version, dav_svn_prep_history, dav_svn_prep_working, 
	        dav_svn_prep_activity, dav_svn_prep_private): new functions
	      for prepping a resource for usage.  
	  (struct res_type_handler, res_type_handlers): structures to map
	      from a resource type to a prep function 
	  (dav_svn_prep_resource): dispatch to the per-type prep functions 
	  (dav_svn_get_resource): shift code to dav_svn_prep_regular() 
	    Not all resource types exist (e.g. an activity resource is known
	      by its location, but it might not exist (yet)).  
	    Not all resource types are "versioned".  
	
	* version.c (dav_svn_get_vsn_options): add the SVN options 
	  (dav_svn_can_be_activity, dav_svn_make_activity): new functions
	      for handling activities.  
	  (dav_svn_hooks_vsn{}): add new activity hooks 

2001-02-05 03:00  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/WinSVN/: DriveHelpers.bas (1.2,
	milestone-2), ExplorerViewHelpers.bas (1.2),
	ExplorerViewHelpers.cls (1.1, milestone-2), WinSVN.vbp (1.3,
	milestone-2), frmMain.frm (1.2, milestone-2), frmMain.frx (1.2,
	milestone-2):

	Prime the tree view for being rooted at "My Computer", drive, or
	folder, and create beginning of directory combo box to assist in
	changing the tree view's root.  
	
	2001-02-02 Bill Tutt &lt;rassilon@lyra.org&gt; 
	  * DriveHelpers.bas: Added new helper functions PathSkipTail and
	  PathGetTail.  
	
	  * frmMain.bas: Added new ImageCombo drop down, and associated list
	    box.  The intended purpose of this is to help assist in narrowing
	    the scope of the left pane. Moved Tree View event hooks into
	ExplorerViewHelper.  
	
	  * frmMain.frx: New imagelist data for the drive combo box.  
	
	  * ExplorerViewHelpers.bas: Renamed to ExplorererViewHelpers.cls. (VB
	     only lets you hook events from forms, and classes.) 
	
	  * ExplorerViewHelpers.cls: New file. Recipient of all Tree View
	     event hooks from frmMain.bas. Moved node creation into ExpandNodes
	     for use by initial tree loading code. Tweaked tree population code
	to handle having "My Computer", a drive, or a folder as the root
	node of a tree.  
	
	  * WinSVN.vbp: VB munging for renamed files, etc.  

2001-02-05 01:27   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.25):

	Refactor the code a bit to avoid a big-ass get_resource.  
	
	(dav_svn_get_resource): broke URI parsing code out into
	dav_svn_parse_uri() 
	(dav_svn_parse_uri): new code for parsing the different types of SVN
	URIs.  

2001-02-04 23:29   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.24):

	Update for recent Apache/mod_dav changes.  
	
	(dav_svn_get_resource): return type is a dav_error* and the resource
	  is an OUT parameter 
	(dav_svn_get_parent_resource): same 

2001-02-04 23:27   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/fs.c (1.32):

	(svn_fs_create_berkeley) allow the directory to exist beforehand.  

2001-02-04 23:21   Greg Stein &lt;gstein@lyra.org&gt;

	* .cvsignore (1.6, milestone-2):

	forgot this one in a prior commit. compensate for the config.h to 
	svn_private_config.h rename.  

2001-02-04 23:16   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.55), subversion/libsvn_fs/Makefile.am (1.25),
	subversion/tests/libsvn_fs/Makefile.am (1.13):

	Our code can compile with pure POSIX semantics (thanks, APR!).  
	
	One gotcha for the FS (and its tests) library: it includes db.h
	which depends on the u_long type (and db.h is not dynamic enough to
	ensure that u_long exists). For those directories, we specify our
	source as being BSD (in addition to POSIX).  

2001-02-04 22:55   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.72):

	blast a couple compile warnings 

2001-02-04 22:27   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/svnadmin/main.c (1.2):

	quick hack to create an SVN environment 

2001-02-04 21:06   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.31), configure.in (1.54), svn_config.dsp (1.2),
	svn_private_config.hw (1.1), subversion/libsvn_wc/get_editor.c
	(1.162), subversion/include/svn_path.h (1.27),
	subversion/libsvn_subr/path.c (1.30),
	subversion/mod_dav_svn/mod_dav_svn.c (1.18):

	autoconf output is supposed to be private. Otherwise, it may
	conflict with other autoconf'd programs.  
	
	Rename config.h to keep this point in mind, and to prevent filename
	conflict with the (generically-named) config.h. Also remove the
	thing from include/svn_path.h -- including on it in there means that
	everybody must have it available, which just isn't true
	(specifically: it isn't shipped as part of an SDK).  
	
	* configure.in: rename the header to "svn_private_config.h" 
	* autogen.sh: change an echo to reflect the new name 
	* svn_config.dsp: change for the new name 
	* client/diff.c, libsvn_wc/get_editor.c, mod_dav_svn/mod_dav_svn.c:
	    change include file for the new name 
	* include/svn_path.h: remove include of "config.h" 
	  shift SVN_PATH_*_SEPARATOR constants into libsvn_subr/path.c;
	    these are private values for the path code. carry comments along.  
	* libsvn_subr/path.c: constants and comments moved from svn_path.h 
	
	* svn_private_config.hw: added as a copy of config.hw 
	* config.hw: no longer applicable 

2001-02-04 19:00   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.70):

	refactor, avoid code dup...  

2001-02-04 18:52   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.69), subversion/libsvn_wc/entries.c (1.85),
	subversion/libsvn_wc/questions.c (1.48):

	Use sizeof() rather than hard-coded values in case the buffer
	declaration changes (as I think it should).  
	
	* client/main.c (read_from_file): use sizeof rather than len;
	    imagine if len got shorter each time, then you'd ask for less each
	    time.  [ of course, that doesn't happen with apr_full_read, but
	still... ] 
	
	* libsvn_wc/entries.c, libsvn_wc/questions.c: use sizeof rather than
	BUFSIZ 

2001-02-04 18:25   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_subr/Makefile.am (1.16):

	delta builds on subr. reorder the libs.  

2001-02-04 17:41   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/: libsvn_fs/Makefile.am (1.12),
	libsvn_subr/Makefile.am (1.15):

	add missing libsvn_delta library from some of the link steps 

2001-02-04 16:34   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.53):

	we don't refer to unistd.h any more. toss it.  

2001-02-02 17:09  Bill Tutt &lt;rassilon@lyra.org&gt;

	* AUTHORS (1.10):

	2001-02-02 Bill Tutt &lt;rassilon@lyra.org&gt; 
	    * AUTHORS:  Greg was nice enough to toss me a slightly more
	    convenient address.  

2001-02-02 11:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.67):

	(SVN_ERR_MALFORMED_XML): Doc fix from Sam TH &lt;sam@uchicago.edu&gt;.  

2001-02-02 02:39  Bill Tutt &lt;rassilon@lyra.org&gt;

	* IDEAS (1.20):

	2001-02-01 Bill Tutt &lt;rassilon@lima.mudlib.org&gt; 
	    * IDEAS: Add idea tor common diff output parsing code in order
	    to calculate the required data for a visual diff.  

2001-02-02 02:27  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/svn_com/: MarshalArray.h (1.3), SVN.cpp
	(1.4):

	2001-02-01 Bill Tutt &lt;rassilon@lima.mudlib.org&gt; 
	    * SVN.cpp (CSVNWorkingCopy::wc_statuses): Add cast to remove 
	    compiler warning.  
	    * MarshalArray.h: Document limitation with current code not
	    following all of the connection point rules atm.  

2001-02-01 22:24   Branko Cibej &lt;brane@xbc.nu&gt;

	* STACK (1.68):

	And they told me time and again not to volunteer for anything ...  

2001-02-01 20:29   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/clients/win32/svn_com/svn_com.dsp (1.4, milestone-2):

	* svn_com.dsp: Change to DOS format line-endings.  
	
	Now why MSVC insists on having lines end in curlifs, I never will
	understand.  

2001-02-01 19:30   Branko Cibej &lt;brane@xbc.nu&gt;

	* notes/guis/pics/ClearCase-lsvtree-README (1.2, milestone-2):

	Stuff about the tooltip in the second shot.  

2001-02-01 18:40   Branko Cibej &lt;brane@xbc.nu&gt;

	* notes/guis/pics/: ClearCase-lsvtree-1.gif (1.1, milestone-2),
	ClearCase-lsvtree-2.gif (1.1, milestone-2), ClearCase-lsvtree-3.gif
	(1.1, milestone-2), ClearCase-lsvtree-4.gif (1.1, milestone-2),
	ClearCase-lsvtree-README (1.1):

	ClearCase version tree.  

2001-02-01 17:35   Bob Miller &lt;kbob@jogger-egg.com&gt;

	* notes/difftools/pics/: xxdiff-1.png (1.1), xxdiff-README (1.1)
	(utags: milestone-2):

	Added a screenshot of xxdiff to subversion/difftools/notes/pics/ .  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2001-02-01 07:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/guis/: README (1.1), pics/README (1.1) (utags:
	milestone-2):

	Added guis/ and guis/pics/ areas to notes/ subdir 

2001-02-01 06:24   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.23):

	Add note about include and lib directories for DB3 for Win32 builds.  

2001-01-31 14:57  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* STACK (1.67):

	Added bug inquiry regarding timestamps 

2001-01-31 11:36  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* configure.in (1.52):

	Adding client/test/ to list of automagically built thingamabobs.  

2001-01-31 11:02  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* subversion.dsw (1.11):

	Updated VS workspace to reflect new location of the test project
	files.  
	
	* subversion.dsw:  See above.  

2001-01-31 10:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.51), subversion/Makefile.am (1.21):

	Build `svnadmin' iff `libsvn_fs' is built too.  
	
	* configure.in, Makefile.am (@SVNADMIN@): new build variable defined 
	  only if @LIBSVN_FS@ is defined.  

2001-01-31 08:47  Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;

	* subversion/: libsvn_delta/libsvn_delta.dsp (1.5),
	tests/libsvn_delta/deltaparse_test.dsp (1.5),
	tests/libsvn_delta/random_test.dsp (1.4, milestone-2),
	tests/libsvn_delta/svndiff_test.dsp (1.4, milestone-2),
	tests/libsvn_delta/vdelta_test.dsp (1.4, milestone-2),
	tests/libsvn_delta/xml_output_test.dsp (1.4, milestone-2),
	tests/libsvn_fs/fs_test.dsp (1.4), tests/libsvn_fs/skel_test.dsp
	(1.5, milestone-2), tests/libsvn_subr/hashdump_test.dsp (1.5,
	milestone-2), tests/libsvn_subr/string_test.dsp (1.5, milestone-2),
	tests/libsvn_wc/checkout_test.dsp (1.4, milestone-2),
	tests/libsvn_wc/commit_test.dsp (1.5):

	This change is to support the moving of the test modules that
	happened as part of Change #8.  Since each of the test programs
	links it's respective library, the path to that library needs to be
	changed to reflect the new location of the test modules. Also, the
	libsvn_delta project file needed to include default_editor.c as a
	source file.  
	
	    * subversion/libsvn_delta/libsvn_delta.dsp - Added default_editor.c
	            to project 
	
	    * subversion/tests/libsvn_delta/deltaparse_test.dsp - Changed
	            location of libsvn_delta.lib 
	
	    * subversion/tests/libsvn_delta/random_test.dsp - Changed location
	            of libsvn_delta.lib 
	
	    * subversion/tests/libsvn_delta/svndiff_test.dsp - Changed location
	            of libsvn_delta.lib 
	
	    * subversion/tests/libsvn_delta/vdelta_test.dsp - Changed location
	            of libsvn_delta.lib 
	
	    * subversion/tests/libsvn_delta/xml_output_test.dsp - Changed
	            location of libsvn_delta.lib 
	
	    * subversion/tests/libsvn_fs/fs_test.dsp - Changed location of 
	            libsvn_fs.lib 
	
	    * subversion/tests/libsvn_fs/skel_test.dsp - Changed location of 
	            libsvn_fs.lib 
	
	    * subversion/tests/libsvn_subr/hashdump_test.dsp - Changed location
	            of libsvn_subr.lib 
	
	    * subversion/tests/libsvn_subr/string_test.dsp - Changed location of 
	            libsvn_subr.lib 
	
	    * subversion/tests/libsvn_wc/checkout_test.dsp - Changed location of 
	            libsvn_wc.lib 
	
	    * subversion/tests/libsvn_wc/commit_test.dsp - Changed location of 
	            libsvn_wc.lib 

2001-01-30 22:13   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* notes/difftools/pics/: FileMerge-README (1.1), FileMerge1.jpg
	(1.1), FileMerge2.jpg (1.1), FileMerge3.jpg (1.1), FileMerge4.jpg
	(1.1), FileMerge5.jpg (1.1) (utags: milestone-2):

	Added FileMerge screenshots and accompanying information.  

2001-01-30 20:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* BUGS (1.3):

	Q: How late is it in Chicago? 
	
	A: Too late.  

2001-01-30 20:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion.dsw (1.10), subversion/tests/TEST-FRAMEWORK (1.2),
	subversion/tests/libsvn_delta/deltaparse_test.dsp (1.4),
	subversion/tests/libsvn_fs/fs_test.dsp (1.3),
	subversion/tests/libsvn_fs/skel_test.dsp (1.4),
	subversion/tests/libsvn_subr/hashdump_test.dsp (1.4),
	subversion/tests/libsvn_subr/sting_test.dsp (1.4),
	subversion/tests/libsvn_subr/string_test.dsp (1.4),
	subversion/tests/libsvn_wc/commit_test.dsp (1.4):

	Change "tests-common" to "tests" everywhere.  Also: 
	
	* subversion/tests/libsvn_subr/string_test.dsp: Replaces misnamed 
	file "sting_test.dsp".  
	
	* subversion.dsw: Compensate for above change.  

2001-01-30 20:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/difftools/: README (1.1), pics/README (1.1) (utags:
	milestone-2):

	Add scratch areas for diff-tool photos 

2001-01-30 17:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-test.sh (1.11):

	Wow, an utterly unprecedented change.  I'm sure this will come as a 
	surprise to the whole list.  Everyone will wonder how I figured out 
	what the problem was.  I'll be a hero!  I'll build my own backhoe! 
	
	(TEST_DELTA): It's "tests", not "tests-common".  

2001-01-30 17:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/Makefile.am (1.10):

	(SUBDIRS): Put . first, you'll never regret it.  

2001-01-30 17:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.12, milestone-2), STACK (1.66), configure.in (1.50),
	subversion.dsw (1.9), subversion/Makefile.am (1.20),
	subversion/include/svn_delta.h (1.137),
	subversion/libsvn_client/Makefile.am (1.12),
	subversion/libsvn_delta/Makefile.am (1.16),
	subversion/libsvn_delta/compose_editors.c (1.9),
	subversion/libsvn_delta/default_editor.c (1.1),
	subversion/libsvn_delta/xml_output.c (1.28),
	subversion/libsvn_fs/Makefile.am (1.24),
	subversion/libsvn_ra_dav/Makefile.am (1.6),
	subversion/libsvn_ra_dav/commit.c (1.27),
	subversion/libsvn_ra_dav/fetch.c (1.34),
	subversion/libsvn_subr/Makefile.am (1.15),
	subversion/libsvn_wc/Makefile.am (1.26),
	subversion/libsvn_wc/get_editor.c (1.161),
	subversion/mod_dav_svn/Makefile.am (1.11),
	subversion/tests/Makefile.am (1.9),
	subversion/tests/svn_test_editor.c (1.16),
	subversion/tests/libsvn_delta/Makefile.am (1.15),
	subversion/tests/libsvn_fs/Makefile.am (1.11),
	subversion/tests/libsvn_fs/fs-test.c (1.9),
	subversion/tests/libsvn_fs/skel-test.c (1.14),
	subversion/tests/libsvn_subr/Makefile.am (1.14),
	subversion/tests/libsvn_wc/Makefile.am (1.15):

	This is Change #8, from the set of 8 or so changes posted by Ben to 
	the dev list and now recorded in the STACK file.  
	
	In the delta library, a single routine returns a "dummy" editor 
	structure full of pointers to do-nothing functions.  The editor 
	implementor then fills in only the ones it cares about.  
	
	To avoid circular dependency between the test library and 
	libsvn_delta, the "tests-common/" directory has been renamed
	"tests/" and all library-specific test subdirs have been moved into
	it.  The tests are now all built together, after all the libraries.  
	
	* subversion/include/svn_delta.h (svn_delta_default_editor):
	Prototype and document.  
	
	* subversion/libsvn_delta/default_editor.c: New file, implements a 
	default editor template.  
	
	* subversion/libsvn_delta/xml_output.c (svn_delta_get_xml_editor): 
	Construct editor the new way.  
	(tree_editor): Now local to svn_delta_get_xml_editor.  
	
	* subversion/libsvn_delta/compose_editors.c
	(svn_delta_compose_editors, composed_editor): Same.  
	
	* subversion/client/trace-update.c (svn_cl__get_trace_update_editor, 
	trace_editor): Same.  
	
	* subversion/client/trace-commit.c (svn_cl__get_trace_commit_editor, 
	trace_editor): Same.  
	
	* subversion/libsvn_ra_dav/commit.c (svn_ra_dav__get_commit_editor, 
	commit_editor): Same.  
	
	* subversion/libsvn_ra_dav/fetch.c (svn_ra_dav__get_update_editor, 
	update_editor): Same.  Also, moved #if to top of file, to avoid 
	warnings about unused functions.  
	
	* subversion/libsvn_wc/get_editor.c (make_editor, tree_editor):
	Same.  
	
	Rearrangements to consolidate tests and avoid circular dependencies: 
	
	     tests/                 replaces   tests-common/ 
	     tests/libsvn_delta/    replaces   libsvn_delta/tests/ 
	     tests/libsvn_fs/       replaces   libsvn_fs/tests/ 
	     tests/libsvn_ra_dav/   replaces   libsvn_ra_dav/tests/ 
	     tests/libsvn_wc/       replaces   libsvn_wc/tests/ 
	     tests/libsvn_vcdiff/   replaces   vcdiff/tests/ 
	     tests/libsvn_subr/     replaces   libsvn_subr/tests/ 
	     tests/libsvn_string/   replaces   libsvn_string/tests/ 
	     tests/mod_dav_svn/     replaces   mod_dav_svn/tests/ 
	
	* Makefile.am (AC_OUTPUT): Compensate for above changes.  
	
	* subversion/tests/svn_test_editor.c (svn_test_get_editor): Use new 
	svn_delta_default_editor.  
	
	* subversion/Makefile.am (SUBDIRS): Put tests/ subdir last.  
	
	* subversion/tests/Makefile.am (SUBDIRS): Mention new subdirs.  
	
	* subversion/libsvn_client/Makefile.am, 
	subversion/libsvn_fs/Makefile.am, 
	subversion/libsvn_ra_dav/Makefile.am, 
	subversion/libsvn_subr/Makefile.am,
	subversion/libsvn_wc/Makefile.am, subversion/mod_dav_svn/Makefile.am
	(SUBDIRS): Removed this rule, as it was used only for the
	now-obsolete tests/ subdirs.  
	
	* subversion/client/Makefile.am, 
	subversion/tests/libsvn_delta/Makefile.am, 
	subversion/tests/libsvn_fs/Makefile.am, 
	subversion/tests/libsvn_subr/Makefile.am, 
	subversion/tests/libsvn_wc/Makefile.am: Replace 
	@SVN_TESTS_COMMON_EDITOR_LIBS@ and @SVN_TESTS_COMMON_MAIN_LIBS@ with 
	@SVN_TESTS_EDITOR_LIBS@ and @SVN_TESTS_MAIN_LIBS@ respectively.  
	
	* subversion/tests/libsvn_delta/Makefile.am (deltaparse_test_LDADD): 
	Reverse order of test editor library and delta library.  How Ben
	knew that this would make the linker error go away is one of the
	great mysteries of my life at the moment.  
	
	* subversion/tests/libsvn_fs/skel-test.c, 
	subversion/tests/libsvn_fs/fs-test.c: Fix #include paths.  
	
	* configure.in, README, subversion.dsw: Compensate for above
	changes.  
	
	* STACK: Remove Change #8.  

2001-01-30 15:35  C. Michael Pilato &lt;cmpilato@collab.net&gt;

	* configure.in (1.49), subversion/clients/win32/svn_com/svn_com.dsp
	(1.3), subversion/include/svn_path.h (1.26),
	subversion/libsvn_subr/path.c (1.29):

	Fixes path inconsistencies on Windows.  More generally, actually
	makes use of the "style" parameter passed to the path library
	functions to choose the right path delimeter ('/' or '\' at this
	time).  
	
	* config.hw (SVN_PATH_LOCAL_SEPARATOR): 
	  Added this #define for Windows usage.  
	
	* configure.in (SVN_PATH_LOCAL_SEPARATOR): 
	  Added this #define for those systems that use autoconf.  
	
	* svn_com.dsp: 
	  Added the subversion root directory to the include path so
	  config.h can be found by the inclusion of the path headers.  
	
	* svn_path.h (SVN_PATH_REPOS_SEPARATOR, SVN_PATH_URL_SEPARATOR): 
	  Added url separator define, and changed naming of repos to be an
	  exported symbol.  
	
	* path.c (get_separator_from_style): 
	  Added new function for choosing an appropriate path separator,
	  given a subversion path style.  Also changed a variety of
	  functions in this module to make use of this new function instead of
	  simply using SVN_PATH_REPOS_SEPARATOR.  

2001-01-30 12:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* AUTHORS (1.9):

	Added Mark Murphy, Bill Tutt, C. Michael Pilato.  

2001-01-29 18:25   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_subr/io.c (1.28), libsvn_wc/log.c (1.85),
	libsvn_wc/questions.c (1.47):

	* libsvn_subr/io.c (svn_io_check_path, apr_transfer_file_contents, 
	svn_io_file_affected_time): Call apr_stat with APR_FINFO_MIN instead 
	of APR_FINFO_NORM, so that we don't get an APR_INCOMPLETE on Win32.  
	
	* libsvn_wc/log.c (log_do_detect_conflict, conflict_if_rejfile):
	Likewise.  
	
	* libsvn_wc/questions.c (filesizes_definitely_different_p):
	Likewise.  

2001-01-29 18:20   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/clients/win32/svn_com/.cvsignore (1.1, milestone-2):

	   "Are we visible from the earth?" I asked.  
	   "Why?" 
	   "I knew someone -- who was interested in astronomy. It occurred
	to me that it would be odd if -- my friend -- chanced to be looking
	   through a telescope and should chance to see us." "It would need the
	most powerful telescope on earth even now to see us as the minutest
	speck." 

2001-01-29 17:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.65):

	Ooops, really, change #1 is done.  Really.  

2001-01-29 17:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.64):

	Fixed add/del logic bugs, update my STACK.  
	 (I used to be a FUNDAMENTALIST, but then I heard about the 
	  HIGH RADIATION LEVELS and bought an ENCYCLOPEDIA!!) 

2001-01-29 17:03   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/clients/win32/svn_com/svn_com.dsp (1.2):

	* clients/win32/svn_com/svn_com.dsp: Define APR_DECLARE_STATIC to
	avoid linking errors.  

2001-01-29 17:02   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_client/libsvn_client.dsp (1.6):

	* client/subversion_client.dsp: Added Added diff.c and diff-cmd.c to
	sources list.  
	
	* libsvn_client/libsvn_client.dsp: Added diff.c to sources list.  

2001-01-29 16:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.84):

	Entry add/del flag logic actually works now.  Phew.  
	
	(fold_entry):  correctly merge the incoming flag state into the
	entry; we interpret the integer as a *command* in this routine,
	honoring the clear bits.  
	
	(normalize_entry):  make the entry's attribute hash *exactly* match 
	the state flags, ignoring clear bits.  
	
	(internal_fold_sync): handle special case where interpret_changes() 
	might deliberately remove the entry.  

2001-01-29 16:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.63):

	Removed Change #1.  Since it's done it can be removed from the
	stack, though it's still under discussion (most especially with Greg
	Hudson) and may have an uncertain future.  I hope I'll convince him
	it's a good idea in the long run, though. :-) 

2001-01-28 10:56   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_delta/xml_output.c (1.27):

	* xml_output.c (close_edit): Moved before first use to eliminate
	warnings.  Removed unused local variable.  

2001-01-28 10:45   Branko Cibej &lt;brane@xbc.nu&gt;

	* configure.in (1.48):

	* configure.in: Remove shorthands for private include directories.  

2001-01-28 10:43   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/Makefile.am (1.10):

	* Makefile.am (INCLUDES): Use $(srcdir)/.. rather than 
	@SVN_LIBSVN_FS_INCLUDES@.  
	(COMMON_LIBS): Reformat.  

2001-01-28 09:50   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/txn-table.c (1.11):

	* txn-table.c (svn_fs__get_txn_list): Copy the transaction ID to the
	right pool, and to make sure it's null-terminated.  

2001-01-26 23:43   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_output.c (1.26):

	Redo Karl's change to this file.  Instead of ref-counting directory 
	batons, keep a count of open files in edit_context.  Open issue: as 
	with Karl's approach, svn_delta_get_xml_editor generates some output 
	before the first editor call; I'm not sure I consider that within
	the contract.  
	
	Relative to rev 1.24: 
	(replace_root): Removed.  
	(close_edit): No longer an editor function; accepts a struct 
	edit_context * instead of a void *.  
	(edit_context): Replaces edit_baton.  All references changed.  Add
	open_file_count and root_dir_closed fields to track when the edit is
	over.  
	(close_directory): Note when the root dir is closed, and close the 
	edit if there are no open files at that point.  
	(add_file, replace_file): Bump open_file_count.  
	(close_file): Decrement open_file_count, and close the edit if the 
	root dir has been closed and there are no open files.  
	(tree_editor): Remove entries for replace_root and close_edit.  
	(svn_delta_get_xml_editor, close_edit): Don't use a subpool for the 
	editor.  We still use subpools for the directory and file batons 
	because they use a large, unbounded amount of storage together, but 
	there's no need for a subpool for the editor itself.  
	(svn_delta_get_xml_editor): Conform to new interface.  

2001-01-26 20:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.20), include/svn_delta.h
	(1.136), include/svn_fs.h (1.34), include/svn_ra.h (1.28),
	include/svn_test.h (1.8), include/svn_wc.h (1.70),
	libsvn_client/apply_edits.c (1.10), libsvn_client/checkout.c
	(1.13), libsvn_client/client.h (1.9), libsvn_client/commit.c
	(1.16), libsvn_client/update.c (1.10),
	libsvn_delta/compose_editors.c (1.8), libsvn_delta/delta.h (1.49),
	libsvn_delta/xml_output.c (1.25), libsvn_delta/xml_parse.c (1.142),
	libsvn_fs/delta.c (1.21), libsvn_ra_dav/commit.c (1.26),
	libsvn_ra_dav/fetch.c (1.33), libsvn_ra_dav/ra_dav.h (1.6),
	libsvn_repos/delta.c (1.21), tests/libsvn_delta/deltaparse-test.c
	(1.61), tests/libsvn_delta/xml-output-test.c (1.10),
	libsvn_wc/adm_crawler.c (1.71), libsvn_wc/adm_ops.c (1.40),
	libsvn_wc/get_editor.c (1.160), libsvn_wc/status.c (1.25),
	tests/libsvn_wc/checkout-test.c (1.38),
	tests/libsvn_wc/commit-test.c (1.16), tests/svn_test_editor.c
	(1.15) (utags: post-edit-baton-removal):

	This is Change #1, from the set of 8 or so changes posted by Ben to 
	the dev list and now recorded in the STACK file.  Prior to this 
	commit, the tree was tagged with `pre-edit-baton-removal'.  
	
	When an editor is created, the root_dir_baton is returned and used
	as the baton for the first call requiring a dir baton.  There is no
	more externally visible edit_baton, and the editor functions
	replace_root() and close_edit() are gone.  This resolves the
	ambiguity about whether replace_root() can be called multiple times
	per edit, or only once.  Since you now get a root directory baton
	when you start the edit, clearly you can call replace_directory() on
	it only once.  
	
	As a result of this change, the editor in libsvn_delta/xml_output.c 
	has become a reference counting editor, so it can continue to handle 
	postfix text-deltas.  Wheras formerly its close_edit() took care of 
	closing the delta-pkg, now close_directory() has to close the 
	outermost tree-delta, while leaving the closing of the delta-pkg for 
	free_dir_baton(), which will only get run after the last postfix
	text delta is sent and the top dir baton's reference count reaches
	zero.  
	
	Or that's the idea, anyway.  Unfortunately, I seem to have broken
	the xml output editor, and after spending a few hours trying to make
	it work under the new scheme, I'm ready for Greg Hudson to have a
	swing at it.  I'm pretty sure there's nothing theoretically wrong
	with doing things in the ref counting way, but am just not familiar
	enough with the code, particularly get_to_elem(), to know what I'm
	doing wrong.  
	
	In the meantime, I've commented out various tests, so `make check' 
	will still work for sufficiently small values of "work".  (Actually,
	I think the fs tests are failing for some reason, but that's not
	related to this commit.)  Greg, to reproduce the xml problems,
	uncomment the "exit 0" in client/tests/svn-test.sh and watch svn try
	to update a working copy from a malformed commit-2.xml.  
	
	* libsvn_delta/xml_output.c (replace_root, close_edit): Removed.  
	(edit_context): Replaces edit_baton.  
	(tree_editor): Remove entries for replace_root and close_edit.  
	(svn_delta_get_xml_editor): Replace edit_baton with root_dir_baton.  
	(everywhere): Replace edit_baton with edit_context.  
	(file_baton): Added new parent_dir_baton field.  
	(dir_baton): Same new parent_dir_baton, ref_count fields.  
	(make_file_baton): Take parent_dir_baton, bump its ref_count.  
	(make_dir_baton): Same as above, plus initialize own ref_count.  
	(decrement_ref_count, free_dir_baton): New funcs, former invokes 
	latter when dir baton's ref_count reaches zero.  Latter handles root 
	directory specially.  
	(close_file, close_directory): Decrement ref_counts appropriately.  
	
	* include/svn_delta.h (svn_delta_edit_fns_t): Remove replace_root 
	and close_edit, change documentation accordingly.  
	(svn_delta_compose_editors, svn_delta_wrap_editor, 
	svn_delta_get_xml_editor, svn_delta_make_xml_parser, 
	svn_delta_xml_auto_parse): Replace edit_baton parameters with 
	root_dir_baton parameters.  
	
	* include/svn_fs.h (svn_fs_dir_delta): Replace edit_baton parameter 
	with root_dir_baton parameter.  
	
	* include/svn_wc.h (svn_wc_get_checkout_editor, 
	svn_wc_get_update_editor, svn_wc_crawl_local_mods, 
	svn_wc_crawl_revisions): Replace edit_baton parameter with 
	root_dir_baton parameter.  
	
	* include/svn_ra.h (svn_ra_plugin_t): Replace edit_baton parameter
	with root_dir_baton parameter in get_commit_editor and do_checkout. 
	In do_update, do the same for report_baton and update_baton, which
	are also edit_batons anyway.  Report editors in general are probably 
	obsolete and about to be replaced with something simpler.  
	
	* include/svn_client.h (svn_client_checkout, svn_client_update, 
	svn_client_commit): Replace edit_baton parameter with root_dir_baton 
	parameter.  
	
	* include/svn_test.h (svn_test_get_editor): Replace edit_baton 
	parameter with root_dir_baton parameter.  
	
	* client/trace-update.c, client/trace-commit.c (edit_context): New 
	struct type, replaces edit_baton.  
	(dir_baton): Store an edit_context now, not an edit_baton.  
	(replace_root, close_edit): Removed.  
	(trace_editor): Remove replace_root and close_edit.  
	(svn_cl__get_trace_commit_editor, svn_cl__get_trace_update_editor): 
	return a root_dir_baton.  Construct it to contain an edit_context.  
	
	* libsvn_delta/delta.h (svn_xml__digger_t): Remove edit_baton.  
	Replace rootdir_baton with root_dir_baton, for consistency.  
	
	* libsvn_delta/tests/deltaparse-test.c (main): Replace edit_baton
	with root_dir_baton.  
	
	* libsvn_delta/tests/xml-output-test.c (main): Replace edit_baton
	with root_dir_baton, get rid of now-superfluous root_baton.  Remove
	calls to replace_root and close_edit.  
	
	* libsvn_delta/xml_parse.c (svn_delta_make_xml_parser, 
	svn_delta_xml_auto_parse): Replace edit_baton with root_dir_baton.  
	(xml_handle_start): Remove call to replace_root.  Also remove
	setting of initial frame's baton, which we take care of in
	do_stack_append now.  
	(do_stack_append): Set baton of initial stack frame to 
	root_dir_baton.  
	(svn_delta_xml_parsebytes): Don't call close_edit.  
	
	* libsvn_delta/compose_editors.c (edit_baton): Removed.  
	(dir_baton): Get the fields edit_baton used to have.  
	(add_directory, replace_directory): Put new stuff into child dir
	batons.  
	
	* libsvn_delta/delta.c (svn_fs_dir_delta): Take root_dir_baton
	instead of edit_baton.  Don't call replace_root.  
	
	* client/cl.h (svn_cl__get_trace_update_editor, 
	svn_cl__get_trace_commit_editor): Take root_dir_baton not
	edit_baton.  
	
	* client/checkout-cmd.c (svn_cl__checkout): Use root_dir_baton 
	instead of edit_baton with the trace editor.  
	
	* client/commit-cmd.c (svn_cl__commit): Use root_dir_baton instead
	of edit_baton with the trace editor.  
	
	* client/update-cmd.c (svn_cl__update): Use root_dir_baton instead
	of edit_baton with the trace editor.  
	
	* libsvn_client/update.c (svn_client_update): Use root_dir_baton 
	instead of edit_baton with the update editors.  
	
	* libsvn_client/checkout.c (svn_client_checkout): Use root_dir_baton 
	instead of edit_baton with the checkout editors.  
	
	* libsvn_client/commit.c (svn_client_commit): Use root_dir_baton 
	instead of edit_baton with the commit editors.  
	
	* libsvn_client/client.h, libsvn_client/apply_edits.c (apply_delta, 
	do_edits, svn_client__checkout_internal,
	svn_client__update_internal): Use root_dir_batons instead of
	edit_batons with all editors.  
	
	* libsvn_ra_da/tests/ra-dav-test.c (main): Use root_dir_baton
	instead of edit_baton.  Don't call close_edit.  
	
	* libsvn_ra_dav/ra-commit.c (main): Use root_dir_baton instead of 
	edit_baton.  
	
	* libsvn_ra_dav/commit.c (commit_replace_root): Removed.  
	(commit_close_edit): Removed.  
	(dir_baton_t): New field `is_root'.  
	(svn_ra_dav__get_commit_editor): Replace edit_baton parameter with 
	root_dir_baton parameter.  Initialize root_dir_baton using code from 
	replace_root(), setting new `is_root' field.  
	(commit_close_dir): If this is the root dir baton, do what
	close_edit used to do.  
	
	* libsvn_ra_dav/fetch.c (fetch_ctx_t): Replace edit_baton field with 
	root_dir_baton.  
	(svn_ra_dav__checkout): Fold edit_baton and root_baton into a single 
	root_dir_baton.  
	(svn_ra_dav__get_update_editor): Replace edit_baton with 
	root_dir_baton, even though this function is #if'd out right now 
	anyway.  
	(update_editor): Remove the null placeholders where 
	update_replace_root and update_close_edit would have been.  How 
	interestingly coincidental that those were the only two not 
	implemented here! 
	
	* libsvn_ra_dav/ra_dav.h (svn_ra_dav__get_commit_editor, 
	svn_ra_dav__checkout): Replace edit_baton with root_dir_baton.  
	
	* libsvn_wc/tests/checkout-test.c (apply_delta): Use root_dir_baton 
	instead of edit_baton.  
	
	* libsvn_wc/tests/commit-test.c (main): Use root_dir_baton instead
	of edit_baton.  
	
	* libsvn_wc/adm_crawler.c (svn_wc_crawl_local_mods): Replace 
	edit_baton with root_dir_baton.  Replace close_edit call with a call 
	to close_directory on that root_dir_baton.  
	(svn_wc_crawl_revisions): Don't call close_edit.  
	(do_dir_replaces): Use root_dir_baton instead of edit_baton.  Don't 
	call replace_root, just use the baton we have.  
	(report_local_mods): Use root_dir_baton instead of edit_baton.  
	
	* libsvn_wc/get_editor.c (make_editor): Replace edit_baton with 
	root_baton, set up an edit_context instead.  Do what replace_root
	used to do.  
	(free_dir_baton): Do what close_edit used to do, if this is the root 
	directory baton.  
	(edit_context): Replaces edit_baton, still lives in dir_baton.  
	(replace_root): Removed.  
	(close_edit): Removed.  
	(replace_root): Removed.  
	(tree_editor): Removed replace_root and close_edit members.  
	(svn_wc_get_update_editor, svn_wc_get_checkout_editor): Use 
	root_dir_baton instead of edit_baton.  
	
	* libsvn_wc/tests-common/svn_test_editor.c (edit_context): Replaces 
	edit_baton.  
	(test_replace_root, test_close_edit): Removed.  
	(svn_test_get_editor): Do what test_replace_root used to do.  Don't
	put test_replace_root and test_close_edit in the editor anymore.  
	(close_directory): When called on the root directory baton, do what 
	test_close_edit used to do.  
	
	Unrelated changes: 
	
	* libsvn_delta/xml_parse.c (xml_handle_start): Fix typo.  
	
	* libsvn_delta/compose_editors.c (add_directory, replace_directory): 
	Set child_baton's parent to parent_baton instead of NULL.  Why was
	it being set to NULL before, anyway? 
	
	* libsvn_wc/adm_ops.c (svn_wc_get_pristine_copy_path): Don't bother 
	declaring unused err variable.  

2001-01-26 15:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/Makefile.am (1.19, post-edit-baton-removal,
	pre-edit-baton-removal):

	Fix library build order;  `make clean && make' was failing, because 
	svnadmin was trying to link against libsvn_fs, which didn't yet
	exist.  

2001-01-26 13:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.19), include/svn_wc.h
	(1.69), libsvn_wc/adm_ops.c (1.39) (utags: pre-edit-baton-removal):

	After talking with Karl, simplify/cleanup diff command.  
	
	* adm_ops.c (svn_wc_get_pristine_copy_path):  remove the copying of 
	  the text-base;  it may interfere with updates and such.  Instead 
	  just a return a path directly to text-base.  
	
	* svn_wc.h (svn_wc_get_pristine_copy_path): update doc string.  
	
	* diff.c (svn_cl__print_file_diff):  don't need remove temporary
	  file anymore;  also some comments about what future architecure
	  should be.  
	
	* svn_client.h (svn_client_file_diff):  more doc comments on future.  

2001-01-26 11:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_client.h (1.18):

	(svn_client_file_diff):  add to docstring.  

2001-01-26 08:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.17), include/svn_wc.h
	(1.68), libsvn_client/Makefile.am (1.11, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_client/diff.c (1.1,
	post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_wc/adm_ops.c (1.38), libsvn_wc/log.c (1.84,
	post-edit-baton-removal, pre-edit-baton-removal):

	Late-night coding itch:  just for fun, let's implement `svn diff'.
	:-) 
	
	Everything compiles and passes `make check', but the `svn diff' 
	command currently segfaults in the middle of apr_put_os_file().  I'm 
	sure we'll fix this momentarily.  
	
	* libsvn_client/diff.c (svn_client_file_diff): new file and func,
	  able to fetch a path to a pristine file copy from either WC or RA.  
	
	* svn_client.h (svn_client_file_diff): declaration.  
	
	* adm_ops (svn_wc_get_pristine_copy_path): make a copy of a
	  text-base file from into adminitrative tmp area, and return a path
	to it.  
	
	* log.c (svn_wc_run_cmd_in_directory):  make run_cmd_in_directory a 
	  public routine.  The client sure finds it handy for running
	  `diff', and it's not particularly WC-specific.  
	
	  (log_do_run_command):  change call to above.  
	
	* svn_wc.h (svn_wc_get_pristine_copy_path):  new func declaration 
	  (svn_wc_run_cmd_in_directory):  now a public declaration.  
	
	* client/diff.c (svn_cl__print_file_diff): new file and func for 
	  command-line, prints out a file diff; uses svn_client_file_diff().  
	
	* cl.h (svn_cl__print_file_diff):  declaration.  
	
	* diff-cmd.c (svn_cl__diff_command): new file and func, top-most 
	  caller.  
	
	* libsvn_client/Makefile.am:  compile diff.c 
	
	* client/Makefile.am:  compile diff.c and diff-cmd.c 
	
	* main.c (cmd_table): add diff command 

2001-01-26 07:06   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* autogen.sh (1.30, post-edit-baton-removal,
	pre-edit-baton-removal):

	I had to change the neon version check, as that if-expression
	doesn't work in the solaris bourne shell, I hope this approach will
	work on most platforms PR: Obtained from: Submitted by: Reviewed by: 

2001-01-25 16:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.83):

	(log_do_run_cmd):  fix array size, doh! 
	
	Submitted by Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt;.  Thanks
	Kevin. :) 

2001-01-25 14:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.66, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_wc/adm_ops.c (1.37),
	libsvn_wc/entries.c (1.83, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_wc/get_editor.c (1.159,
	pre-edit-baton-removal), libsvn_wc/log.c (1.82), libsvn_wc/wc.h
	(1.142, post-edit-baton-removal, pre-edit-baton-removal):

	Major rewrite of WC interface for changing an `entry' on disk.  
	
	We now have two routines to do this: one dumb one, and one smart
	one.  The "smart" one will alter an entry's attributes according to
	the caller's *intent*, while the dumb one will just merge a direct
	(and possibly incorrect) change.  
	
	* entries.c (normalize_entry):  renamed from sync_entry, which was 
	  overloading the term "sync".  
	
	  (svn_wc__entry_fold_sync):  renamed from svn_wc__entry_merge_sync.  
	  Again, "merge" is a loaded term we'd like to avoid.  
	
	  (svn_wc__entry_fold_sync_intelligently): new function which may 
	  actually end up making *different* entry changes than what you
	  asked for, based on an entry's current context.  
	
	  (internal_fold_sync): new function, shared code for the two exported 
	  fold_sync routines.  
	
	  (fold_entry):  renamed from stuff_entry.  It's doing a fold (merge), 
	  which is more descriptive than "stuffing" an entry.  Also update
	  doc string for clarity.  
	
	  (interpret_changes): new routine.  the "logic" module called by 
	  fold_sync_intelligently that (potentially) alters requested entry 
	  changes into something different, based on an entry's current 
	  context.  
	
	* wc.h (svn_wc_entry__fold_sync, 
	  svn_wc__entry_fold_sync_intelligently): new declarations and docs.  
	
	* svn_error.h (SVN_ERR_WC_ENTRY_BOGUS_MERGE):  new error type.  
	
	* adm_ops.c (svn_wc_delete_file, svn_wc_add_file): change all calls
	  to __entry_merge_sync to __entry_fold_sync_intelligently.  
	
	* get_editor.c (free_dir_baton, add_directory): same as above.  
	
	* log.c (log_do_detect_conflict, log_do_modify_entry, 
	  conflict_if_rejfile):  same as above.  

2001-01-25 07:53   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.47, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/Makefile.am (1.18):

	add svnadmin to the build.  

2001-01-25 07:44   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/svnadmin/: .cvsignore (1.1, milestone-2), Makefile.am
	(1.1), main.c (1.1) (utags: post-edit-baton-removal,
	pre-edit-baton-removal):

	"There can be only one." 

2001-01-25 07:37   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/fs.c (1.31, post-edit-baton-removal,
	pre-edit-baton-removal):

	doc fix.  

2001-01-25 07:23   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/fs.c (1.30):

	txn_checkpoint() returns EINVAL if the environment isn't properly
	opened. We want to ignore that case -- if we don't, then we exit
	cleanup_fs() early which causes a second call to cleanup_fs() when
	the pool is cleaned, which fails again, which (typically) means
	cleanup_fs_apr() calls fs-&gt;warning() which is the
	defalt_warning_func, which aborts.  
	
	Solution: ignore the EINVAL and complete the close (zero out
	fs-&gt;env).  cleanup_fs() returns quickly on the invocation from
	cleanup_fs_apr() and all is well.  
	
	(cleanup_fs): handle EINVAL from txn_checkpoint() 

2001-01-25 05:31   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.13), liveprops.c (1.12),
	version.c (1.7) (utags: post-edit-baton-removal,
	pre-edit-baton-removal):

	tweaks to match some recent Apache (mod_dav) prototype changes.  
	
	* liveprops.c (dav_svn_insert_prop): use new dav_prop_insert
	    mechanism for deciding what to insert (the format).  
	  (dav_svn_insert_all_liveprops): use new dav_prop_insert mechanism 
	
	* version.c (dav_svn_get_vsn_options, dav_svn_get_options): new
	  functions 
	(dav_svn_get_vsn_header): removed 
	
	* dav_svn.h (dav_svn_insert_all_liveprops): update prototype 

2001-01-24 22:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: err.c (1.20), err.h (1.17), txn-table.c
	(1.10) (utags: post-edit-baton-removal, pre-edit-baton-removal):

	* libsvn_fs/txn-table.c (svn_fs__get_txn): If there's no transaction 
	by the given name, return a Subversion "no such transaction" error, 
	instead of returning the Berkeley DB error code.  
	* libsvn_fs/err.c, libsvn_fs/err.h (svn_fs__err_no_such_txn): New
	function.  
	
	* libsvn_fs/err.c, libsvn_fs/err.h (svn_fs__err_path_syntax): New
	function.  

2001-01-24 22:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/clones-table.c (1.5,
	post-edit-baton-removal, pre-edit-baton-removal):

	* libsvn_fs/clones-table.c (svn_fs__record_clone, 
	svn_fs__record_rename): Note a logic bug which needs fixing when I'm 
	more awake.  

2001-01-24 22:42   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/clones-table.c (1.4):

	* libsvn_fs/clones-table.c (make_clones_key): Use apr_pstrcat
	instead of apr_psprintf.  

2001-01-24 21:41   Branko Cibej &lt;brane@xbc.nu&gt;

	* configure.in (1.46), subversion/Makefile.am (1.17),
	expat-lite/Makefile.am (1.3, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/libsvn_client/Makefile.am
	(1.10), subversion/libsvn_delta/Makefile.am (1.15,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_fs/Makefile.am (1.23, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/tests/libsvn_delta/Makefile.am
	(1.14, post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_ra_dav/Makefile.am (1.5, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/libsvn_subr/Makefile.am (1.14,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_fs/Makefile.am (1.9,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_subr/Makefile.am (1.13,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_wc/Makefile.am (1.25, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/mod_dav_svn/Makefile.am (1.10,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/Makefile.am (1.8, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/tests/libsvn_wc/Makefile.am
	(1.14, post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_wc/checkout-test.sh (1.10,
	post-edit-baton-removal, pre-edit-baton-removal):

	Fix build support for VPATH builds and factor out library names and 
	include dirs.  
	
	Contributed by Kevin Pilch-Bisson &lt;kevin@pilch-bisson.net&gt; 
	
	* Makefile.am (EXTRA_DIST): Add autoconf helpers.  
	
	* configure.in (MKDIR): Define, use APR's helper script.  
	(abs_srcdir, abs_builddir): Absolute source and build dir paths.  
	Use $abs_srcdir to point neon at expat-lite.  Pull APRVARS from
	$abs_builddir/apr.  Define SVN_*_INCLUDES and SVN_*_LIBS
	substitutions for include dirs and library lists in Makefiles.  
	
	* subversion/client/tests/Makefile.am (check): Pass XML source 
	  directory to test scripts.  
	
	* subversion/client/tests/svn-test.sh, 
	  subversion/client/tests/svn-test2.sh: Accept and use XML source 
	  directory parameter.  
	
	* expat-lite/Makefile.am, subversion/Makefile.am, 
	  subversion/client/Makefile.am, 
	  subversion/client/tests/Makefile.am, 
	  subversion/libsvn_client/Makefile.am, 
	  subversion/libsvn_delta/Makefile.am, 
	  subversion/libsvn_delta/tests/Makefile.am, 
	  subversion/libsvn_fs/Makefile.am, 
	  subversion/libsvn_fs/tests/Makefile.am, 
	  subversion/libsvn_ra_dav/Makefile.am, 
	  subversion/libsvn_ra_dav/tests/Makefile.am, 
	  subversion/libsvn_subr/Makefile.am, 
	  subversion/libsvn_subr/tests/Makefile.am, 
	  subversion/libsvn_wc/Makefile.am, 
	  subversion/libsvn_wc/tests/Makefile.am, 
	  subversion/mod_dav_svn/Makefile.am, 
	  subversion/tests-common/Makefile.am: Add header files to lists of
	sources, for "make dist".  Use SVN_*_INCLUDES and SVN_*_LIBS instead
	of explicit paths.  

2001-01-24 16:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/txn-table.c (1.9):

	* libsvn_fs/txn-table.c (svn_fs__get_txn_list): Don't set *NAMES_P 
	until we know the operation has succeeded.  

2001-01-24 12:59   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/txn-table.h (1.7, post-edit-baton-removal,
	pre-edit-baton-removal):

	Doc fix.  

2001-01-24 12:56   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: txn-table.c (1.8), txn-table.h (1.6):

	* libsvn_fs/txn-table.c, libsvn_fs/txn-table.h: Doc fixes.  

2001-01-24 12:47   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.8, post-edit-baton-removal,
	pre-edit-baton-removal):

	Use svn_node_kind instead of kind_t.  
	* libsvn_fs/tree.c (kind_t): Deleted.  
	(svn_fs_node_t, new_node_object, svn_fs_node_is_dir, 
	svn_fs_node_is_file, svn_fs__txn_root_node): Use enum svn_node_kind 
	instead of kind_t.  

2001-01-24 12:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.62, post-edit-baton-removal, pre-edit-baton-removal):

	Added Change #8 from Ben's email.  

2001-01-24 12:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.18, post-edit-baton-removal,
	pre-edit-baton-removal):

	Remove names from list, we already have an AUTHORS file and
	"Members" area of website.  

2001-01-23 15:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.29):

	Check for neon 0.8.1, since we depend on exactly that release right 
	now.  

2001-01-23 15:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.141):

	(svn_wc__entry_merge_sync):  docfix.  

2001-01-23 12:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_types.h (1.53, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_subr/io.c (1.27,
	post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_subr/keysort.c (1.7, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_wc/log.c (1.81),
	libsvn_wc/questions.c (1.46, post-edit-baton-removal,
	pre-edit-baton-removal):

	Make subversion build again, after APR interface changes.  
	
	* svn_types.h (svn_item_t):  new type to make up for the loss of 
	  apr_item_t.  
	
	* keysort.c (svn_sort_compare_as_paths, apr_hash_sorted_keys): use 
	  svn_item_t instead of apr_item_t now.  
	
	* status.c (svn_cl__print_status_list):  use svn_item_t instead of 
	  apr_item_t now.  
	
	* io.c, log.c, questions.c: add new required argument to all 
	  apr_stat() calls.  Patch submitted by Kevin Pilch-Bisson 
	  &lt;kevin@pilch-bisson.net&gt;.  

2001-01-23 11:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.17):

	Update some dates and such.  

2001-01-23 11:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_bugs.html (1.4, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	Update bugs page, it's not May anymore.  :) 

2001-01-23 10:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/project_source.html (1.4, post-edit-baton-removal,
	pre-edit-baton-removal):

	New web section:  how to contribute code.  

2001-01-23 10:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.61):

	Add general problems, don't let these fall on the floor.  

2001-01-23 08:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.60):

	Note that Change #2 is still being discussed.  

2001-01-22 19:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.59):

	Change status of "Change #2" (that was added in previous commit).  

2001-01-22 19:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.58):

	Added Ben's emails ("Change #1", "Change #2", ... "Change #7") as 
	stack items.  

2001-01-22 12:36   Branko Cibej &lt;brane@xbc.nu&gt;

	* STACK (1.57):

	Added a tentative list of what needs to be done in the FS before an 
	abort_txn can be tested.  

2001-01-19 04:18   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/mod_dav_svn.c (1.17,
	post-edit-baton-removal, pre-edit-baton-removal):

	update for recent rename in mod_dav code. some prefixes are now
	"dav_" rather than "ap_". we also have a pool in the register_hooks
	function now.  

2001-01-16 17:02   Branko Cibej &lt;brane@xbc.nu&gt;

	* IDEAS (1.19, post-edit-baton-removal, pre-edit-baton-removal):

	Add section about removing obsolete versions to archive.  Fix some
	typos.  

2001-01-15 03:40  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/svn_com/SVN.cpp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal):

	* SVN.cpp (CSVNWorkingCopy::wc_statuses): Fix apr_hash_count call to
	current prototype.  

2001-01-14 15:50   Branko Cibej &lt;brane@xbc.nu&gt;

	* STACK (1.56):

	Remove svn_fs_list_transactions from the todo list.  
	
	Hmm, the first half of this list is getting really short.  

2001-01-14 15:47   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/txn.c (1.20, post-edit-baton-removal,
	pre-edit-baton-removal):

	(txn_body_open_txn_root, svn_fs_open_txn_root): Use SVN_NO_ERROR 
	instead of plain 0.  

2001-01-14 15:45   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.8,
	post-edit-baton-removal, pre-edit-baton-removal):

	(list_live_transactions): New test for svn_fs_list_transactions.  
	(text_funcs): Add it.  

2001-01-14 15:43   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/txn.c (1.19):

	Yikes, I really should check before committing! 
	
	* txn.c (svn_fs_list_transactions): New func, implements api seen in 
	svn_fs.h.  

2001-01-14 15:41   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/: txn-table.c (1.7), txn-table.h (1.5),
	txn.c (1.18):

	* txn_table.h (svn_fs__get_txn_list): New prototype.  
	* txn_table.c (svn_fs__get_txn_list): New function, creates a list
	of keys in the transactions table.  
	(next_id_key): Factor out the "next-id" key. All users changed.  
	Load svn-dev.el.  

2001-01-14 12:26   Branko Cibej &lt;brane@xbc.nu&gt;

	* STACK (1.55):

	Remove svn_fs_open_txn from the todo list.  

2001-01-14 12:24   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.7):

	(reopen_trivial_transaction): New test for svn_fs_open_txn.  
	(text_funcs): Add it.  

2001-01-14 12:21   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/txn.c (1.17):

	(svn_fs_open_txn): New func, implements api seen in svn_fs.h 
	(txn_body_begin_txn, svn_fs_begin_txn, svn_fs_close_txn): Return
	SVN_NO_ERROR instead of plain 0.  

2001-01-14 12:17   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/fs.c (1.29):

	(svn_fs_open_berkeley): Store the filesystem path fs-&gt;env_path.  
	Load svn-dev.el.  

2001-01-14 12:14   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/skel.c (1.16, post-edit-baton-removal,
	pre-edit-baton-removal):

	(svn_fs__prepend): Fix typo, nake this actually work.  

2001-01-12 18:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.54):

	Remove svn_fs_close_txn() and svn_fs_txn_name() from the todo list.  

2001-01-12 18:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/txn-table.c (1.6), libsvn_fs/txn.c (1.16),
	libsvn_fs/txn.h (1.5, post-edit-baton-removal,
	pre-edit-baton-removal), tests/libsvn_fs/fs-test.c (1.6):

	(svn_fs__create_txn): Store the new txn id in *txn_id_p.  
	(svn_fs_txn_name): New func, implements api seen in svn_fs.h.  
	
	* tests/fs-test.c (trivial_transaction): Replaces 
	begin_then_close_transaction(), test that svn_fs_txn_name() works.  
	(test_funcs): Adjust for above.  
	
	* txn.h, txn.c: Load svn-dev.el.  

2001-01-12 15:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.82):

	(svn_wc__entry_merge_sync):  oops, fix doc typo. :) 

2001-01-12 15:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.81):

	(svn_wc__entry_merge_sync):  add long doc string describing 
	logic-to-come.  

2001-01-12 15:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/txn.c (1.15), tests/libsvn_fs/fs-test.c
	(1.5):

	* txn.c (svn_fs_txn_t): Fix typo in comment.  
	(svn_fs_close_txn): New func, implements api seen in svn_fs.h 
	* tests/fs-test.c (begin_then_close_transaction): New test.  
	(test_funcs): Add it.  
	
	JimB, pls let me know if I missed something, thanks.  

2001-01-12 15:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_wc.h (1.67):

	(svn_wc_entry):  clearer doc string.  

2001-01-12 15:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.53):

	Mike's working on Bill Tutt's path problem, Ben's working on his
	entry deletion problem, so move those items to the appropriate
	places.  

2001-01-12 14:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.52):

	Finished the trace-commit editor.  

2001-01-12 13:19  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/SVNControls/: SGrid.vbp (1.3),
	SVNControls.ocx (1.1) (utags: milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	In order for VB to keep a constant set of GUID, VB needs a
	preexisting binary to validate version compatability against. Yes,
	this is wierd, checking in a built binary, but VB's requirements
	here are wierd. :( Please update SVNControls.ocx whenever you change
	any of these files.  
	
	* SVNControls.OCX:  New file required to keep VB's GUID generation
	sane.  
	* SGrid.vpb: Adjustment to the version compatible binary so that its
	in the same directory.  
	
	Submitted by: Bill Tutt Reviewed by: 

2001-01-12 12:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.51):

	Add stack items from Bill Tutt, so can have the satisfaction later
	of popping them off.  

2001-01-12 06:22   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.23, post-edit-baton-removal,
	pre-edit-baton-removal):

	fill in the new pool argument of the dav_walk_resource.  

2001-01-11 18:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.49,
	post-edit-baton-removal, pre-edit-baton-removal):

	Changes cascaded from fixing svn_pool_clear() to handle an orphaned 
	error pool: 
	
	With the advent of svn_error_init_pool(), it became possible to have 
	an initial error pool created on a non-tippy-topmost pool, that is,
	on a pool whose parent is not null.  Therefore, we now store some
	extra information to indicate whether an error pool is a subpool of
	the pool to which we found it attached, as opposed to being a
	subpool of someone farther up the chain.  
	
	(svn_error__set_error_pool, svn_error__get_error_pool): New funcs.  
	(svn_pool__inherit_error_pool): Replaces
	svn_pool__attach_error_pool.  Demand a parent who has an error pool.
	All callers changed.  
	(svn_error__make_error_pool): New func.  
	(SVN_ERROR_POOL_ROOTED_HERE): New #define string constant.  
	(svn_error_init_pool): Implement using above new helpers; note that 
	the pool is rooted here.  Also, use APR_STATUS_IS_SUCCESS macro 
	instead of direct comparison.  
	(svn_pool_create): Either init an error pool or inherit one, but not
	both.  
	(svn_pool_clear): Make sure there's an error pool to reattach, i.e., 
	handle the case in which the error pool got destroyed when its
	parent was cleared.  Also, don't assume pool is not tippy-topmost,
	rather, handle the null parent case.  

2001-01-11 15:29  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/libsvn_wc/questions.c (1.45):

	svn_wc_text_modified_p was assuming that just because we could 
	construct a string variable that might point to the text-base
	version of the file, that the actual file exists.  
	
	* questions.c:  (svn_wc_text_modified_p): Check for existance of
	text-base file.  
	
	Submitted by: Bill Tutt Reviewed by: Karl Fogel 

2001-01-11 15:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: clones-table.c (1.3), dag.c (1.4,
	post-edit-baton-removal, pre-edit-baton-removal), txn-table.c
	(1.5):

	Add casts away from const, to get rid of compiler warnings.  
	
	We have const strings being passed into functions that take
	non-const strings, but -- if I understand correctly -- we don't want
	those functions promising the incoming data will never be changed. 
	After all, the functions are just storing the data directly
	(non-copying) into skels, and it would be too restrictive if all
	skels had to promise never to modify the data in their strings.  
	
	If this is wrong, and skels can make such a promise, then we should
	do this change the other way, adding const to the string parameters
	of svn_fs__str_atom(), svn_fs__parse_skel(), and
	svn_fs__str_to_dbt().  

2001-01-11 05:25   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/session.c (1.14,
	post-edit-baton-removal, pre-edit-baton-removal):

	sync with latest RA interface: add an entry for get_latest_revnum 

2001-01-11 05:24   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/mod_dav_svn.c (1.16):

	Apache 2.0 now deals with handlers a bit differently.  

2001-01-11 05:22   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.22):

	#if out some functions that aren't in the FS.  [ lack of
	open_rev_root basically prevents all operation ] 

2001-01-11 05:21   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/dag.c (1.3):

	add some stubs so the symbols will be defined and the library can
	load.  

2001-01-11 03:35  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/svn_com/: MarshalArray.h (1.2), SVN.h
	(1.2), SVNStatus.h (1.2), misc.h (1.2), resource.h (1.2,
	milestone-2), svn_comCP.h (1.2) (utags: post-edit-baton-removal,
	pre-edit-baton-removal):

	Include guards shouldn't have leading underscores, since that
	namespace is reserved for the compiler.  
	
	* resource.h: Fix .rc name in comment.  
	* SVNStatus.h:  Fix include guards to not have leading underscores.  
	* misc.h: Same.  
	* MarshallArray.h: Same.  
	* svn_comCP.h: Same.  
	* SVN.h: Same.  

2001-01-11 03:22  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/WinSVN/: WinSVN.vbp (1.2), lvh.cls (1.2,
	milestone-2) (utags: post-edit-baton-removal,
	pre-edit-baton-removal):

	WinSVN has successfully made it through svn-test.sh! 
	
	* *.vbp: VB IDE stuff 
	* lvh.cls:  Fix ImageList index usages. Use the row key in FindRow.
	                  Correctly assign icon for files that are "pending deletes".
	                  Correctly assign icons for files that should be in the current
	                  directory, but aren't there for some reason.  Discontinue using
	AutoWidthColumn 

2001-01-11 03:10  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/svn_com/SVN.cpp (1.2):

	* SVN.cpp: Only unlock the SAFEARRAY if I've gone and locked it
	already.  

2001-01-11 03:08  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/SVNControls/: SGrid.ctl (1.2,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	SGrid.vbp (1.2), cGridCell.cls (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	Document AutoWidthColumn repaint bug and expose row Keys.  
	
	* *.vbp: VB IDE auto-changes 
	* SGrid.ctl: Document the repaint bug, and set cGridCell.Key 
	* cGridCell.cls: Add the Key property.  

2001-01-10 18:57  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/libsvn_subr/libsvn_subr.dsp (1.5,
	post-edit-baton-removal, pre-edit-baton-removal):

	Add missing file to fix the Win32 build.  
	
	* libsvn_subr/libsvn_subr.dsp: Add quoprint.c.  

2001-01-10 18:10   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_error.h (1.65), libsvn_subr/svn_error.c
	(1.48), tests/libsvn_fs/skel-test.c (1.13, post-edit-baton-removal,
	pre-edit-baton-removal):

	Add svn_pool_clear() to properly deal with the error pool.  
	
	* include/svn_error.h (svn_pool_clear): new declaration 
	* libsvn_subvr/svn_error.c (svn_pool_clear): new function 
	(svn_pool__attach_error_pool): new function 
	* libsvn_fs/tests/skel-test.c (get_empty_string): use svn_pool_clear
	    rather than calling apr_clear_pool directly.  
	
	Submitted by: Bill Tutt &lt;billtut@microsoft.com&gt; Reviewed by: Greg
	Stein 

2001-01-10 18:00   Greg Stein &lt;gstein@lyra.org&gt;

	* notes/issues.txt (1.3, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	don't lose track of this one! 

2001-01-10 17:17  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/WinSVN/: CheckedFolder.ico (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	DriveHelpers.bas (1.1, post-edit-baton-removal,
	pre-edit-baton-removal), ExplorerViewHelpers.bas (1.1,
	post-edit-baton-removal, pre-edit-baton-removal),
	OpnCheckedFolder.ico (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), Removable.ico (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), Startup.bas (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	WinSVN.res (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), WinSVN.vbp (1.1), binary.ico (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	conflict.ico (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), frmAbout.frm (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), frmAbout.frx
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), frmLogin.frm (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), frmMain.frm (1.1,
	post-edit-baton-removal, pre-edit-baton-removal), frmMain.frx (1.1,
	post-edit-baton-removal, pre-edit-baton-removal), frmOptions.frm
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), frmSplash.frm (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), frmSplash.frx
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), ignored_dir.ico (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), ignored_file.ico
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), lvh.cls (1.1), missing_dir.ico (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	missing_file.ico (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), modified_binary.ico (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	modified_normal.ico (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), normal.ico (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), pending_del.ico
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), unknown.ico (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), ve_split.cur
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), Binaries/SSubTmr6.dll (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	Binaries/vbalIml6.ocx (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	Initial checkin of WinSVN VB prototype UI WinSVN/Binaries are COM
	DLLs you need to regsvr32 before trying to use WinSVN.  

2001-01-10 17:14  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/SVNControls/: SGrid.ctl (1.1), SGrid.vbp
	(1.1), article.dat (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), cFlatHeader.cls (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), cGridCell.cls
	(1.1), cHeaderControl.cls (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), cScrollBars.cls
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), cShellSort.cls (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), csgrid.res (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	frmOutlookDemo.frm (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), frmOutlookDemo.frx (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	frmOutlookGroup.frm (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), frmOutlookGroup.frx (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), frmTest.frm (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	frmTest.frx (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), frmTestMatrix.frm (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), frmTestMatrix.frx
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), frmVirtual.frm (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), frmVirtual.frx
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), gDevGrid.vbg (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), link.dat (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	mGDI.bas (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), pTest.vbp (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), ppgColumns.pag
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), ppgMain.pag (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), type.dat (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal):

	Initial checkin of the SVN SGrid control, based off of VB
	Accelerators SGrid control.  

2001-01-10 16:32  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion.dsw (1.8, post-edit-baton-removal,
	pre-edit-baton-removal):

	* subversion.dsw: Add the svn_com project to the workspace.  

2001-01-10 16:30  Bill Tutt &lt;rassilon@lyra.org&gt;

	* subversion/clients/win32/svn_com/: MarshalArray.h (1.1), SVN.cpp
	(1.1), SVN.h (1.1), SVN.rgs (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), SVNCOM.cpp (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	SVNCOM.def (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), SVNCOM.idl (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), SVNCOM.rc (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	SVNCOMps.def (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), SVNCOMps.mk (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), SVNStatus.cpp
	(1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), SVNStatus.h (1.1), SVNStatus.rgs (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	StdAfx.cpp (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), StdAfx.h (1.1, post-edit-baton-removal,
	pre-edit-baton-removal), dlldatax.c (1.1, post-edit-baton-removal,
	pre-edit-baton-removal), dlldatax.h (1.1, post-edit-baton-removal,
	pre-edit-baton-removal), misc.cpp (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), misc.h (1.1),
	resource.h (1.1), svn_com.dsp (1.1, post-edit-baton-removal,
	pre-edit-baton-removal), svn_comCP.h (1.1):

	Initial svn_com checkin.  Supports: 
	* File change notification watcher thread for VB UI 
	* Exposing svn_wc_statuses() into COM objects.  
	* Exposes check_wc to determine if directory is a valid WC directory 
	* Generic ATL code to allow C++ code to fire events to the VB UI
	thread from any thread.  
	(MarshalArray.h) 
	
	Known issues: MarshalArray.h must event implement a proxy interface
	cache per thread in order to give back the correct interface when
	ATL's IEnumConnectionPoints code is used.  

2001-01-09 18:43   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/structure (1.27, post-edit-baton-removal,
	pre-edit-baton-removal):

	(Merge rules): Fix typo.  
	(Appendix): Replace "node.id" with "node.revision-id" where 
	appropriate.  

2001-01-09 18:08   Branko Cibej &lt;brane@xbc.nu&gt;

	* configure.in (1.45), subversion/tests/libsvn_delta/Makefile.am
	(1.13), subversion/tests/libsvn_fs/Makefile.am (1.8),
	subversion/tests/libsvn_subr/Makefile.am (1.12),
	subversion/tests/libsvn_wc/Makefile.am (1.13):

	Update donfigury and makefiles for libtoolized APR.  
	
	(configure.in): New subtitution SVN_APR_LIBS.  Point it to libapr.la
	and $LIBTOOL_LIBS defined in apr/APRVARS.  
	
	(subversion/client/Makefile.am 
	subversion/libsvn_delta/tests/Makefile.am 
	subversion/libsvn_fs/tests/Makefile.am 
	subversion/libsvn_ra_dav/tests/Makefile.am 
	subversion/libsvn_subr/tests/Makefile.am 
	subversion/libsvn_wc/tests/Makefile.am): Use @SVN_APR_LIBS@ instead
	of explicitly linking libapr.a.  

2001-01-08 23:01   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.25, pre-edit-baton-removal):

	Continue the development of the commit code.  
	
	Warning: this stuff compiles only. It doesn't work at all right now.
		 (lack of a way to fetch RA-specific properties, and no server to
	talk to) 
	
	(add_resource): new function to add a resource into the RESOURCES
	hash 
	(checkout_resource): implement 
	(commit_delete_item): remove the #if 0, so we execute the DELETE
	path now 
	(commit_add_dir): implement 
	(commit_rep_dir): note that this function will never "do" anything 
	(commit_change_dir_prop): do the CHECKOUT immediately; defer the
	PROPPATCH 
	(commit_add_file): implement CHECKOUT; add notes 
	(commit_rep_file): implement CHECKOUT portion 
	(commit_change_file_prop): do the CHECKOUT immediately; defer the
	PROPPATCH 
	(commit_close_edit): we'll be MERGE'ing the activity 
	(svn_ra_dav__get_commit_editor): remove the if (0), so we create the
	activity 

2001-01-08 22:54   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: fetch.c (1.32), ra_dav.h (1.5) (utags:
	pre-edit-baton-removal):

	* fetch.c, ra_dav.h (svn_ra_dav__checkout): update prototype to
	    match RA specification -- drop the URL argument.  

2001-01-08 18:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/status.c (1.24, pre-edit-baton-removal):

	(svn_wc_statuses): Don't report subdirs at all if not descending.  
	Thanks to Bill Tutt for noticing the logic bug.  

2001-01-08 17:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.66):

	Change introduction to status section based on Greg Stein's
	comments.  

2001-01-08 17:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.65), libsvn_wc/adm_crawler.c
	(1.70, pre-edit-baton-removal), libsvn_wc/entries.c (1.80),
	libsvn_wc/get_editor.c (1.158), libsvn_wc/log.c (1.80),
	libsvn_wc/props.c (1.23, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_wc/questions.c (1.44),
	libsvn_wc/status.c (1.23), libsvn_wc/wc.h (1.140):

	(svn_wc_entries_read): Public replacement for svn_wc__entries_read.  
	All callers changed.  

2001-01-08 16:08   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.50):

	some changes lying around 

2001-01-08 14:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_fs/convert-size.c (1.9,
	post-edit-baton-removal, pre-edit-baton-removal):

	Comment fix.  Some global-search-and-replace got carried away.  :) 

2001-01-08 12:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.16), include/svn_wc.h
	(1.64), libsvn_client/status.c (1.8, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_wc/status.c (1.22):

	At the request of Bill Tutt: 
	
	(svn_wc_statuses): Take new descend arg, only recurse beyond
	immediate entries if it is non-zero.  
	(svn_client_status): Take new descend arg, pass through to 
	svn_wc_statuses().  
	(svn_cl__status): Pass a non-zero descend arg .  Add note about
	having a command-line option to control descent later.  

2001-01-06 10:34   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/tests/libsvn_delta/random-test.c (1.18,
	post-edit-baton-removal, pre-edit-baton-removal):

	* random-test.c (main): Pass the pool to apr_initopt.  

2001-01-04 03:12   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.12, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	continued updates based on discussions on the DeltaV and SVN lists 

2001-01-03 20:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.15), libsvn_client/commit.c
	(1.15, pre-edit-baton-removal):

	Make svn_client_commit() accept and compose "before" and "after"
	editors.  
	
	Translation:  `svn commit' now prints status information as it goes.
	:) 
	
	
	* commit.c (svn_client_commit):  take before/after editors as args, 
	  compose them before driving the final editor.  
	
	* svn_client.h (svn_client_commit):  update the declaration too.  
	
	* commit-cmd.c (svn_cl__commit):  fetch trace-commit editor and pass 
	  it to svn_client_commit().  
	
	* trace-commit.c:  print terse output during commit.  
	
	* svn-test2.sh:  fix long-standing bug in invocation of `svn
	  commit'.  Why has nobody noticed that this script has been broken
	  for so long? :) 

2001-01-03 15:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.49):

	Fix typo.  

2001-01-03 15:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.48):

	Made a small-scale, concrete fs task list, as discussed w/ Branko on 
	the phone.  

2001-01-03 12:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.14, post-edit-baton-removal,
	pre-edit-baton-removal):

	Link to webdav-usage.html.  

2001-01-03 12:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/webdav-usage.html (1.12):

	moved to ../www/ 

2001-01-03 12:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/issues.txt (1.2):

	Tweak wording, and add a comment.  

2001-01-03 12:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/issues.txt (1.1):

	Ben's summary email, repositized so we can edit it.  

2000-12-26 18:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.4):

	Fix typo (might as well, as long as I'm browsing).  

2000-12-26 18:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: structure (1.26), tree.c (1.7):

	* tree.c (kind_t): add question about this enum.  
	(svn_fs_node_t): fix presumed typo in doc comment.  
	
	* structure: fix typo, add clarifying adjective.  

2000-12-26 18:25   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/quoprint.c (1.1, post-edit-baton-removal,
	pre-edit-baton-removal):

	Routines for quoted-printable encoding.  Also forgot this in the
	last commit.  

2000-12-26 18:20   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_quoprint.h (1.1, post-edit-baton-removal,
	pre-edit-baton-removal):

	Header for quoted-printable encoding.  Forgot this in the last
	commit.  

2000-12-26 17:28   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_error.h (1.64), libsvn_delta/delta.h
	(1.48, pre-edit-baton-removal), libsvn_delta/xml_output.c (1.24,
	pre-edit-baton-removal), libsvn_delta/xml_parse.c (1.141,
	pre-edit-baton-removal), libsvn_subr/Makefile.am (1.13),
	tests/libsvn_delta/svndiff-test.c (1.10, post-edit-baton-removal,
	pre-edit-baton-removal):

	Add support for quoted-printable encoding, as requested by Karl.  
	(svn_quoprint_encode, svn_quoprint_decode,
	svn_quoprint_encode_string, svn_quoprint_decode_string): New
	functions, very much like the base64 analogs.  
	(SVN_ERR_XML_UNKNOWN_ENCODING): New error for unknown binary
	encodings 
	(svn_xml__stackframe_t, xml_handle_start): Field for new attribute 
	"encoding" 
	* xml_parse.c (do_begin_textdelta): Understand "encoding" attribute
	and handle quoted-printable and base64 encodings.  Default is
	base64.  
	* xml_output.c (apply_textdelta): If QUOPRINT_SVNDIFFS is defined,
	output deltas using quoted-printable instead of base64.  

2000-12-26 16:52   Greg Hudson &lt;ghudson@mit.edu&gt;

	* doc/deltas.texi (1.6, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	Fix formatting error.  

2000-12-26 15:36   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_wc.h (1.63):

	Eliminate duplicate #ifdef wrapping left by last commit.  

2000-12-26 15:14   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/base64.c (1.14, post-edit-baton-removal,
	pre-edit-baton-removal):

	Typo fix in comment.  

2000-12-26 12:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/: svn_base64.h (1.8, post-edit-baton-removal,
	pre-edit-baton-removal), svn_client.h (1.14), svn_delta.h (1.135,
	pre-edit-baton-removal), svn_error.h (1.63), svn_fs.h (1.33,
	pre-edit-baton-removal), svn_hash.h (1.14, post-edit-baton-removal,
	pre-edit-baton-removal), svn_io.h (1.29, post-edit-baton-removal,
	pre-edit-baton-removal), svn_path.h (1.25, post-edit-baton-removal,
	pre-edit-baton-removal), svn_ra.h (1.27, pre-edit-baton-removal),
	svn_string.h (1.43, post-edit-baton-removal,
	pre-edit-baton-removal), svn_test.h (1.7, pre-edit-baton-removal),
	svn_types.h (1.52), svn_wc.h (1.62), svn_xml.h (1.28,
	post-edit-baton-removal, pre-edit-baton-removal):

	Wrap everything in extern "C" iff __cplusplus is defined (thanks to 
	Greg Stein and Bill Tutt for the suggestion).  
	
	Also: load svn-dev.el where it wasn't being loaded, and get rid of 
	page-break characters before the final sections (although there is a 
	boundary there, the result of delimiting it this way was that 
	printouts always ended with a predictably silly final page).  

2000-12-26 12:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_xml.h (1.27):

	Load svn-dev.el.  

2000-12-24 06:52   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/io.c (1.26):

	(svn_stream_t, svn_stream_create): Oops, forgot, don't need the
	"pool" element of svn_stream_t any more now that the pool argument
	to the read and write handlers is gone.  

2000-12-24 06:35   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_io.h (1.28), libsvn_delta/svndiff.c
	(1.15, post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_delta/xml_output.c (1.23), libsvn_subr/base64.c (1.13),
	libsvn_subr/io.c (1.25):

	(svn_read_fn_t, svn_write_fn_t): Eliminate the pool argument; if a
	read or write handler needs to do allocation, it must use a pool
	stored in the baton argument--not an inconvenience for any of our
	current handlers now that we have svn_stream_from_aprfile() and
	svn_stream_from_stdio() to handle the simple cases.  All instances
	of svn_read_fn_t and svn_write_fn_t changed, as well as the callers
	in io.c.  

2000-12-24 06:24   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_base64.h (1.7), include/svn_delta.h
	(1.134), libsvn_delta/svndiff.c (1.14), libsvn_delta/text_delta.c
	(1.27, post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_delta/xml_output.c (1.22), libsvn_delta/xml_parse.c (1.140),
	libsvn_subr/base64.c (1.12):

	(svn_txdelta_parse_svndiff, svn_base64_encode, svn_base64_decode, 
	svn_tdelta_apply, svn_txdelta_parse_svndiff,
	svn_delta_get_xml_editor): Use a close handler instead of a
	zero-length write to signify end of writing, or add an
	svn_stream_close() request when the writable stream wasn't being
	terminated.  

2000-12-24 05:48   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_base64.h (1.6), include/svn_delta.h
	(1.133), libsvn_delta/svndiff.c (1.13), libsvn_delta/xml_output.c
	(1.21), libsvn_delta/xml_parse.c (1.139), libsvn_subr/base64.c
	(1.11), tests/libsvn_delta/random-test.c (1.17),
	tests/libsvn_delta/svndiff-test.c (1.9):

	(svn_base64_encode, svn_base64_decode, svn_delta_parse_svndiff): Now
	that streams are represented by a single object instead of a handler
	and baton, we can simply return streams instead of assigning them
	through pointer arguments, at least in the case of constructors
	which can't return an error.  So do so.  All callers changed.  

2000-12-24 05:35   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_io.h (1.27), libsvn_subr/io.c (1.24):

	(svn_stream_from_aprfile, svn_stream_from_stdio): Don't close the 
	underlying file on a "close" operation.  This matches the existing
	uses of writable streams on apr or stdio files; none of the uses
	assume that the stream "owns" the underlying file.  

2000-12-24 05:26   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_io.h (1.26):

	(svn_stream_from_aprfile, svn_stream_from_stdio): Doc change.  The 
	convenience of allowing file/fp to be NULL is still pretty
	convenient even though it's easy to create an empty readable stream.
	So we'll leave it around.  

2000-12-24 04:55   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_io.h (1.25), libsvn_subr/io.c (1.23):

	(svn_io_file_reader, svn_io_file_writer): Garbage collect, now that 
	generic streams have supplanted svn_read_fn_t and svn_write_fn_t. 
	It's possible that functions like these will want to be reintroduced
	in a slightly different form, simply as a shim to translate apr
	status codes to svn status codes.  But right now the only function
	that was using them that way was already using two other apr
	functions; that didn't seem to qualify as sufficient demand.  

2000-12-24 04:35   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_base64.h (1.5), include/svn_delta.h
	(1.132), libsvn_client/commit.c (1.14), libsvn_delta/delta.h
	(1.47), libsvn_delta/svndiff.c (1.12), libsvn_delta/text_delta.c
	(1.26), libsvn_delta/xml_output.c (1.20), libsvn_delta/xml_parse.c
	(1.138), libsvn_fs/file.h (1.8, post-edit-baton-removal,
	pre-edit-baton-removal), tests/libsvn_delta/random-test.c (1.16),
	tests/libsvn_delta/svndiff-test.c (1.8),
	tests/libsvn_delta/xml-output-test.c (1.9, pre-edit-baton-removal),
	libsvn_subr/base64.c (1.10), libsvn_wc/get_editor.c (1.157),
	tests/libsvn_wc/commit-test.c (1.15, pre-edit-baton-removal):

	(svn_base64_encode, svn_base64_decode, svn_txdelta_apply, 
	svn_txdelta_to_svndiff, svn_txdelta_parse_svndiff, 
	svn_delta_get_xml_editor): Use generic streams for output.  All
	callers changed.  Right now these functions still use a zero-length
	write to indicate the end of stream; I'll change them to use
	svn_stream_close() later.  
	* base64.c (encode_data): Fix an order of operations problem
	revealed by ALLOC_DEBUG during testing of the change to use writable
	generic streams.  

2000-12-23 21:54   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/io.c (1.22):

	(svn_stream_create): Remember to initialize close_fn.  

2000-12-23 16:41   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_fs/file.h (1.7):

	(svn_fs__file_contents): Whoops, forgot to actually change the type.  

2000-12-23 16:38   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_fs.h (1.32), libsvn_fs/dag.h (1.7,
	post-edit-baton-removal, pre-edit-baton-removal), libsvn_fs/delta.c
	(1.20, pre-edit-baton-removal), libsvn_fs/file.h (1.6),
	libsvn_repos/delta.c (1.20, pre-edit-baton-removal),
	mod_dav_svn/repos.c (1.21):

	(I couldn't really test this patch; I hope I got it right.) 
	(svn_fs_file_contents): Use generic stream.  All callers changed. 
	But it doesn't seem to be implemented yet.  
	(svn_fs__dag_get_contents, svn_fs__file_contents): Use generic
	stream.  Doesn't seem to be implemented or used yet.  

2000-12-23 16:27   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_parse.c (1.137):

	(svn_delta_xml_auto_parse): Doc fix.  

2000-12-23 16:24   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.131),
	libsvn_client/apply_edits.c (1.9, pre-edit-baton-removal),
	libsvn_delta/xml_parse.c (1.136),
	tests/libsvn_delta/deltaparse-test.c (1.60,
	pre-edit-baton-removal), tests/libsvn_wc/checkout-test.c (1.37,
	pre-edit-baton-removal):

	(svn_delta_xml_auto_parse): Use generic stream for input.  All
	callers changed.  

2000-12-23 08:42   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.130),
	libsvn_delta/text_delta.c (1.25), tests/libsvn_delta/random-test.c
	(1.15), libsvn_wc/get_editor.c (1.156):

	(svn_txdelta_apply): Change the source data to a generic stream. 
	All callers changed.  (The target data will become a generic stream
	later; the write_fns pretty much have to all be changed at once
	because we make pipelines out of them.) 

2000-12-23 05:38   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.11), notes/webdav-usage.html (1.11):

	major revamp to bring up to date (w.r.t the latest DeltaV draft and
	how we will map SVN concepts onto the DAV concepts).  
	
	many sections are still out of date, but these now have specific
	warnings about their problems.  
	
	also performed some terminology changes: (SVN) version -&gt; revision 

2000-12-22 20:47   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.24):

	Don't record local paths, just repository URLs.  

2000-12-22 16:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/deltas.texi (1.5), subversion/include/svn_delta.h (1.129),
	subversion/libsvn_client/delete.c (1.6, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/libsvn_delta/compose_editors.c
	(1.7, pre-edit-baton-removal), subversion/libsvn_delta/svndiff.c
	(1.11), subversion/libsvn_delta/text_delta.c (1.24),
	subversion/libsvn_delta/xml_output.c (1.19),
	subversion/libsvn_delta/xml_parse.c (1.135),
	subversion/tests/libsvn_delta/vdelta-test.c (1.7,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_delta/xml-output-test.c (1.8),
	subversion/libsvn_fs/delta.c (1.19),
	subversion/libsvn_repos/delta.c (1.19),
	subversion/libsvn_ra_dav/commit.c (1.23),
	subversion/libsvn_ra_dav/fetch.c (1.31),
	subversion/libsvn_wc/adm_crawler.c (1.69),
	subversion/libsvn_wc/get_editor.c (1.155),
	subversion/tests/svn_test_editor.c (1.14, pre-edit-baton-removal):

	(svn_delta_edit_fns_t): changed delete to delete_item, to avoid 
	incompatibility with C++.  All uses changed.  
	(svn_txdelta_window_t): changed new to new_data, for same reason.  
	All uses changed.  
	
	Thanks to Bill Tutt &lt;rassilon@lima.mudlib.org&gt;.  

2000-12-21 18:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.47), subversion/libsvn_wc/entries.c (1.79),
	subversion/libsvn_wc/log.c (1.79), subversion/libsvn_wc/wc.h
	(1.139):

	Fix the bug in which, for dir/subdir, dir/SVN/entries redundantly 
	mentioned subdir's ancestry.  Now only dir/subdir/SVN/entries has
	it.  Simultaneously, fix the bug whereby a dir's own entry did not
	mention being of type "dir".  
	
	(SVN_WC__ENTRIES_ATTR_FILE_STR, SVN_WC__ENTRIES_ATTR_DIR_STR): new 
	#defines.  All former hard-coded "dir"s and "file"s replaced.  
	(svn_wc__entries_init): create this dir's own entry with the "dir" 
	attribute set.  
	(stuff_entry): don't absorb defaults for dirs.  
	(resolve_to_defaults): skip all dirs, not just this dir.  
	(log_do_committed): don't clobber the entry's `kind'.  

2000-12-21 17:49   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_io.h (1.24), libsvn_subr/io.c (1.21):

	Based on a suggestion from Greg Stein, detect fp == NULL or file ==
	NULL at stream creation time rather than in the handlers.  As a side
	effect, add a new interface svn_stream_empty().  Now that it's easy
	to make an empty stream, I think we should desupport the convenience
	and let the caller handle it, but I'll do that after I've finished
	converting everything to generic streams.  Small bites good.  
	
	(svn_stream_empty): New interface to make an empty readable stream.  
	(svn_stream_from_aprfile, svn_stream_from_stdio): Return 
	svn_stream_empty(pool) when file argument is NULL.  
	* io.c (read_handler_empty): New function.  
	* io.c (read_handler_apr, close_handler_apr, read_handler_stdio, 
	write_handler_stdio): Revert last change.  

2000-12-21 17:09   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsw (1.7), svn_check.dsp (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_client/libsvn_client.dsp (1.5,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_delta/libsvn_delta.dsp (1.4,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_fs/libsvn_fs.dsp (1.6, post-edit-baton-removal,
	pre-edit-baton-removal),
	subversion/tests/libsvn_delta/deltaparse_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_delta/random_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_delta/svndiff_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_delta/vdelta_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_delta/xml_output_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_subr/libsvn_subr.dsp (1.4),
	subversion/libsvn_wc/libsvn_wc.dsp (1.4, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_fs/fs_test.dsp (1.2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_fs/skel_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_subr/hashdump_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_subr/sting_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_subr/string_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_test_editor.dsp (1.4,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_test_main.dsp (1.4,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_wc/checkout_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_wc/commit_test.dsp (1.3,
	post-edit-baton-removal, pre-edit-baton-removal):

	Now this is absolutely the *last* commit I make this year. Promise! 
	
	Synchronise Win32 build with changes in APR: 
	
	* subversion.dsw: Rename project aprlib to apr.  
	* .../*.dsp: Define APR_DECLARE_STATIC instead of APR_DECLARE_EXPORT
	for static linking.  
	
	* subversion/libsvn_fs/tests/skel_test.dsp: Don't link with Berkeley
	DB libraries.  subversion/libsvn_fs/tests/fs_test.dsp: Use release
	DB3 DLL for Release build.  

2000-12-21 15:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.26):

	oops, typo.  

2000-12-21 15:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.22, post-edit-baton-removal, pre-edit-baton-removal):

	Removed spurious `x'.  

2000-12-21 15:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.25):

	(svn_ra_plugin_t) 
	  (get_latest_revnum):  new func to retrieve latest revnum from
	  repos.  

2000-12-21 15:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.24):

	The RA interface doesn't need root_path specified anywhere; 
	presumably it's part of the URL used to open the ra "session".  
	
	So... score 1 for Greg Stein.  :) 
	
	(svn_ra_plugin_t): 
	  (get_commit_editor):  remove root_path arg.  
	  (do_checkout):        remove root_path arg.  
	  (do_update):          remove root_path arg.  

2000-12-21 14:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.61), libsvn_wc/adm_files.c
	(1.67, post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_wc/entries.c (1.78), libsvn_wc/get_editor.c (1.154),
	libsvn_wc/questions.c (1.43), libsvn_wc/wc.h (1.138):

	(svn_wc_check_wc): new public name of `svn_wc__check_wc'.  Moved
	from private to public header; all callers changed.  

2000-12-21 10:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.46):

	note subdir ancestor bug 

2000-12-20 22:58   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.128),
	libsvn_delta/text_delta.c (1.23), tests/libsvn_delta/random-test.c
	(1.14), tests/libsvn_delta/svndiff-test.c (1.7),
	tests/libsvn_delta/vdelta-test.c (1.6), libsvn_wc/adm_crawler.c
	(1.68):

	(svn_txdelta): Use generic streams.  All callers changed.  

2000-12-20 22:58   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_io.h (1.23), libsvn_subr/io.c (1.20):

	(read_handler_apr, close_handler_apr, read_handler_stdio, 
	close_handler_stdio): Allow file to be NULL and act as if it's an
	empty file.  

2000-12-20 19:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.60), libsvn_wc/adm_crawler.c
	(1.67):

	Start to implement "mini" crawler that reports working copy's 
	revisions to an editor.  
	
	* svn_wc.h (svn_wc_crawl_local_mods):  fixed doc strings.  
	  (svn_wc_crawl_revisions):  new declaration.  
	
	* adm_crawler.c (process_subdirectory):  renamed to
	  (report_local_mods) 
	(svn_wc_crawl_revisions):  new public interface to 
	  report_revisions(), not yet completed.  

2000-12-20 19:09   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/fs.c (1.28):

	Remove &lt;sys/stat.h&gt;, &lt;sys/types.h&gt;, &lt;fcntl.h&gt;, &lt;unistd.h&gt;.  Not
	needed and breaks Win32 build.  

2000-12-20 19:08   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/err.h (1.16):

	(svn_fs__err_dangling_rev): Remove const from REV parameter to fix 
	MSVC warning.  

2000-12-20 19:06   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsw (1.6):

	Add project test_libsvn_fs-fs.  

2000-12-20 19:05   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_client/libsvn_client.dsp (1.4),
	libsvn_fs/libsvn_fs.dsp (1.5):

	Add missing files to MSVC projects.  

2000-12-20 19:03   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/fs_test.dsp (1.1):

	Project for building fs-test.exe 

2000-12-20 13:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.23):

	Add some important parts to RA interface that we forgot, given the 
	way that editors work.  Without these things, replace_root() would
	be meaningless.  
	
	(get_commit_editor): the client must specify a ROOT_PATH in
	repository that it plans to commit to.  The EDIT_BATON handed back
	with the editor has this knowledge.  
	
	(do_update): similarly, the client must supply a ROOT_PATH in the 
	repository that represents the topmost subdir in the working copy
	that is being updated.  The REPORT_BATON handed back should have
	this knowledge.  

2000-12-20 06:15   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* ac-helpers/svn-apache.m4 (1.10, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	Modified to work with the new-style apache 2.0 directory tree (the
	httpd-2.0 module). This breaks compilation against the old
	apache-2.0 module.  PR: Obtained from: Submitted by: Reviewed by: 

2000-12-19 23:27   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_types.h (1.51):

	add a little safety to the macro 

2000-12-19 23:26   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_io.h (1.22), libsvn_subr/io.c (1.19):

	Implement "generic stream" objects which wrap read/write/close
	functions with a baton.  Nothing uses these yet (the old
	svn_read_fn_t and svn_write_fn_t still work fine); I'll be
	converting stuff to use them piece by piece.  I'll also eventually
	get rid of the pool argument to svn_read_fn_t and svn_write_fn_t as
	previously discussed on the dev list.  
	
	(svn_close_fn_t): New function type, intended to replace the
	practice of writing 0 bytes to signify the end of an output stream.  
	(svn_stream_create, svn_stream_set_read, svn_stream_set_write, 
	svn_stream_set_close): Functions for creating a stream using custom 
	handlers.  
	(svn_stream_from_aprfile, svn_stream_from_stdio): Functions for
	creating a stream which wraps an APR or stdio file.  Perhaps the
	stdio one should die eventually, but it's convenient for the moment.  
	(svn_stream_read, svn_stream_write, svn_stream_close): Functions for 
	operating on a stream.  
	* io.c (svn_stream_t, baton_apr, read_handler_apr,
	write_handler_apr, close_handler_apr, svn_stream_from_aprfile,
	baton_stdio, read_handler_stdio, write_handler_stdio,
	close_handler_stdio, svn_stream_from_stdio): Internal types and
	functions to implement the public functions described above.  

2000-12-19 06:56   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* ac-helpers/svn-apache.m4 (1.9):

	Added $withval/src/lib/aputil to the list of directories in
	APACHE_INCLUDES since the mod_dav.h in apache includes apu_db.h
	which resides in that directory. mod_dav.h is itself of course
	included from mod_dav_svn. Perhaps we should split the apache
	include directories in several variables? PR: Obtained from: 
	Submitted by: Reviewed by: 

2000-12-19 06:26   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* subversion/mod_dav_svn/Makefile.am (1.9):

	Added -I../../apr/include to the INCLUDES since the apr include
	files have been moved from the apache include directory PR: Obtained
	from: Submitted by: Reviewed by: 

2000-12-18 22:01   Greg Stein &lt;gstein@lyra.org&gt;

	* HACKING (1.21):

	whoops. Ben already put in a title/date.  

2000-12-18 21:47   Greg Stein &lt;gstein@lyra.org&gt;

	* HACKING (1.20):

	first pass at how to config/build/install/setup mod_dav_svn.  

2000-12-18 19:41   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_fs/dag.c (1.2), libsvn_fs/dbt.c (1.13,
	post-edit-baton-removal, pre-edit-baton-removal), libsvn_fs/dbt.h
	(1.12, post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_fs/rev-table.c (1.2, post-edit-baton-removal,
	pre-edit-baton-removal), tests/libsvn_fs/fs-test.c (1.3):

	* dag.c (svn_fs__dag_init_fs): Implement filesystem initialisation.  
	(dag_init_fs): New. Trail body for svn_fs__dag_init_fs.  
	
	* dbt.h (svn_fs__recno_dbt): New prototype.  
	* dbt.c (svn_fs__recno_dbt): New. Prepare DBT for RECNO ops.  
	
	*rev-table.c (svn_fs__get_rev): Explain rev-&gt;recno transform.  
	(svn_fs__put_rev): Prepare key with svn_fs__recno_dbt.  Explain
	recno-&gt;rev transform.  
	
	* tests/fs-test.c (check_filesystem_root_id): New. Trail body checks
	that the filesystem's initial node revision is `0.0'.  
	(open_berkeley_filesystem): Call check_filesystem_root_id.  

2000-12-18 15:13   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.22):

	(svn_ra_plugin_t):  clearer variable names.  

2000-12-18 10:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* HACKING (1.19):

	Adding newbie info and a TOC.  

2000-12-18 06:53   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/ra_dav.h (1.4):

	add a local property (SVN_RA_DAV__LP_VSN_URL) for storing the URL of
	a file's or dir's version resource.  

2000-12-18 06:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.30):

	Continued work on refining "proper" checkout behavior. Specifically,
	make sure that we collect and store the appropriate data items. Also
	simplified some of the processing.  
	
	* fetch DAV:version-name for all resources (it will contain the SVN
	    revision number) 
	* toss file_rec_t and dir_rec_t; just use resource_t directly within
	    the subdirs/files arrays 
	* resource_t: remember the version resource's URL (as vsn_url).
	    record the parent_baton of the resource's parent collection.  
	* fetch_ctx_t: store the activity URL as an svn_string_t rather than
	    as a const char *; when we apply the property, the interface wants a
	    string, so just build it once.  
	
	* (start_resource): record the parent_baton. use "url" terminology
	    rather than "href" * (end_resource): store the resource_t into the
	    subdirs/files rather than constructing a dir_rec_t or a file_rec_t.  
	  free the parsed URL structure when we're done with it *
	(validate_element): add validation for ELEM_version_name *
	    (end_element): record the version resource as r-&gt;vsn_url (rather
	    than the old form of r-&gt;target_href) 
	  construct and store the activity URL as an svn_string_t 
	  comments and framework for future storing of the revision number *
	    (fetch_file): take a resource_t as a param, rather than the
	    resource's URL.  
	  take some care to close the files when an error occurs 
	  store the version resource's URL as a file property *
	    (svn_ra_dav__checkout): store resource_t* in subdirs/files rather
	    than _rec_t structure.  
	  store the activity URL in a directory property 
	  don't scan the new subdirs to set the parent_baton; it now gets
	    set properly during the fetching of (sub)directory entries 
	  revise/comment the sentinel stuff a bit for the new resource_t*
	  change 

2000-12-16 20:19   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/fs.c (1.27):

	Include "apr_file_io.h" 
	(svn_fs_create_berkeley): Use apr_make_dir instead of mkdir.  

2000-12-16 18:25   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.2):

	"When /I/ use a word," Humpty Dumpty said, in rather a scornful
	tone, "it means just what I chose it to mean -- neither more nor
	less." 
	
	
	(create_berkeley_filesystem) Fixed test id.  

2000-12-16 18:14   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/Makefile.am (1.7):

	(noinst_PROGRAMS): Added fs-test.  Uncomment bits to build it.  

2000-12-16 18:13   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/run-fs-tests.sh (1.2,
	post-edit-baton-removal, pre-edit-baton-removal):

	Added fs-test to the list of tests.  Remove database files created
	by fs-test before running the tests.  

2000-12-16 18:12   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/commit.c (1.22):

	* commit.c (simple_request): Use the method name passed rather than 
	hard-coding MKACTIVITY.  Fix the http_get_status() call.  

2000-12-16 18:11   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/Makefile.am (1.22):

	(libsvn_fs_la_SOURCES): Added dag.c.  

2000-12-16 18:11   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/.cvsignore (1.4,
	post-edit-baton-removal, pre-edit-baton-removal):

	Added fs-test and test-repo.  

2000-12-16 18:10   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/fs-test.c (1.1):

	      "The time has come," the Walrus said, 
	         "To talk of many things: 
	       Of shoes -- and ships -- and sealing wax -- 
	          Of cabbages -- and kings -- 
	       And why the sea is boiling hot -- 
	          And whether pigs have wings." 

2000-12-16 18:09   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/dag.c (1.1):

	       Tweedledum and Tweedledee 
	          Agreed to have a battle, 
	       For Tweedledum said Tweedledee 
	          Had spoiled his nice new rattle.  
	
	       Just then flew down a monstrous crow, 
	          As black as a tar-barrel; 
	       Which frightened both the heroes so, 
	          They quite forgot their quarrel.  

2000-12-16 17:21   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/: err.c (1.19), err.h (1.15), fs.c (1.26),
	fs.h (1.16, post-edit-baton-removal, pre-edit-baton-removal), id.c
	(1.14, post-edit-baton-removal, pre-edit-baton-removal),
	nodes-table.c (1.3, post-edit-baton-removal,
	pre-edit-baton-removal), rev-table.h (1.2, post-edit-baton-removal,
	pre-edit-baton-removal):

	* err.h (svn_fs__err_corrupt_fs_revision, svn_fs__err_dangling_rev): 
	New prototypes.  
	
	* err.c (corrupt_rev, svn_fs__err_corrupt_fs_revision, 
	svn_fs__err_dangling_rev): New functions.  
	
	* fs.h (svn_fs_t): Add member "revisions".  
	* fs.c: Inlcude "rev-table.h".  
	(cleanup_fs): Clean up revisions table.  
	(svn_fs_create_berkeley): Create revisions table.  
	(svn_fs_open_berkeley): Open revisions table.  
	
	* id.c: Include "validate.h".  
	(svn_fs_parse_id): Use svn_fs__count_id_components to check ID's 
	syntax.  
	
	* nodes-table.c: Include "validate.h".  
	(is_valid_proplist): Removed.  
	(is_valid_flag): Use svn_fs__is_valid_proplist instead.  
	
	* rev-table.h: Include &lt;db.h&gt; and "skel.h".  
	(svn_fs__open_revisions_table, svn_fs__get_rev, svn_fs__put_rev): 
	New prototypes.  Add local eval to load svn-dev.el.  

2000-12-16 17:07   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/Makefile.am (1.21):

	(libsvn_fs_la_SOURCES): Added rev-table.c and validate.c.  

2000-12-16 17:05   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/rev-table.c (1.1):

	What mattered it to her just then that the rushes had begun to fade, 
	and to lose all their scent and beauty, from the very moment that
	she picked them?  Even real scented rushes, you know, last only a
	very little while -- and these, being dream-rushes, melted away,
	almost like snow, as they lay in heaps at her feet -- but Alice
	hardly noticed this, there were so many other curious things to
	think about.  

2000-12-16 17:05   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/validate.c (1.1, post-edit-baton-removal,
	pre-edit-baton-removal):

	"I only hope the boat won't tipple over!" she said to herself.  "Oh, 
	/what/ a lovely one! Only I couldn't quite reach it."  And it 
	certainly /did/ seem a little provoking ("almost as if it happened
	on purpose," she thought) that, though she managed to pick plenty of 
	beautiful rushes as the boat glided by, there was always a more
	lovely one that she couldn't reach.  

2000-12-16 17:04   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/validate.h (1.1, post-edit-baton-removal,
	pre-edit-baton-removal):

	So the boat was left to drift down the stream as it would, till it 
	glided gently in among the waving rushes.  And then the little
	sleeves were carefully rolled up, and the little arms were plunged
	in elbow-deep, to get hold of the rushes a good long way down before 
	breaking them off -- and for a while Alice forgot all bout the sheep 
	and the knitting, as she bent over the side of the boat, with just
	the ends of her tangled hair dipping into the water -- while with
	bright eager eyes she caught at one bunch after another of the
	darling scented rushes.  

2000-12-16 15:36   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.29):

	(my_basename): svn_path_last_component() no longer canonicalizes the
	  path, so we must do it manually. Also, use the right enum value for
	the "style".  

2000-12-16 03:15   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.28):

	* fetch.c: Use the new constant for the first element ID rather than
	a magic 0x1000.  

2000-12-16 01:32   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.28), subversion/libsvn_ra_dav/commit.c (1.21),
	subversion/libsvn_ra_dav/fetch.c (1.27):

	Patch from Mo DeJong to update SVN for Neon 0.8.0.  
	
	Submitted by: Mo DeJong &lt;mdejong@cygnus.com&gt; 

2000-12-14 23:19   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_fs/skel.c (1.15), libsvn_fs/skel.h (1.12,
	post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_fs/structure (1.25), tests/libsvn_fs/skel-test.c (1.12):

	* structure (atom.imp-len): Allow '(' and ')' as terminators;
	trailing space isn't mandatory.  
	* skel.c: (implicit_atom, use_implicit): Implement this change.  
	* skel.h: Change comment to reflect the change.  
	
	* test/skel_test.c (skel_is_paren, check_atom): New.  
	(check_implicit_length_byte, check_implicit_length_all_chars, 
	check_explicit_length): Call check_atom.  
	
	(put_implicit_length_byte): Allow parens or nothing as terminators.  
	(put_implicit_length_all_chars): Likewise.  
	
	(parse_implicit_length): Try all kinds of terminators. Don't try 
	invalid atoms.  
	(parse_explicit_length): Don't try invalid atoms.  
	
	(try_explicit_length): Add parameter check_len for atom checking, 
	needed by parse_invalid_atoms. All callers changed.  
	
	(parse_invalid_atoms): New test.  
	(test_funcs): Add it.  
	
	* skel.c, skel.h: Add local eval to load svn-dev.el.  

2000-12-14 14:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/: client.h (1.8), ra_loader.c (1.3,
	post-edit-baton-removal) (utags: pre-edit-baton-removal):

	
	* ra_loader.c, client.h (svn_client__ra_library_table): made static 
	  within this function, nobody else needs it.  Fixes linker bug too.  
	  :) 

2000-12-14 13:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.45):

	To understand Political Power right, and derive it from its
	Original, we must consider what State all Men are naturally in, and
	that is a *State of Perfect Freedom* to order their Actions, and
	dispose of their Possessions, and Persons as they think fit, within
	the bounds of the Law of Nature, without asking leave, or depending
	upon the Will of any other Man.  

2000-12-14 12:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.21), libsvn_client/Makefile.am
	(1.9), libsvn_client/client.h (1.7), libsvn_client/ra_loader.c
	(1.2):

	Implement libsvn_client mechanism for loading RA libraries.  
	
	* ra_loader.c:  simplify, rewrite.  
	
	* svn_ra.h (svn_ra_init_func_t):  new type that describes the 
	  svn_ra_FOO_init() routine.  
	
	* client.h:  add new client ra-loading declarations from ra_loader.c 
	
	* Makefile.am:  compile ra_loader.c 

2000-12-14 11:03   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: libsvn_fs/clones-table.c (1.2), libsvn_fs/dbt.c
	(1.12), libsvn_fs/dbt.h (1.11), libsvn_fs/skel.c (1.14),
	libsvn_fs/skel.h (1.11), tests/libsvn_fs/skel-test.c (1.11):

	Clean up `const' usage.  
	
	This is a matter of style, but I think `const' should be used when
	the additional static checking it enables accurately reflects
	functions' contracts and structures' invariants.  When using `const'
	would introduce casts which don't reflect genuine, deliberate type
	trickery 
	(which, given the rest of the C language, is a fine thing in many 
	cases) on the part of the code doing the cast, it's best to just
	avoid it.  (This should be in a comment somewhere, not a log
	message, but I'm not sure exactly where.) 
	
	* libsvn_fs/dbt.c (svn_fs__skel_to_dbt): Remove `const' from SKEL 
	argument.  This declares only the top skel of the tree to be
	constant, whereas what we want to say is that the entire tree will
	be unchanged.  
	* libsvn_fs/dbt.h (svn_fs__skel_to_dbt): Same for declaration.  
	* libsvn_fs/skel.c (estimate_unparsed_size, unparse, use_implicit, 
	svn_fs__unparse_skel): Same.  
	(parse, list, implicit_atom, explicit_atom, svn_fs_parse_skel, 
	svn_fs__str_atom, svn_fs__mem_atom): Remove const from DATA and STR 
	arguments, and locals that point into DATA; the `data' member of a 
	skel isn't const, so this is misleading.  
	* libsvn_fs/skel.h (struct skel_t): Make `data' member non-const; 
	you're supposed to be able to munge the data a skel points to.  
	(svn_fs__parse_skel, svn_fs__str_atom, svn_fs__mem_atom, 
	svn_fs__unparse_skel): Fix declarations.  
	* libsvn_fs/clones-table.c (svn_fs__record_rename): Copy entry_name, 
	to keep the const promise.  
	* libsvn_fs/tests/skel-test.c (parse_cstr): Remove `const'
	qualifier.  Instead, cast the call sites; only the callers know that
	they will not change the text of the string.  

2000-12-14 07:53   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.20):

	Many more "notes to self" plus some property work.  
	
	* (record_prop_change): [new] initial sketch * (do_proppatch): [new]
	initial sketch * (dir_baton_t, file_baton_t): add prop_changes
	    member for aggregating property changes * (singleton_delete_prop,
	    DELETE_THIS_PROP): [new] (will be) used for recording properties
	that need to be delete.  

2000-12-14 06:55   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_error.h (1.62), libsvn_ra_dav/commit.c
	(1.19):

	Toodling along with a bit more code, feeling out the right model and
	utility functions.  
	
	* svn_error.h: add SVN_ERR_RA_REQUEST_FAILED and
	SVN_ERR_RA_DELETE_FAILED 
	
	* commit.c: (simple_request) new function to perform a simple
	      request and return the HTTP Status-Code.  
	    (create_activity) refactored to create/use simple_request() 
	    (checkout_resource) remove the #if 0 around the function and
	      flesh it out with a bit of initial logic. still doesn't work,
	    though.  
	(commit_delete) add some initial code, but left it out pending 
	      completion of the checkout_resource() code (need a valid
	      WORKCOL).  

2000-12-13 13:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_ra.h (1.20), libsvn_client/ra_loader.c
	(1.1):

	* svn_ra.h (svn_ra_library_t):  removed, made private in ra_loader.c 
	
	* ra_loader.c:  new file with pseudocode, just saving some
	scratchwork.  

2000-12-13 13:02   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/txn-table.c (1.4):

	* libsvn_fs/txn-table.c (put_txn, svn_fs__get_txn): Acknowledge the 
	loss of svn_txn's constness, at a point where it is clear this does
	no harm.  

2000-12-13 12:52   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/txn-table.c (1.3):

	* libsvn_fs/txn-table.c (put_txn): Renamed from set_txn, for 
	consistency with the Berkeley DB functions.  All callers changed.  

2000-12-13 11:10   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/txn-table.c (1.2):

	Yeast has changed over the centuries.  Until the 1700s, bread was 
	produced from bitter beer or brewer's yeast (called `barm',
	referring to the liquid in which yeast grows) or from fermented
	solutions of grains potatoes, malt, or sugar.  Each method was
	problematic and unpredictable.  In the late 1700s, Holland became
	the first country to produce a compressed baker's yeast from spirit
	distilleries.  

2000-12-13 11:05   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: err.c (1.18), err.h (1.14):

	* libsvn_fs/err.c (svn_fs__err_corrupt_txn): New function.  
	* libsvn_fs/err.h (svn_fs__err_corrupt_txn): New declaration.  

2000-12-12 18:31   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: libsvn_fs/Makefile.am (1.20),
	libsvn_fs/clones-table.c (1.1), libsvn_fs/clones-table.h (1.3,
	post-edit-baton-removal, pre-edit-baton-removal), libsvn_fs/dag.h
	(1.6), libsvn_fs/err.c (1.17), libsvn_fs/err.h (1.13),
	libsvn_fs/fs.c (1.25), libsvn_fs/fs.h (1.15), libsvn_fs/structure
	(1.24), libsvn_fs/txn-table.c (1.1), libsvn_fs/txn-table.h (1.4),
	tests/libsvn_fs/Makefile.am (1.6):

	* libsvn_fs/clones-table.c: New file.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add clones-table.c.  
	
	* libsvn_fs/txn-table.c: New file.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add txn-table.c.  
	* libsvn_fs/err.c (svn_fs__err_corrupt_next_txn_id): New function.  
	* libsvn_fs/err.h (svn_fs__err_corrupt_next_txn_id): New
	declaration.  
	
	* libsvn_fs/clones-table.h (svn_fs__check_clone, svn_fs__is_cloned, 
	svn_fs__is_renamed): Call the skel `clone', not `clone_info', for 
	consistency with `structure'.  
	
	* libsvn_fs/fs.h (struct svn_fs_t): Update list of tables.  
	* libsvn_fs/fs.c: #include "clones-table.h", "txn-table.h", and
	"dag.h".  
	(cleanup_fs): Adjust to reflect the new set of tables.  
	(svn_fs_create_berkeley): Initialize the `clones' and `transactions' 
	tables, too.  Call svn_fs__dag_init_fs to put together the initial 
	root directory and revision.  
	(svn_fs_open_berkeley): Open the `clones' and `transactions' tables, 
	too.  
	* libsvn_fs/clones-table.h (svn_fs__open_clones_table): New
	declaration.  
	* libsvn_fs/txn-table.h (svn_fs__open_transactions_table): Same.  
	* libsvn_fs/dag.h (svn_fs__dag_init_fs): Same.  
	
	* libsvn_fs/fs.c (svn_fs_create_berkeley): Move initialization of 
	fs-&gt;env_path earlier, so error messages will say something
	meaningful.  
	
	* libsvn_fs/structure: Update.  
	
	* libsvn_fs/tests/Makefile.am (COMMON_LIBS): New variable.  
	(skel_test_LDADD): Use COMMON_LIBS.  
	(fs_test_SOURCES, fs_test_LDADD): Added, but commented out.  

2000-12-12 14:28   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: tree.c (1.6), txn-table.h (1.3), txn.c
	(1.14):

	Implement svn_fs_open_txn_root.  
	* libsvn_fs/txn.c: #include "tree.h".  
	(txn_body_open_txn_root, svn_fs_open_txn_root): New function.  
	* libsvn_fs/tree.c (new_node_object): Un-dyke this function.  
	(svn_fs__txn_root_node): New function.  
	* libsvn_fs/tree.h: New file.  
	(svn_fs__txn_root_node): New declaration.  
	
	* libsvn_fs/txn-table.h (svn_fs__get_txn): Add missing `fs'
	argument.  
	* libsvn_fs/tree.c (check_for_clone): Pass the `fs' argument to 
	svn_fs__get_txn.  

2000-12-12 14:24   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.h (1.1, post-edit-baton-removal,
	pre-edit-baton-removal):

	This should include the use of locked facilities, fences, barbed
	wire, and locked file cabinets.  

2000-12-12 14:22   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/rev-table.h (1.1):

	But then here comes Professor Kaufman blasting over the top of him
	in a language we all understand: twenty pink.  

2000-12-12 13:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: Makefile.am (1.19), txn-table.h (1.2),
	txn.c (1.13):

	* libsvn_fs/txn.c: Throw out the old contents; some of that will
	reappear in txn-table.c.  
	(make_txn, txn_body_begin_txn, svn_fs_begin_txn): New functions.  
	* libsvn_fs/txn-table.h (svn_fs__create_txn): New declaration.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add back txn.c.  

2000-12-12 13:18   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.31), libsvn_fs/tree.c (1.5):

	Implement svn_fs_delete.  
	* libsvn_fs/tree.c (check_node_mutable, traverse_to_parent): New
	functions.  
	(txn_body_delete, svn_fs_delete): New functions.  
	* include/svn_fs.h (svn_fs_delete): Doc fix.  
	
	* include/svn_fs.h (svn_fs_delete_tree): New function.  
	* libsvn_fs/tree.c (svn_fs_delete_tree): New dummy definition.  
	
	* include/svn_fs.h (svn_fs_warning_callback_t): Make the format 
	argument a const char *.  
	
	* include/svn_fs.h (svn_fs_parse_id): Doc fix.  

2000-12-12 13:12   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.5):

	* libsvn_fs/dag.h (svn_fs__dag_delete): Doc fix.  

2000-12-12 13:11   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.13, post-edit-baton-removal,
	pre-edit-baton-removal):

	Have some priest! 

2000-12-12 09:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.61):

	* include/svn_error.h (svn_errno_t): Delete
	SVN_ERR_FS_BAD_REPLACE_ROOT.  The filesystem doesn't even have this
	operation any more.  
	
	* include/svn_error.h (svn_errno_t): New error SVN_ERR_FS_CONFLICT.  

2000-12-11 22:07   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.4):

	Doc fixes.  

2000-12-11 22:04   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/tree.c (1.3):

	Doc fixes.  

2000-12-11 21:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: clones-table.h (1.2), dag.h (1.4), err.c
	(1.16), err.h (1.12), tree.c (1.2):

	* libsvn_fs/clones-table.h, libsvn_fs/dag.h: Change functions to 
	expect trails, not Berkeley DB transaction / APR pool pairs. 
	#include "trail.h".  
	
	Fix / flesh out the clone-tracking logic.  
	* libsvn_fs/tree.c: #include "txn-table.h", and "trail.h" (struct
	svn_fs_node_t): Doc fixes.  If a clone_path is zero, that's still a
	valid value, meaning that the node represents the root directory, so
	we can't use that to distinguish node states.  Use new member
	`is_cloned' instead.  Delete clone_cache; using trails allows 
	dag_node to always be accurate.  Add `original_dag_node' member, for 
	the undo_set_clone function to use.  
	(txn_prep_node, txn_finalize_node): Deleted, in favor of trails.  
	(undo_set_clone, set_clone): New functions.  
	(check_for_clone, make_clone): Simplify argument lists, thanks to 
	trails and the new svn_fs_node_t structure.  Fill in
	implementations.  
	(clone_path_to_string): Renamed from path_to_string; implementation 
	filled in.  
	(clone_path): Rework to use new svn_fs_node_t structure and trails.  
	Check the return value from svn_fs_parse_id.  (struct
	get_node_prop_args, txn_body_get_node_prop, svn_fs_get_node_prop,
	struct change_node_prop_args, txn_body_change_node_prop,
	svn_fs_change_node_prop): Update to use trails.  
	* libsvn_fs/err.c (svn_fs__err_corrupt_clone,
	svn_fs__err_not_mutable): New error functions.  
	* libsvn_fs/err.h (svn_fs__err_corrupt_clone,
	svn_fs__err_not_mutable): New declarations.  
	
	* libsvn_fs/clones-table.h (svn_fs__record_clone,
	svn_fs__record_rename): New declarations.  
	* libsvn_fs/tree.c (clone_path): Record the clones we create in the 
	clones table.  
	
	* libsvn_fs/tree.c (clone_path_t): Doc fixes.  
	
	* libsvn_fs/tree.c (new_node_object, new_child, traverse_path):
	these functions aren't used at the moment; dyke them out to avoid
	warnings.  
	
	* libsvn_fs/dag.h (svn_fs__dag_clone_child): Renamed from
	svn_fs__dag_clone.  
	* libsvn_fs/tree.c (clone_path): Change caller.  
	
	* libsvn_fs/dag.h (svn_fs__dag_get_contents): Add omitted 
	CONTENTS_FN_P and CONTENTS_BATON_P arguments.  
	
	* libsvn_fs/err.c (svn_fs__retry_txn): Function deleted; it now
	lives in trail.c.  
	* libsvn_fs/err.h (svn_fs__retry_txn): Delete declaration.  
	
	Make the header files self-sufficient: 
	* libsvn_fs/clones-table.h: #include "skel.h".  
	* libsvn_fs/err.h: #include "svn_fs.h".  

2000-12-11 21:37   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/trail.h (1.2, post-edit-baton-removal,
	pre-edit-baton-removal):

	Make the header files self-sufficient: 
	* libsvn_fs/trail.h: #include "svn_fs.h".  

2000-12-11 21:37   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/skel.h (1.10):

	Make the header files self-sufficient: 
	* libsvn_fs/skel.h: Don't #include "apr.h".  Instead, #include
	"svn_string.h" and "apr_pools.h".  

2000-12-11 21:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/node-rev.h (1.2, post-edit-baton-removal,
	pre-edit-baton-removal):

	Make the header files self-sufficient: 
	* libsvn_fs/node-rev.h: #include "skel.h".  

2000-12-11 20:06   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: nodes-table.c (1.2), nodes-table.h (1.3,
	post-edit-baton-removal, pre-edit-baton-removal):

	* libsvn_fs/nodes-table.c (svn_fs__new_node_id, last_key_before, 
	svn_fs__new_successor_id): New functions.  (Actually, these were 
	just moved from the now-dead node.c.) 
	* libsvn_fs/nodes-table.h (svn_fs__new_successor_id): Make ID const.  

2000-12-11 17:29   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/Makefile.am (1.18):

	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add `trail.c'.  

2000-12-11 17:29   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/txn-table.h (1.1):

	Do not believe in witches.  ... People who say they can steal or
	work harm by muttering certain words, those who claim to know the
	future, are madmen or thieves.  Do not believe in ghosts, in
	specters, in spirits, in phantoms...  

2000-12-11 02:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/deltas.texi (1.4):

	More tweaks in serialized deltas section; still in progress.  

2000-12-09 22:24   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: trail.c (1.1, post-edit-baton-removal,
	pre-edit-baton-removal), trail.h (1.1):

	Hey nonny nonny.  

2000-12-09 05:18   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/include/svn_fs.h (1.30):

	(svn_fs_get_node_rev): Fixed typo: return type isn't a pointer.  

2000-12-08 17:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/deltas.texi (1.3):

	Massaged wording of introductory section.  
	
	Doing same to serialized deltas section, but that is still in
	progress.  

2000-12-08 15:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.127):

	fix typo.  

2000-12-08 11:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/deltas.texi (1.2):

	typo fixed.  

2000-12-08 11:09   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: clone.c (1.2), clone.h (1.2):

	* libsvn_fs/clone.c, libsvn_fs/clone.h: These are now part of the
	tree layer.  

2000-12-08 10:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: Makefile.am (1.17), tree.c (1.1):

	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add tree.c.  
	* libsvn_fs/tree.c: New file.  The basic cloning logic is here; the
	rest is sketchy.  

2000-12-08 10:35   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: file.c (1.8), node.c (1.15):

	These are replaced with the table/dag/tree layering.  A lot of their
	code has just been moved around, though.  

2000-12-08 10:33   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.3):

	* libsvn_fs/dag.h (svn_fs__dag_txn_root): Allow the caller to open
	any mutable node in the given transaction, by ID.  This still allows
	us to detect inconsistencies, if we record the transaction in each
	mutable node, and is necessary to make use of the `clones' table.  
	
	* libsvn_fs/dag.h (svn_fs__dag_dup): New declaration.  
	
	* libsvn_fs/dag.h (svn_fs__dag_get_proplist, 
	svn_fs__dag_set_proplist): Verify that the property list is 
	well-formed.  
	
	* libsvn_fs/dag.h (svn_fs__dag_commit_txn): New declaration,
	replacing svn_fs__dag_stabilize_txn.  This is just as useful, and
	gives us a better opportunity to sanity-check the operation.  

2000-12-08 10:27   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/clones-table.h (1.1):

	Conan Doyle's eventual conversion to Spiritualism must be seen in
	the context of his real understanding of the sociological and
	theological issues involved, as well as his sound knowledge of the
	major world religions.  

2000-12-08 10:24   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/node-rev.h (1.1):

	One quick call is all it takes to see how much you could save.  

2000-12-08 08:55   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: skel.c (1.13), skel.h (1.9):

	* libsvn_fs/skel.c (svn_fs_str_atom): Renamed from svn_fs_make_atom.  
	(svn_fs_mem_atom): New function.  
	* libsvn_fs/skel.h (svn_fs_str_atom, svn_fs_mem_atom): Update
	declarations.  

2000-12-07 19:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: Makefile.am (1.3, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), client.texi (1.34, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), deltas.texi
	(1.1), svn-design.texi (1.16, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	
	* client.texi:  remove all mention of deltas.  
	
	* deltas.texi:  new chapter in its own right.  now includes new 
	  subsection describing how the "editor" interface works.  
	
	* svn-design.texi:  include deltas.texi.  
	
	* Makefile.am:  compile deltas.texi.  

2000-12-07 08:14   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.12), deadprops.c (1.7,
	post-edit-baton-removal, pre-edit-baton-removal), repos.c (1.20):

	Update to new SVN/FS interface 
	
	* dav_svn.h: svn_fs_dir_t -&gt; svn_fs_node_t 
	* repos.c: 
	    svn_fs_dir_t -&gt; svn_fs_node_t.  
	    add some pool parameters to some svn_fs_* calls.  
	    svn_fs_close_file() -&gt; svn_fs_free_file_contents().  
	    svn_fs_open_node() now takes a char* rather than svn_string_t*.  
	    svn_fs_open_root() -&gt; svn_fs_open_rev_root() 
	    (dav_svn_get_resource) use svn_fs_youngest_rev() 
	    (dav_svn_getetag) use svn_fs_get_node_id() 
	* deadprops.c: svn_fs_change_prop() -&gt; svn_fs_change_node_prop().
	    add the pool parameter.  

2000-12-07 08:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/: Makefile.am (1.16), err.c (1.15):

	Add err.c to the compile/link so DB_WRAP() can link to
	svn_fs__wrap_db().  
	
	* err.c: fix function definitions to match prototypes in err.h 

2000-12-06 17:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.44):

	I celebrate myself, and what I assume you shall assume.  For every
	atom belonging to me as good belongs to you.  

2000-12-06 15:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.2):

	It's not meaningful to mark only a single node as immutable.  You've 
	got to do the transaction's entire tree, at once.  
	* libsvn_fs/dag.h (svn_fs__dag_stabilize_txn): New declaration,
	replacing...  
	(svn_fs__dag_stabilize): Deleted.  
	
	* libsvn_fs/dag.h (svn_fs__dag_clone, svn_fs__dag_make_file): New 
	declarations.  

2000-12-06 15:40   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/nodes-table.c (1.1):

	[Forgot to include this in the 2nd-to-last commit...] 
	
	* libsvn_fs/nodes-table.c: New file.  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2000-12-06 15:39   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/rep.h (1.2):

	* libsvn_fs/rep.h: Deleted; we've got a better way to structure
	things now.  

2000-12-06 15:38   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: Makefile.am (1.15), nodes-table.h (1.2):

	* libsvn_fs/nodes-table.c: New file.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add nodes-table.c.  
	
	* libsvn_fs/nodes-table.h (svn_fs__get_rep, svn_fs_put_rep): Add 
	`const' qualifiers to the ID arguments.  

2000-12-06 15:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/libsvn_fs/skel-test.c (1.10):

	Replace uses of NEW and NEWARRAY with direct calls to apr_palloc.  

2000-12-06 15:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.59), libsvn_wc/adm_crawler.c
	(1.66), libsvn_wc/questions.c (1.42), libsvn_wc/status.c (1.21),
	libsvn_wc/wc.h (1.137):

	Fix the trace editor's status code reporting.  
	
	* trace.c (close_file, close_directory):  rewrite the logic of these 
	  two functions to correctly print `U', `G', or `C' during
	  update/checkout.  
	
	* wc.h (svn_wc__conflicted_p):  removed declaration.  
	
	* svn_wc.h (svn_wc_conflicted_p):  moved here, removed an
	  underscore.  This needs to be a public function, so the trace editor
	  in client/ can easily report conflicts.  
	
	* questions.c (svn_wc_conflicted_p): changed definition name too.  
	
	* status.c (assemble_status), adm_crawler.c
	  (bail_if_unresolved_conflict): changed callers.  

2000-12-06 15:27   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: Makefile.am (1.14), fs.c (1.24), fs.h
	(1.14):

	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add back fs.c.  It's 
	alleged to compile now.  
	* libsvn_fs/fs.h (struct svn_fs_t): Delete the transaction and node 
	caches; I don't really understand how they're going to work yet.  
	(struct node_parent_t, struct svn_fs_node_t): Deleted.  We're doing
	this stuff in other ways.  
	* libsvn_fs/fs.c: Don't #include "revision.h", "node.h", or "txn.h".  
	Instead, #include "nodes-table.h".  
	(svn_fs_new): Don't initialize node_cache, open_txns.  
	(svn_fs_create_berkeley, svn_fs_open_berkeley): Only deal with
	`nodes' table for now.  We'll add more initializers as we get the
	other table modules together.  For now, we want to compile.  
	
	* libsvn_fs/fs.c (default_warning_func): Add `const' qualifier to 
	format string.  
	
	* libsvn_fs/fs.h (NEW, NEWARRAY): Deleted.  If we're not going to
	use them throughout Subversion (and I don't like them enough to
	recommend that), it's better to just use the apr pool functions
	directly.  
	* libsvn_fs/fs.c (svn_fs_new): Call apr_pcalloc directly.  

2000-12-06 15:22   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/nodes-table.h (1.1):

	Inside... an exclusive new member offer that includes 2,500 bonus 
	Dividend Miles! 

2000-12-06 13:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.43):

	I do not ask any more than this.  I swim in it, as in the sea.  

2000-12-06 13:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.78):

	(log_do_detect_conflict): bugfix -- was stat'ing the wrong file. :) 

2000-12-06 12:06   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.23):

	Record parents in mutable nodes.  

2000-12-06 12:06   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dag.h (1.1):

	If you have any questions about your scores, see you dean or
	adviser.  

2000-12-05 17:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.24), include/svn_string.h
	(1.42), libsvn_subr/path.c (1.28, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_subr/svn_string.c (1.8,
	post-edit-baton-removal, pre-edit-baton-removal):

	(svn_path_split): cleaner semantics, document them.  
	(svn_path_last_component): add const, don't canonicalize source
	path, document resulting new behavior.  
	(svn_string_find_char_backward): add const due to cascade from above 
	changes.  

2000-12-05 17:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/get_editor.c (1.153), libsvn_wc/log.c
	(1.77), libsvn_wc/wc.h (1.136), tests/xml/pipatch.xml (1.1,
	post-edit-baton-removal, pre-edit-baton-removal):

	SVN_WC__LOG_RM_IF_EMPTY didn't go far enough.  Replace this command 
	with SVN_WC__LOG_DETECT_CONFLICT.  
	
	Also unrelatedly, check in progress on svn-test2.sh -- our 
	"conflict/merge" test script.  
	
	* wc.h (SVN_WC__LOG_DETECT_CONFLICT):  new log command;   replaces 
	  RM_IF_EMPTY.  
	
	* get_editor.c (close_file): write this new command to the log after 
	  &lt;run-cmd `patch'&gt;, instead of the older RM_IF_EMPTY.  
	
	* log.c (start_handler):  new detect_conflict command replaces 
	  rm_if_empty in the dispatcher.  
	
	  (log_do_rm_if_empty):  removed.  
	
	  (log_do_detect_conflict): if the .rej file is zero bytes, remove it.  
	  Otherwise mark the entry as conflicted.  Slightly CISC-ish, but 
	  that's life.  :) 
	
	* svn-test2.sh:  textual conflicts are now detected, because of our 
	  new log command above.  :) 
	
	* pipatch.xml:  new xml file for svn-test2.sh -- designed to create 
	  textual conflict when applied to `pi' 

2000-12-05 11:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.65):

	(process_subdirectory):  bugfix.  we were checking for local 
	propchanges on each directory *twice*.  all fixed.  

2000-12-05 10:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.64):

	(get_common_path):  new utility func 

2000-12-05 09:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.42):

	Save stack.  

2000-12-04 10:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_path.h (1.23), libsvn_subr/path.c
	(1.27):

	(svn_path_get_longest_ancestor):  new utility func 

2000-12-03 13:59   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.22):

	I am going to Los Angeles to see my own name on a screen, five feet 
	long and luminous...  

2000-12-03 13:53   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/Makefile.am (1.13):

	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add dbt.c and id.c
	to list of buildable files.  

2000-12-03 13:52   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/skel.c (1.12):

	* libsvn_fs/skel.c (svn_fs__prepend): Rename argument `list_skel'
	from `list', to avoid warnings.  

2000-12-03 13:33   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/id.c (1.13):

	* libsvn_fs/id.c: Don't #include "fs.h".  This file is independent
	of the rest of the filesystem code.  
	(svn_fs_parse_id): Replace use of NEWARRAY with a direct call to
	apr_palloc.  

2000-12-03 13:29   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/skel.c (1.11):

	Don't #include "fs.h".  This makes skel.c's independence clearer.  
	
	Replace uses of NEW and NEWARRAY macros (defined in fs.h) with
	direct calls to apr_palloc.  Any reader of Subversion will be used
	to the pool allocation functions anyway; unless macros like that are
	used consistently throughout the system, they're just one more level
	to read through.  

2000-12-03 08:04   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.29):

	New version of filesystem interface.  
	- Use char * for filenames, not svn_string_t.  
	- Simplified transaction interface: transactions look more like 
	  ordinary mutable Unix filesystems.  
	- Interface to revision table.  

2000-12-03 07:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.18), ra_dav.h (1.3):

	* commit.c: (create_activity) fill out with "real" code to create an 
	      activity on the server. (not used yet) 
	    (all) add directory and file baton structures, and their
	    creation 
	(all) add temporary prints to watch what is going on 
	* ra_dav.h: add SVN_RA_DAV_LP_* symbols for local (client-side-only) 
	      property names 
	* ra-dav-test.c: simplify an error case. leave a note about
	close_edit.  
	* ra-commit.c: [new] perform a commit to the server 

2000-12-03 07:43   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/DESIGN-NOTES.txt (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	some notes about the implementation 

2000-12-03 07:43   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_error.h (1.60):

	* add some more RA-specific errors. add some doc to that effect.  

2000-12-03 03:48   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_delta/svndiff.c (1.10), libsvn_subr/base64.c
	(1.9), libsvn_subr/hashdump.c (1.19, post-edit-baton-removal,
	pre-edit-baton-removal), tests/libsvn_delta/vdelta-test.c (1.5):

	Tweak a few declarations and types to fix some minor type mismatches
	that are found by very strict compilers.  
	
	Submitted by: Sam TH &lt;sam@uchicago.edu&gt; 

2000-12-02 22:10   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: TODO (1.12), clone.c (1.1), clone.h (1.1),
	dir.c (1.13, post-edit-baton-removal, pre-edit-baton-removal),
	dir.h (1.5), err.c (1.14), err.h (1.11), file.c (1.7), file.h
	(1.5), fs.c (1.23), fs.h (1.13), node.c (1.14), node.h (1.8,
	post-edit-baton-removal, pre-edit-baton-removal), rep.c (1.1,
	post-edit-baton-removal, pre-edit-baton-removal), rep.h (1.1),
	revision.c (1.5, post-edit-baton-removal, pre-edit-baton-removal),
	structure (1.21), txn.c (1.12):

	Just dump everything I've got into CVS.  I kept thinking it'd all be 
	ready soon, but that never works out.  So, for now, I've disabled 
	everything in Makefile.am, so as not to break builds for the rest of 
	Subversion; we can add things back as we get them working.  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2000-12-02 21:59   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/Makefile.am (1.12):

	(libsvn_fs_la_SOURCES): Remove the files that (I think) don't
	compile at the moment.  

2000-12-02 17:30   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_delta/random-test.c (1.13):

	* client/main.c: (main) add "const" to argv parameter 
	    make options[] "static const" to constify and initialize it 
	* libsvn_delta/tests/random-test.c: (main) add "const" to argv
	parameter 

2000-12-02 02:08   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.19), libsvn_ra_dav/ra_dav.h
	(1.2), libsvn_ra_dav/session.c (1.13):

	* svn_ra.h: (svn_ra_plugin_t) remove svn_ra_ prefix on field members
	      -- these don't need namespace protection.  
	    adjust doc about svn_ra_FOO_init: pass a pool, make the returned
	      plugin "const" 
	* ra_dav.h: include svn_ra.h; fix prototype for the init function 
	* session.c: fix prototype for the init function. return the plugin.  
	* ra-dav-test.c: update for new RA apis.  

2000-12-01 10:23   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_output.c (1.18):

	(add_file, replace_file): Set eb-&gt;curfile after calling 
	output_addreplace, not before.  output_addreplace calls get_to_elem, 
	which uses and sets eb-&gt;curfile assuming it points to the previously 
	open file.  

2000-11-30 23:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.18):

	Second pass at the public "ra" interface, after talking with Greg.  
	More changes likely to come. :) 

2000-11-30 22:25   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.17), libsvn_ra_dav/commit.c
	(1.17), libsvn_ra_dav/fetch.c (1.26), libsvn_ra_dav/ra_dav.h (1.1),
	libsvn_ra_dav/ra_session.h (1.6), libsvn_ra_dav/session.c (1.12):

	*) add "const" to some of the types in the new svn_ra.h interface 
	*) update libsvn_ra_dav to the new interface 
	   [ some portions remain disabled/hacked-out ] 
	
	*) change that got picked up: fetch.c: grab the
	   DAV:activity-collection-set property and its contained HREF(s).
	   store it as the location where we can create activities.  

2000-11-30 18:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.63):

	Add comments on how to improve crawler interface.  (temporary) 

2000-11-30 16:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.16):

	Fix typo in declaration.  

2000-11-30 16:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.15):

	Describe how working copy updates should work through RA.  

2000-11-30 13:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_ra.h (1.14):

	First draft of new RA implementation.  Everybody take a look-see.  

2000-11-29 15:24   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/version.c (1.6):

	fill out the framework for the versioning hooks 

2000-11-29 12:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.13), mod_dav_svn/dav_svn.h
	(1.11), mod_dav_svn/deadprops.c (1.6), mod_dav_svn/liveprops.c
	(1.11), mod_dav_svn/mod_dav_svn.c (1.15), mod_dav_svn/repos.c
	(1.19), mod_dav_svn/util.c (1.4, post-edit-baton-removal,
	pre-edit-baton-removal), mod_dav_svn/version.c (1.5),
	libsvn_ra_dav/commit.c (1.16), libsvn_ra_dav/fetch.c (1.25),
	libsvn_ra_dav/ra_session.h (1.5), libsvn_ra_dav/session.c (1.11):

	SapphireCreek sponsored the specification process, but they were
	required to cancel the project before the additional (coding)
	milestones. Therefore, these comments do not apply.  

2000-11-29 11:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.152), log.c (1.76), wc.h
	(1.135):

	When we merge text during updates, remove any zero-byte reject files 
	left lying around from the `patch` command.  
	
	* log.c (log_do_rm_if_empty):  new variant of log_do_rm() which only 
	  removes file iff its size is zero.  
	
	  (start_handler):  add SVN_WC__LOG_RM_IF_EMPTY to log dispatcher.  
	
	* wc.h (SVN_WC__LOG_RM_IF_EMPTY):  new log command.  
	
	* get_editor.c (close_file):  after adding a log command to &lt;rm 
	  received_diff_filename&gt; unconditionally, add a command to 
	  &lt;rm-if-empty reject_filename&gt;.  

2000-11-28 19:36   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/structure (1.20):

	(REVISION): Fixed typo, "V-1" -&gt; "V+1".  

2000-11-28 15:56   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/structure (1.19):

	(Clones): Renamed ENTRY -&gt; ENTRY-NAME in "moved" clone.  Added
	"Appendix: Filesystem structure summary".  

2000-11-27 14:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.41):

	Behold the Mighty Stack.  

2000-11-27 13:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/xml/: up-props.xml (1.1), up5.xml (1.1) (utags:
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal):

	New `make check` script.  Tests merging/conflict handling for
	properties.  Soon to be expanded to textual tests.  

2000-11-27 12:21   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/structure (1.18):

	Fix typos in "DELTA", "Cloning" and "Merging rules" sections..  
	Clarify description in "REVISION" secion.  

2000-11-27 10:56   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.17):

	Clarify `Cloning' page, as per Branko's comments.  

2000-11-27 07:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.10), liveprops.c (1.10):

	* liveprops.c, dav_svn.h: sync with updated mod_dav.h: prototype for 
	  find_liveprop hook now takes a dav_resource (rather than a
	  request_rec) 
	
	* liveprops.c (dav_svn_find_liveprop, dav_svn_insert_all_liveprops):
	  add check on the passed resource to ensure it is "ours" before
	  looking for or inserting props.  

2000-11-27 04:45   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/mod_dav_svn.c (1.14):

	sync with changes to dav_provider: remove the "liveprop" field; add 
	"binding" field.  

2000-11-26 09:20   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.44):

	We don't use strerror(), and we can compile with stricter GCC
	warnings.  

2000-11-26 09:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_hash.h (1.13), include/svn_io.h (1.21),
	libsvn_client/apply_edits.c (1.8), libsvn_delta/text_delta.c
	(1.22), libsvn_delta/vdelta.c (1.9, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_fs/err.c (1.13), libsvn_fs/err.h
	(1.10), libsvn_fs/id.c (1.12), tests/libsvn_delta/deltaparse-test.c
	(1.59), tests/libsvn_delta/xml-output-test.c (1.7),
	libsvn_subr/base64.c (1.8), libsvn_wc/adm_files.c (1.66),
	libsvn_wc/entries.c (1.77), tests/libsvn_fs/skel-test.c (1.9),
	tests/libsvn_subr/hashdump-test.c (1.16, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_wc/get_editor.c (1.151),
	libsvn_wc/local_changes.c (1.26, post-edit-baton-removal,
	pre-edit-baton-removal), libsvn_wc/lock.c (1.21,
	post-edit-baton-removal, pre-edit-baton-removal), libsvn_wc/log.c
	(1.75), libsvn_wc/props.c (1.22), libsvn_wc/wc.h (1.134),
	tests/svn_test_editor.c (1.13), tests/svn_tests_main.c (1.14,
	post-edit-baton-removal, pre-edit-baton-removal),
	tests/libsvn_wc/checkout-test.c (1.36),
	tests/libsvn_wc/commit-test.c (1.14):

	Small tweaks for stricter compilation, and compensate for some APR
	header rearrangement. Fixed a small bug in
	svn_wc__do_property_merge().  
	
	* client/main.c: add &lt;apr_general.h&gt; for
	apr_initialize/apr_terminate 
	* include/svn_hash.h: add APR headers for APR types used in file 
	* include/svn_io.h: add APR headers for APR types used in file 
	* libsvn_client/apply_edits.c: (do_edits) add const to 'repos'
	    variable since the RHS is actually const.  
	* libsvn_delta/text_delta.c: add &lt;apr_general.h&gt; for APR_INLINE 
	* libsvn_delta/vdelta.c: add &lt;apr_general.h&gt; for APR_INLINE 
	* libsvn_delta/tests/deltaparse-test.c: add a &lt;apr_general.h&gt; for 
	    apr_initialize/apr_terminate. group APR includes and use &lt; &gt; 
	* libsvn_delta/tests/xml-output-test.c: add a &lt;apr_general.h&gt; for 
	    apr_initialize/apr_terminate. group APR includes and use &lt; &gt; 
	* libsvn_fs/err.c: (svn_fs__dberrf) add const to 'fmt' argument 
	* libsvn_fs/err.h: (svn_fs__dberrf) add const to 'fmt' argument 
	* libsvn_fs/id.c: remove unneeded &lt;math.h&gt; include 
	* libsvn_fs/tests/skel-test.c: (parse_cstr, put_explicit_length, 
	    check_explicit_length, try_explicit_length) add const to an
	  argument 
	(init_char_types) add const to 'c' local variable 
	* libsvn_subr/base64.c: add a &lt;apr_general.h&gt; for 
	    apr_initialize/apr_terminate. group APR includes and use &lt; &gt; 
	* libsvn_subr/tets/hashdump-test.c: remove key, f, and err globals,
	    moving them into the appropriate functions. add const to 'review'
	  global.  
	(test1) add 'key' and 'f' local variables 
	  (test2) add 'f' local variable 
	* libsvn_wc/adm_files.c: (close_adm_file) remove inner declarations
	    of apr_err and components_added to prevent shadowing of outer decl.
	    minor formatting changes.  
	* libsvn_wc/entries.c: (handle_start_tag) add const to 'nstr' local
	    variable since the RHS can/should be const.  
	* libsvn_wc/get_editor.c: add a &lt;apr_thread_proc.h&gt;.  
	  (close_file): add const to 'diff_args' since the values are const.
	    remove inner decl of 'apr_err' which shadowed an outer decl 
	* libsvn_wc/local_changes.c: (svn_wc__string_to_time) use 'when'
	    rather than 'time' to prevent shadowing of a global 'time' symbol.  
	* libsvn_wc/lock.c: (svn_wc__lock) use 'wait_for' rather than 'wait'
	    to prevent shadowing of a global 'wait' symbol.  
	* libsvn_wc/log.c: (run_cmd_in_directory) add const to 'args'
	    argument to match expectation of apr_create_process() (and remove
	    cast). fix typos in error strings ("run_cmd_under_directory" -&gt;
	"run_cmd_in_directory") 
	* libsvn_wc/props.c: (svn_wc__do_property_merge) rename inner
	    'full_path' to 'full_reject_path' to prevent shadowing of outer
	    decl. fix bug in error condition which used reject_path-&gt;data, yet
	    reject_path is NULL; correct value is full_reject_path-&gt;data.  
	* libsvn_wc/wc.h: (svn_wc__lock) use 'wait_for' rather than 'wait'.  
	  (svn_wc__time_to_string) use 'when' rather than 'time'.  
	* libsvn_wc/tests/checkout-test.c: add a &lt;apr_general.h&gt; for 
	    apr_initialize/apr_terminate.  
	* libsvn_wc/tests/commit-test.c: add a &lt;apr_general.h&gt; for 
	    apr_initialize/apr_terminate. group APR includes and use &lt; &gt; 
	* tests-common/svn_test_editor.c: (test_delete) add a const to
	    'Aname' since the RHS could be const.  
	  (add_or_replace_dir) add a const to 'Aname' and 'ancestor' since
	    RHS values could be const.  
	  (test_apply_textdelta) add a const to 'Aname' since RHS may be
	  const 
	(add_or_replace_file) add a const to 'Aname' and 'ancestor' since
	    RHS values could be const.  
	* tests-common/svn_tests_main.c: add a &lt;apr_general.h&gt; for 
	    apr_initialize/apr_terminate.  

2000-11-25 18:51   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/liveprops.c (1.9):

	Minor tweaks. Some additional commentary.  
	
	* (SVN_RO_DAV_PROP, SVN_RW_DAV_PROP): [new] macros to ease
	    construction of dav_liveprop_spec initialization structures.  *
	    (dav_svn_insert_prop): add (empty) cases for DAV:getcontentlanguage, 
	DAV:getcontenttype, and DAV:target.  

2000-11-23 07:27   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/liveprops.c (1.8):

	Remove the DAV:displayname and DAV:source liveprops. mod_dav handles
	these "core" properties now.  

2000-11-23 05:45   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.18):

	dav_resource now has a public pool field for related allocations.  
	
	* (dav_svn_get_resource): fill in pool field * (dav_svn_walk): put
	the proper pool into the resource's pool field 

2000-11-23 04:42   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/liveprops.c (1.7):

	Update to sync with some recent mod_dav work. Specifically, some
	changes that simplify handling of liveprops.  
	
	* torch DAV_PROPID_SVN_* values. use new DAV_PROPID_* values.  
	* toss dav_svn_liveprop_name in favor of dav_liveprop_spec (and add 
	  writeable flag to the property defns) 
	* add dav_svn_liveprop_group * (dav_svn_insert_prop): use new
	    DAV_PROPID_* values. use new dav_get_liveprop_info() function.
	    rename "ns" to "global_ns" for clarification.  *
	    (dav_svn_is_writeable): returns a simple "int" now. use new 
	dav_get_liveprop_info() function.  * (dav_svn_find_liveprop): use
	new dav_do_find_liveprop() function *
	(dav_svn_insert_all_liveprops): use new DAV_PROPID_* values *
	(dav_svn_register_uris): use new dav_register_liveprop_group()
	function 

2000-11-23 04:35   Branko Cibej &lt;brane@xbc.nu&gt;

	* IDEAS (1.18):

	O.K., so I'm being stubborn.  

2000-11-23 04:20   Branko Cibej &lt;brane@xbc.nu&gt;

	* IDEAS (1.17):

	No such thing as :ssh: remote CVS.  

2000-11-22 21:45   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.17):

	(dav_svn_get_resource): sync with mod_dav.h -- the hook no longer
	    takes a WORKSPACE argument 

2000-11-22 21:06   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsp (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), subversion.dsw (1.5), svn_check.dsp (1.1),
	svn_config.dsp (1.1, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/libsvn_client/libsvn_client.dsp
	(1.3), subversion/libsvn_delta/libsvn_delta.dsp (1.3),
	subversion/libsvn_fs/libsvn_fs.dsp (1.4),
	subversion/tests/libsvn_delta/deltaparse_test.dsp (1.2),
	subversion/tests/libsvn_delta/random_test.dsp (1.2),
	subversion/tests/libsvn_delta/svndiff_test.dsp (1.2),
	subversion/tests/libsvn_delta/vdelta_test.dsp (1.2),
	subversion/tests/libsvn_delta/xml_output_test.dsp (1.2),
	subversion/tests/libsvn_fs/skel_test.dsp (1.2),
	subversion/libsvn_subr/libsvn_subr.dsp (1.3),
	subversion/libsvn_wc/libsvn_wc.dsp (1.3),
	subversion/tests/libsvn_subr/hashdump_test.dsp (1.2),
	subversion/tests/libsvn_subr/sting_test.dsp (1.2),
	subversion/tests/libsvn_subr/string_test.dsp (1.2),
	subversion/tests/libsvn_wc/checkout_test.dsp (1.2),
	subversion/tests/libsvn_wc/commit_test.dsp (1.2),
	subversion/tests/libsvn_test_editor.dsp (1.3),
	subversion/tests/libsvn_test_main.dsp (1.3):

	Major update of the Win32 build environment.  
	
	* subversion.dsp: New, build all libraries and modules.  
	* svn_check.dsp: New, build all test drivers.  
	* svn_config.dsp: New, create config.h from config.hw.  
	* subversion.dsw: Include the above new projects, add dependencies.  
	
	* subversion/client/subversion_client.dsp: Update include path.  Add
	files add-cmd.c, checkout-cmd.c, commit-cmd.c, delete-cmd.c, 
	propget-cmd.c, proplist-cmd.c, props.c, propset-cmd.c, statuc-cmd.c, 
	tracs.c and update-cmd.c.  
	
	* subversion/libsvn_client/libsvn_client.dsp, 
	subversion/libsvn_delta/libsvn_delta.dsp, 
	subversion/libsvn_delta/tests/deltaparse_test.dsp, 
	subversion/libsvn_fs/libsvn_fs.dsp, 
	subversion/libsvn_subr/libsvn_subr.dsp, 
	subversion/libsvn_subr/tests/sting_test.dsp, 
	subversion/libsvn_wc/libsvn_wc.dsp, 
	subversion/tests-common/libsvn_test_editor.dsp, 
	subversion/tests-common/libsvn_test_main.dsp: Update include path.  
	
	* subversion/libsvn_delta/tests/random_test.dsp, 
	subversion/libsvn_delta/tests/svndiff_test.dsp, 
	subversion/libsvn_delta/tests/vdelta_test.dsp, 
	subversion/libsvn_delta/tests/xml_output_test.dsp, 
	subversion/libsvn_fs/tests/skel_test.dsp, 
	subversion/libsvn_fs/libsvn_fs.dsp, 
	subversion/libsvn_subr/tests/hashdump_test.dsp, 
	subversion/libsvn_wc/libsvn_wc.dsp, 
	subversion/libsvn_wc/tests/commit_test.dsp: Rename project and 
	update include path.  PR: Obtained from: Submitted by: Reviewed by: 

2000-11-22 20:34   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.18):

	Describe chanes in Win32 build environment.  (Not that things build
	on Win32 right now, of course.) 

2000-11-22 18:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.40):

	push 

2000-11-22 17:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* COPYING (1.5, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), STACK (1.39):

	* COPYING: tweak intro.  
	
	* STACK: pop.  

2000-11-22 17:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/license.texi (1.3, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/include/svn_base64.h (1.4),
	subversion/include/svn_client.h (1.13),
	subversion/include/svn_delta.h (1.126),
	subversion/include/svn_error.h (1.59), subversion/include/svn_fs.h
	(1.28), subversion/include/svn_hash.h (1.12),
	subversion/include/svn_io.h (1.20), subversion/include/svn_path.h
	(1.22), subversion/include/svn_ra.h (1.12),
	subversion/include/svn_string.h (1.41),
	subversion/include/svn_test.h (1.6), subversion/include/svn_types.h
	(1.50), subversion/include/svn_wc.h (1.58),
	subversion/include/svn_xml.h (1.26), subversion/libsvn_client/add.c
	(1.5, post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_client/apply_edits.c (1.7),
	subversion/libsvn_client/checkout.c (1.12, pre-edit-baton-removal),
	subversion/libsvn_client/client.h (1.6),
	subversion/libsvn_client/commit.c (1.13),
	subversion/libsvn_client/delete.c (1.5),
	subversion/libsvn_client/status.c (1.7),
	subversion/libsvn_client/update.c (1.9, pre-edit-baton-removal),
	subversion/libsvn_delta/compose_editors.c (1.6),
	subversion/libsvn_delta/delta.h (1.46),
	subversion/libsvn_delta/svndiff.c (1.9),
	subversion/libsvn_delta/text_delta.c (1.21),
	subversion/libsvn_delta/vdelta.c (1.8),
	subversion/libsvn_delta/xml_output.c (1.17),
	subversion/libsvn_delta/xml_parse.c (1.134),
	subversion/tests/libsvn_delta/deltaparse-test.c (1.58),
	subversion/tests/libsvn_delta/random-test.c (1.12),
	subversion/tests/libsvn_delta/svndiff-test.c (1.6),
	subversion/tests/libsvn_delta/vdelta-test.c (1.4),
	subversion/tests/libsvn_delta/xml-output-test.c (1.6),
	subversion/libsvn_fs/convert-size.c (1.8),
	subversion/libsvn_fs/convert-size.h (1.5, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/libsvn_fs/dbt.c (1.11),
	subversion/libsvn_fs/dbt.h (1.10), subversion/libsvn_fs/delta.c
	(1.18), subversion/libsvn_fs/dir.c (1.12),
	subversion/libsvn_fs/dir.h (1.4), subversion/libsvn_fs/err.c
	(1.12), subversion/libsvn_fs/err.h (1.9),
	subversion/libsvn_fs/file.c (1.6), subversion/libsvn_fs/file.h
	(1.4), subversion/libsvn_fs/fs.c (1.22), subversion/libsvn_fs/fs.h
	(1.12), subversion/libsvn_fs/id.c (1.11), subversion/libsvn_fs/id.h
	(1.7, post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_fs/node.c (1.13), subversion/libsvn_fs/node.h
	(1.7), subversion/libsvn_fs/revision.c (1.4),
	subversion/libsvn_fs/revision.h (1.3, post-edit-baton-removal,
	pre-edit-baton-removal), subversion/libsvn_fs/skel.c (1.10),
	subversion/libsvn_fs/skel.h (1.8), subversion/libsvn_fs/txn.c
	(1.11), subversion/libsvn_fs/txn.h (1.4),
	subversion/libsvn_repos/delta.c (1.18),
	subversion/tests/libsvn_fs/skel-test.c (1.8),
	subversion/libsvn_ra_dav/commit.c (1.15),
	subversion/libsvn_ra_dav/fetch.c (1.24),
	subversion/libsvn_ra_dav/ra_session.h (1.4),
	subversion/libsvn_ra_dav/session.c (1.10),
	subversion/libsvn_subr/base64.c (1.7),
	subversion/libsvn_subr/hashdump.c (1.18),
	subversion/libsvn_subr/io.c (1.18),
	subversion/libsvn_subr/keysort.c (1.6),
	subversion/libsvn_subr/path.c (1.26),
	subversion/libsvn_subr/svn_error.c (1.47),
	subversion/libsvn_subr/svn_string.c (1.7),
	subversion/libsvn_subr/xml.c (1.34, post-edit-baton-removal,
	pre-edit-baton-removal),
	subversion/tests/libsvn_subr/hashdump-test.c (1.15),
	subversion/tests/libsvn_subr/stringtest.c (1.5,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_wc/adm_crawler.c (1.62),
	subversion/libsvn_wc/adm_files.c (1.65),
	subversion/libsvn_wc/adm_ops.c (1.36),
	subversion/libsvn_wc/entries.c (1.76),
	subversion/libsvn_wc/get_editor.c (1.150),
	subversion/libsvn_wc/local_changes.c (1.25),
	subversion/libsvn_wc/lock.c (1.20), subversion/libsvn_wc/log.c
	(1.74), subversion/libsvn_wc/props.c (1.21),
	subversion/libsvn_wc/questions.c (1.41),
	subversion/libsvn_wc/status.c (1.20), subversion/libsvn_wc/util.c
	(1.15, post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_wc/wc.h (1.133),
	subversion/tests/libsvn_wc/checkout-test.c (1.35),
	subversion/tests/libsvn_wc/commit-test.c (1.13),
	subversion/mod_dav_svn/dav_svn.h (1.9),
	subversion/mod_dav_svn/deadprops.c (1.5),
	subversion/mod_dav_svn/liveprops.c (1.6),
	subversion/mod_dav_svn/mod_dav_svn.c (1.13),
	subversion/mod_dav_svn/repos.c (1.16),
	subversion/mod_dav_svn/util.c (1.3),
	subversion/mod_dav_svn/version.c (1.4),
	subversion/tests/svn_test_editor.c (1.12),
	subversion/tests/svn_tests_main.c (1.13), tools/check-license.py
	(1.3, post-edit-baton-removal, pre-edit-baton-removal):

	Change to shorter license blurb, referencing the COPYING file and a 
	URL, and mentioning the possibility of later versions.  

2000-11-22 17:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/license-1.html (1.2, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	Remove backlink; the frames take care of that already.  

2000-11-22 17:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/license-1.html (1.1):

	Post license on web.  

2000-11-22 15:10   Greg Stein &lt;gstein@lyra.org&gt;

	* tools/check-license.py (1.2):

	add the -C switch to support changing licenses in files 

2000-11-22 13:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.17, post-edit-baton-removal, pre-edit-baton-removal):

	A foolish consistency is the hobgoblin of little minds.  

2000-11-22 13:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.16):

	Added Win/Mac GUI client task.  

2000-11-22 10:55   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.16):

	Update to describe new cloning strategy, which allows transactions
	to look pretty much exactly like Unix filesystems.  

2000-11-22 09:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.15):

	Check in blather before deleting it all.  Maybe it'll be appropriate 
	for the design doc on the filesystem implementation, but for now 
	structure should assume you know how things work.  

2000-11-22 05:28   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.8), liveprops.c (1.5),
	repos.c (1.15):

	* liveprops.c: initial framework for live property handling 
	* repos.c: (dav_svn_getetag) make this available outside the file 
	* dav_svn.h: (dav_svn_getetag) [new] now available to other files 

2000-11-21 19:01   Greg Stein &lt;gstein@lyra.org&gt;

	* TASKS (1.15):

	*) The fs/apache stuff is already on my plate.  
	*) libsvn_client (not WC) hooks with libsvn_ra_dav 
	*) note that libsvn_client includes XML stuff which should be
	libsvn_ra_xml 

2000-11-21 18:51   Greg Stein &lt;gstein@lyra.org&gt;

	* IDEAS (1.16):

	After having a CVS/ subdir blown away by an app, I can definitely
	see the positive benefit of a single, central database of data.  

2000-11-21 18:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.38):

	3.141592653589793238462643383279502884197 

2000-11-21 18:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.61), log.c (1.73):

	Finish making property-commits work on both files and directories.  
	
	(After a successful commit: recognize the newest property files; 
	update *both* dir and file entries appropriately with text- and
	prop- timestamps; remove any mention of reject files.) 
	
	* log.c (svn_wc__log_commit): reorganized routine; we now
	  potentially write &lt;log-committed ...&gt; entries whose "name" attribute
	  is SVN_WC_ENTRY_THIS_DIR.  
	
	  (log_do_committed): major rewrite, because old routine was assuming 
	  files-only (and no props).  
	
	  (svn_wc__run_log):  add a quick_wrap error message.  
	
	  (svn_wc__cleanup):  *check* to see if a logfile exists in a dir 
	  before trying to run it.  It's now possible to have directories in 
	  affected_targets, therefore you may "care_about_dir" (because a 
	  child entry is affected), but the log file may be *within* the 
	  child, not the current dir you "care" about.  
	
	* adm_crawler.c (do_apply_textdelta):  check for error after 
	  svn_io_copy_file().  
	
	  (do_prop_deltas):  *copy* the working property file to tmp area, 
	  just like we do when commiting a file's text! 

2000-11-21 00:13   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* autogen.sh (1.27):

	I changed cvs directory for apr to /home/cvspublic.  

2000-11-20 16:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.26):

	Update instructions for getting APR via CVS.  

2000-11-17 21:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.37):

	One more straw.  

2000-11-17 20:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.57), libsvn_wc/adm_crawler.c
	(1.60), libsvn_wc/adm_ops.c (1.35), libsvn_wc/entries.c (1.75),
	libsvn_wc/log.c (1.72), libsvn_wc/questions.c (1.40),
	libsvn_wc/status.c (1.19), libsvn_wc/wc.h (1.132):

	Clarifications: 
	
	(svn_wc_entry_t): change `flags' field to `state', to indicate
	meaning not implementation.  
	(SVN_WC_ENTRY_ADDED): replaces SVN_WC_ENTRY_ADD.  
	(SVN_WC_ENTRY_DELETED): replaces SVN_WC_ENTRY_DELETE.  
	(SVN_WC_ENTRY_CONFLICTED): SVN_WC_ENTRY_CONFLICT.  

2000-11-17 20:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.131):

	(svn_wc__entry_merge_sync): outright doc FIX.  

2000-11-17 20:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.130):

	(svn_wc__entry_merge_sync): doc tweaklet.  

2000-11-17 20:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.129):

	(svn_wc__entry_merge_sync): doc tweak.  

2000-11-17 20:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.34), entries.c (1.74),
	get_editor.c (1.149), log.c (1.71), wc.h (1.128):

	Finish clearing all relevant attributes if no conflict: 
	
	(conflict_if_file): remove the reject file attribute if no conflict.  
	Change argument `conflict_type' to `rejfile_type', because more 
	accurate.  
	(svn_wc__entry_merge_sync): variadically take names of attributes to 
	be removed from the entry, terminated by NULL.  All callers changed.  
	(stuff_entry): take a va_list of attributes to remove, remove them.  
	
	Unrelatedly, constificate argv throughout client: 
	
	(svn_cl__cmd_proc_t): add const qualifier to char **.  
	
	(main, parse_command_options, svn_cl__add, svn_cl__checkout, 
	svn_cl__commit, svn_cl__delete, , svn_cl__help, svn_cl__propget, 
	svn_cl__proplist, svn_cl__propset, svn_cl__status, svn_cl__update): 
	adjust for above.  
	
	(svn_cl__add, svn_cl__delete): undo previous casts -- they covered
	up the real `const' needs.  Thanks to Greg Stein for noticing.  

2000-11-17 19:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.56), libsvn_wc/entries.c (1.73),
	libsvn_wc/log.c (1.70), libsvn_wc/wc.h (1.127):

	Set and remove conflict markers in entries, based on update results, 
	and along the way, extend the entry-merging interface: 
	
	* libsvn_wc/log.c (conflict_if_rejfile): finished and renamed 
	conflict_if_file.  All callers changed.  
	(log_do_committed): pass SVN_WC_ENTRY_CLEAR_ALL to 
	svn_wc__entry_merge_sync, to achieve same behavior as old 
	SVN_WC_ENTRY_CLEAR.  
	
	* include/svn_wc.h (SVN_WC_ENTRY_CLEAR_NAMED,
	SVN_WC_ENTRY_CLEAR_ALL): new flags, replacing SVN_WC_ENTRY_CLEAR.  
	
	* libsvn_wc/entries.c (sync_entry): handle both new flags.  
	(svn_wc__entry_merge_sync): document new behavior.  
	
	Unrelatedly, fix some warnings in the client: 
	
	(svn_cl__add, svn_cl__delete): cast argument to svn_cl__help.  

2000-11-17 18:47   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.36):

	um. was that supposed to be hard? Next time, I'll have to get drunk
	first...  make it a real challenge.  

2000-11-17 18:38   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.7), deadprops.c (1.4),
	mod_dav_svn.c (1.12), repos.c (1.14):

	* dav_svn.h: (dav_resource_private, dav_svn_repos) moved here from
	repos.c 
	* repos.c: (dav_resource_private, dav_svn_repos) moved to dav_svn.h 
	    (various) rename 'err' to 'serr' to indicate an SVN error
	              (rather than a DAV err) 
	* deadprops.c: initial implementation 
	* mod_dav_svn.c: oops, fell into the commit. an extra newline is
	all.  

2000-11-17 17:29   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.35):

	"I will give you commands! You will obey them!"  -- Mojo Jojo 

2000-11-17 16:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.34):

	stack stack stack.  

2000-11-17 16:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.59):

	Make the working copy crawler detect and emit local property changes 
	during commit.  
	
	(struct target_baton):  add new fields text_modified_p and 
	prop_modified_p, to examine when applying postfix text-deltas later 
	on.  (Remember, it's now possible to have an "affected target" which 
	has local prop changes, but not local text changes!) 
	
	(process_subdirectory): MAJOR rewrite/reorganization. add section
	that checks for local mods.  Look for property changes too now, on
	both files and dirs.  focus directory recursion at routine's end, no
	longer in the middle too.  remove special (delete && add) section;
	just keep the delete and add section in correct order, and make them 
	non-mutually exclusive.  call do_prop_deltas() if a local mod is 
	found, or if a file being added has props.  
	
	(do_postfix_text_deltas):  rewrite logic.  Send a text delta iff the 
	affected target has text_modified_p set.  
	
	(do_prop_deltas):  new func.  

2000-11-17 16:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.33):

	Save da stack.  

2000-11-17 16:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.126):

	(svn_wc__entry_merge_sync): doc fix.  

2000-11-17 12:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.58):

	(bail_if_unresolved_conflict): Renamed from 
	check_for_unresolved_file_conflict.  Use svn_wc__conflicted_p for 
	check, rather than timestamps.  Should work on dirs as well as files 
	now.  
	
	(process_subdirectory):  change call to above.  

2000-11-17 11:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/props.c (1.20):

	(svn_wc__do_property_merge):  oops, missed one path argument. 
	should be `full_path' when calling svn_wc_prop_path().  

2000-11-17 11:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/props.c (1.19):

	(svn_wc__do_property_merge):  fix braino; use full path when
	computing path to property files.  

2000-11-17 06:17   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.13):

	(dav_svn_walker_context) clean out 'path' and 'locknull_buf' which
	    are not used by our walker.  
	(dav_svn_do_walk) initial implementation 

2000-11-17 05:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.12):

	fix URL in license; should be "http://www.Collab.Net/" 
	
	(dav_svn_walker_context) new structure for walking resource tree 
	(dav_svn_do_walk) [new] internal, recursive function for walking
	    resources.  empty for now.  
	(dav_svn_walk) fill in with walk context initialization and initial 
	    invocation of dav_svn_do_walk() 

2000-11-17 04:04   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/: dbt.c (1.10), dbt.h (1.9), node.c (1.12),
	skel.c (1.9), skel.h (1.7), txn.c (1.10):

	Add 'const' to some static globals to keep them out of the
	per-process data segment. Deal with the resulting const poisoning.  
	
	* dbt.c, dbt.h: (svn_fs__id_to_dbt) add 'const' to the 'id' param 
	    (svn_fs__skel_to_dbt) add 'const' to the 'skel' param 
	
	* node.c: (put_representation_skel) add 'const' to the 'skel' param 
	    (put_node_revision_skel) remove 'static' from the 'rep'
	      declaration so that we get an automatic variable each time (for
	    thread-safety) 
	(make_nodes) add 'const' to 'node_1_1' and 'id_1_1' 
	
	* skel.c: (svn_fs__unparse_skel, estimate_unparsed_size,
	    use_implicit, unparse) add 'const' to the 'skel' param 
	
	* skel.h: (svn_fs__unparse_skel) add 'const' to the 'skel' param 
	
	* txn.c: (begin_txn_body) add 'const' to 'new_txn_skel' and add
	      casts into the initialization elements because skel.children is
	    non-const 
	(put_transaction_skel) add 'const' to the 'txn_skel' param 

2000-11-17 03:12   Greg Stein &lt;gstein@lyra.org&gt;

	* tools/check-license.py (1.1):

	quick tool for checking the licenses in files 

2000-11-17 02:51   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.6), deadprops.c (1.3),
	liveprops.c (1.4), mod_dav_svn.c (1.11), util.c (1.2), version.c
	(1.3):

	$msg 

2000-11-17 02:45   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/: libsvn_delta/deltaparse-test.c (1.57),
	libsvn_delta/svndiff-test.c (1.5), libsvn_delta/vdelta-test.c
	(1.3), libsvn_wc/commit-test.c (1.12):

	add a license header to the test programs 

2000-11-17 02:39   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_fs/delta.c (1.17), libsvn_repos/delta.c
	(1.17), tests/libsvn_fs/skel-test.c (1.7):

	fix name in the license: Collab.Net -&gt; CollabNet 

2000-11-17 02:38   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_delta/delta.h (1.45), libsvn_delta/vdelta.c
	(1.7), libsvn_delta/xml_output.c (1.16), libsvn_delta/xml_parse.c
	(1.133), tests/libsvn_delta/random-test.c (1.11),
	tests/libsvn_delta/xml-output-test.c (1.5):

	fix URL in license. should be: http://www.Collab.Net/ 

2000-11-17 02:35   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_delta/: compose_editors.c (1.5), svndiff.c
	(1.8), text_delta.c (1.20):

	*) fix name in the license: Collab.Net -&gt; CollabNet 
	*) fix post-license comment: "may consist" -&gt; "consists" 

2000-11-17 02:24   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_wc/adm_crawler.c (1.57),
	libsvn_wc/adm_files.c (1.64), libsvn_wc/adm_ops.c (1.33),
	libsvn_wc/entries.c (1.72), libsvn_wc/get_editor.c (1.148),
	libsvn_wc/local_changes.c (1.24), libsvn_wc/lock.c (1.19),
	libsvn_wc/log.c (1.69), libsvn_wc/props.c (1.18),
	libsvn_wc/questions.c (1.39), libsvn_wc/status.c (1.18),
	libsvn_wc/util.c (1.14), libsvn_wc/wc.h (1.125),
	libsvn_subr/base64.c (1.6), libsvn_subr/hashdump.c (1.17),
	libsvn_subr/keysort.c (1.5), libsvn_subr/path.c (1.25),
	libsvn_subr/svn_string.c (1.6), libsvn_subr/xml.c (1.33),
	tests/libsvn_wc/checkout-test.c (1.34),
	tests/libsvn_subr/hashdump-test.c (1.14),
	tests/libsvn_subr/stringtest.c (1.4):

	fix URL in license. should be: http://www.Collab.Net/ 

2000-11-17 02:10   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/: io.c (1.17), svn_error.c (1.46):

	*) fix URL in license. should be: http://www.Collab.Net/ 
	*) fix post-license text: "may consist" -&gt; "consists" 
	   [ Ahem. also remove the marine fronds' contributions. :-) ] 

2000-11-16 17:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.32):

	Glub glub, updated stack.  

2000-11-16 17:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: tests/svn_test_editor.c (1.11), libsvn_client/add.c
	(1.4), libsvn_client/apply_edits.c (1.6), libsvn_client/checkout.c
	(1.11), libsvn_client/client.h (1.5), libsvn_client/commit.c
	(1.12), libsvn_client/delete.c (1.4), libsvn_client/status.c (1.6),
	libsvn_client/update.c (1.8), libsvn_ra_dav/commit.c (1.14),
	libsvn_ra_dav/fetch.c (1.23), libsvn_ra_dav/ra_session.h (1.3),
	libsvn_ra_dav/session.c (1.9):

	fix URL in license. should be: http://www.Collab.Net/ 

2000-11-16 16:56   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/svn_tests_main.c (1.12):

	*) fix URL in license. should be: http://www.Collab.Net/ 
	*) fix company name: should be CollabNet 

2000-11-16 16:51   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/: svn_base64.h (1.3), svn_client.h (1.12),
	svn_delta.h (1.125), svn_error.h (1.58), svn_hash.h (1.11),
	svn_io.h (1.19), svn_path.h (1.21), svn_ra.h (1.11), svn_string.h
	(1.40), svn_test.h (1.5), svn_types.h (1.49), svn_wc.h (1.55),
	svn_xml.h (1.25):

	*) fix URL: "http://www.Collab.Net" -&gt; "http://www.Collab.Net/" 
	*) fix post-license comment: "may consist" -&gt; "consists" 

2000-11-16 16:42   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_fs/convert-size.c (1.7),
	libsvn_fs/convert-size.h (1.4), libsvn_fs/dbt.c (1.9),
	libsvn_fs/dbt.h (1.8), libsvn_fs/dir.c (1.11), libsvn_fs/dir.h
	(1.3), libsvn_fs/err.c (1.11), libsvn_fs/err.h (1.8),
	libsvn_fs/file.c (1.5), libsvn_fs/file.h (1.3), libsvn_fs/fs.c
	(1.21), libsvn_fs/fs.h (1.11), libsvn_fs/id.c (1.10),
	libsvn_fs/id.h (1.6), libsvn_fs/node.c (1.11), libsvn_fs/node.h
	(1.6), libsvn_fs/revision.c (1.3), libsvn_fs/revision.h (1.2),
	libsvn_fs/skel.c (1.8), libsvn_fs/skel.h (1.6), libsvn_fs/txn.c
	(1.9), libsvn_fs/txn.h (1.3), include/svn_fs.h (1.27):

	fix the company name in the license: Collab.Net -&gt; CollabNet 

2000-11-16 16:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: log.c (1.68), wc.h (1.124):

	Start of changes to detect conflicts after updates and mark entries 
	appropriately: 
	
	(SVN_WC__LOG_ATTR_SAVED_MODS): removed, obsolete.  
	(SVN_WC__LOG_UPDATED, SVN_WC__LOG_ATTR_TEXT_REJFILE, 
	SVN_WC__LOG_ATTR_PROP_REJFILE): new #defines for new log action and 
	its attributes.  
	(log_do_updated): new func, implement above new action.  
	(conflict_if_file): new helper func, skeletal.  
	
	Unrelatedly, reduce error-handling acreage, by returning errors from 
	helper functions directly and handling them in an xml-friendly way
	in one place: 
	
	(log_do_run_cmd, log_do_modify_entry, log_do_delete_entry, 
	log_do_updated, log_do_committed, log_do_rm, log_do_file_xfer):
	return errors directly, instead of calling signal_error.  
	
	(start_handler): check for error, call signal error if get one.  

2000-11-16 16:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.38):

	(svn_wc_props_modified_p):  fixed buglet.  If the prop file exists, 
	but not the pristine version, there's been a local mod.  :) 

2000-11-16 12:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.147), wc.h (1.123):

	(SVN_WC__DIFF_EXT): new #define.  
	(close_file): add a log entry to remove the diff file after `patch'
	is done with it.  Use new #define above.  

2000-11-16 12:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.67):

	Code cleanup: turn log.c's start_handler(), which formerly did 
	everything inline, into a simple dispatch function: 
	
	(log_do_run_cmd, log_do_modify_entry, log_do_delete_entry, 
	log_do_committed log_do_rm log_do_file_xfer): new helper funcs, made 
	from code that used to be in start_handler.  Error checks changed 
	appropriately.  
	
	(start_handler): just hand off to above.  

2000-11-16 11:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.31):

	removed two items 

2000-11-16 11:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.63):

	(prop_path_internal): new func, factorizes common code.  
	(svn_wc__prop_path, svn_wc__prop_base_path): rewrite to use above.  

2000-11-16 10:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/props.c (1.17):

	
	(svn_wc__do_property_merge): simplify code by using
	svn_wc__prop_path wherever possible.  This removes some ugly
	internal code forks.  (thank you, Karl!) 

2000-11-16 10:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.37):

	Our hashdump format makes no guarantee on the order of pairs in a 
	file.  A byte-for-byte comparison might conclude that two property 
	files are different, when in fact they contain the *exact* same set
	of pairs.  Fix this: 
	
	(svn_wc_props_modified_p):  use svn_wc__get_local_propchanges
	instead of contents_identical_p.  

2000-11-15 22:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/status.c (1.17):

	The ability to print double status codes.  
	
	* libsvn_wc/status.c (assemble_status): mark *both* status flags in 
	  status_t structure by examining conflicts & local mods on both 
	  textual and property components.  
	
	* client/status.c (generate_status_codes):  new func, generates
	  either 1 or 2 character status code.  
	
	  (svn_cl__print_status):  call generate_status_codes().  

2000-11-15 14:19   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.25):

	Stupid Makefile will run aclocal (again) if we don't update the
	timestamp.  Go ahead and create the aclocal.m4 every time.  

2000-11-15 01:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.146):

	(close_file): signal end of option processing for patch program.  

2000-11-15 01:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_subr/.cvsignore (1.5,
	post-edit-baton-removal, pre-edit-baton-removal):

	Ignore ignorables.  

2000-11-15 01:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.30):

	Added two items.  

2000-11-15 00:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.145):

	(close_file): removed unused `--quiet' argument to patch.  It's 
	irrelevant now that we drive patch via apr's subprocess api.  

2000-11-15 00:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.17):

	The shepherds knew not whither she was gone.  

2000-11-14 20:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.54), libsvn_wc/README (1.60,
	post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_wc/questions.c (1.36), libsvn_wc/status.c (1.16),
	libsvn_wc/wc.h (1.122):

	(Explanation added to libsvn_wc/README:) 
	
	A Subversion working copy keeps track of *two* forks per file, much 
	like the way MacOS files have "data" forks and "resource" forks. 
	Each file under revision control has its "text" and "properties"
	tracked with different timestamps and different conflict (reject)
	files.  In this vein, each file's status-line has two columns which
	describe the file's state.  
	
	Examples: 
	
	  --  glub.c      --&gt; glub.c is completely up-to-date.  
	  U-  foo.c       --&gt; foo.c's textual component was updated.  
	  -M  bar.c       --&gt; bar.c's properties have been locally modified 
	  UC  baz.c       --&gt; baz.c has had both components patched, but a 
	                      local property change is creating a conflict.  
	
	(In reality, this will only be the command-line client's "verbose" 
	mode.  Normal operation will show only one status column, not two.) 
	
	This commit expands our svn_wc_status_t structure and pushes our 
	status reporting toward the description above.  Not yet completed!! 
	a 
	* README:  new text above.  
	
	* svn_wc.h (svn_wc_status_t):  `flag' is now `text_status'.  added
	  an identical `prop_status'.  
	
	* questions.c (svn_wc__conflicted_p):  now returns two answers: 
	  whether the textual component remains conflicted, and whether the 
	  property component remains conflicted.  
	
	* wc.h (svn_wc__conflicted_p):  change declaration.  
	
	* status.c (svn_cl__print_status):  use new status structure
	correctly.  

2000-11-14 19:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.29):

	commit, commit, ba-da-da-da-da-da dum.  

2000-11-14 19:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.144):

	(close_file): doc fix.  Or doc break, depending on how you look at
	it.  

2000-11-14 19:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.62), get_editor.c (1.143),
	log.c (1.66), wc.h (1.121):

	Unrevert previously reverted change, and then some, as expected, to 
	implement file patching using the generic SVN_WC__LOG_RUN_CMD and 
	relative paths: 
	
	(close_file): relativize paths w.r.t. current working dir.  Write
	out log item for patch using SVN_CLIENT_PATCH and the new, generic 
	command-running interface.  
	
	(start_handler): implement SVN_WC__LOG_RUN_CMD using the APR-hip 
	run_cmd_under_directory, instead of C `system' and redirection.  
	
	Unrelatedly, fix some compile warnings: 
	
	(svn_wc__open_adm_file, svn_wc__close_adm_file): take const args, to 
	pacify callers, but cast them because -- due to evil trickery -- we
	do actually muck with them temporarily.  

2000-11-14 15:09   Jim Blandy &lt;jimb@redhat.com&gt;

	* IDEAS (1.15):

	Change section title to something more informative.  

2000-11-14 15:08   Jim Blandy &lt;jimb@redhat.com&gt;

	* IDEAS (1.14):

	Add blurb about random access to delta-encoded files.  

2000-11-13 22:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.61), get_editor.c (1.142),
	log.c (1.65), wc.h (1.120):

	Revert previous change as promised, so "make check" works again.  

2000-11-13 22:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.60), get_editor.c (1.141),
	log.c (1.64), wc.h (1.119):

	(svn_wc__open_adm_file, svn_wc__close_adm_file): take const args, to 
	pacify callers, but cast them because -- due to evil trickery -- we
	do actually muck with them temporarily.  
	
	(close_file): implement patch using 
	
	(start_handler): implement SVN_WC__LOG_RUN_CMD using 
	run_cmd_under_directory and the APR way.  
	
	Will revert this change immediately, as it breaks make check.  I
	just wanted to get the stuff into the repository before going home. 
	You never know when the building might collapse.  

2000-11-13 21:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: questions.c (1.35), wc.h (1.118):

	(svn_wc__conflicted_p) new func that decides if an entry is (still)
	in a state  of conflict 

2000-11-13 21:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_io.h (1.18):

	(svn_io_check_path): doc fix.  

2000-11-13 21:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.53), libsvn_wc/entries.c (1.71):

	
	* svn_wc.h (svn_wc_prop_list, svn_wc_prop_set):  oops, forgot to 
	  include these on previous commit.  
	
	* entries.c (handle_start_tag):  look for `conflict' attribute in 
	  entries file.  
	
	* status.c, proplist-cmd.c:  fix braino and use new func name.  

2000-11-13 21:08   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.59), get_editor.c (1.140),
	log.c (1.63), props.c (1.16), questions.c (1.34), wc.h (1.117):

	Get directory properties to correctly update and merge.  
	
	If directory props conflict during merge, a .prej file is created
	*in* the directory, not next to it.  
	
	Also:  minor renaming of property functions.  
	
	* svn_wc.h (svn_wc_prop_list):  renamed from svn_wc_prop_find.  
	
	  (svn_wc_prop_set):  renamed from svn_wc_prop_patch.  
	
	* proplist-cmd.c:  call svn_wc_prop_list, not prop_find.  
	
	* adm_files.c (svn_wc__prop_base_path):  new func based on 
	  svn_wc__prop_path.  TODO:  we should probably factorize these.  
	
	* get_editor.c (close_dir): do &lt;modify-entry&gt; log command correctly 
	  for SVN_WC_ENTRY_THIS_DIR.  
	
	* log.c (start_handler):  use svn_wc__prop_path;  don't check for 
	  svn_node_file before calling svn_io_file_affected_time.  
	
	* props.c (svn_wc__do_property_merge):  split function into two 
	  codepaths, one for (path == svn_node_file) and one for (path == 
	  svn_node_dir).  Fix many small bugs as well.  
	
	  (svn_wc_prop_list): rename from svn_wc_prop_find.  use 
	  svn_wc__prop_path too.  
	
	  (svn_wc_prop_set):  rename from svn_wc_prop_set.  use 
	  svn_wc__prop_path too.  
	
	* questions.c (timestamps_equal_p):  doc fix;  take `path' instead
	  of `filename' as argument;  handle case where path may be a
	directory.  
	
	  (svn_wc_props_modified_p):  use svn_wc__prop_path and 
	  svn_wc__prop_base_path.  
	
	* wc.h (svn_wc__prop_base_path):  declare.  

2000-11-13 18:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/compose_editors.c (1.4):

	(change_dir_prop):  fix cut-and-paste-o.  

2000-11-13 18:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/hashdump.c (1.16):

	(svn_hash_read):  if we get an APR_EOF on the very *first* line
	read, then it's not an error;  it's just a zero-byte file, so we
	return.  

2000-11-13 17:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.139), props.c (1.15), wc.h
	(1.116):

	On the road to making directory properties merge correctly.  
	
	* wc.h:  various doc fixes.  
	
	* props.c (svn_wc__do_property_merge):  rewrite into two code paths, 
	  one for merging file props, and one for merging dir props.  Dir 
	  props still untested.  Remove "kind" field to this function.  
	
	* get_editor.c (close_file, close_dir):  change calls to 
	  svn_wc__do_property_merge.  

2000-11-13 16:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.58), entries.c (1.70),
	get_editor.c (1.138), questions.c (1.33), wc.h (1.115):

	(svn_wc__check_wc): take `is_wc' argument, just set it depending on 
	result, return error only to indicate a condition that prevents an 
	accurate answer.  This makes the interface consistent with other 
	question-asking functions.  All callers changed.  
	
	(svn_wc__prop_path): replaces svn_wc__file_prop_path, tries to 
	intelligently handle dirs, files, and dirs that were files. 
	Untested; have at it, Ben.  

2000-11-13 12:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.28):

	Goodtimes will give you Dutch Elm disease. It will leave the toilet 
	seat up. It will make a batch of Methanphedime in your bathtub and 
	then leave bacon cooking on the stove while it goes out to chase 
	gradeschoolers with your new snowblower.  
	
	It will update your STACK.  

2000-11-13 12:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.52), libsvn_wc/props.c (1.14),
	libsvn_wc/wc.h (1.114):

	Split "reject-file" entry attribute into one for text conflicts, one 
	for property conflicts.  The prop-merging code is now reading and 
	writing only the relevant attribute now.  The text-merging code 
	doesn't yet mark conflicts in the entries file; but when it does, it 
	has its own attribute to use.  
	
	* svn_wc.h (SVN_WC_ENTRY_ATTR_PREJFILE): new `entries' attribute to 
	  distinguish between textual and property reject files.  
	
	* props.c (svn_wc__get_existing_prop_reject_file):  renamed from
	  plain old `get_existing_reject_file'.  
	
	  (svn_wc__do_property_merge):  use PREJFILE and new function name
	  above.  
	
	* wc.h (svn_wc__get_existing_prop_reject_file):  change declaration 
	  too.  

2000-11-13 11:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.51), libsvn_wc/adm_ops.c (1.32),
	libsvn_wc/props.c (1.13):

	
	* svn_wc.h (svn_wc_get_dirent_prop, svn_wc_get_path_prop):  remove 
	  ancient, crufty declarations.  
	
	  (svn_wc_prop_get, svn_wc_prop_patch): new declarations to go with 
	  svn_wc_prop_find().  Oooh, look, our function names are becoming
	  all DAV-ey.  :) 
	
	* adm_ops.c (svn_wc_get_dirent_prop, svn_wc_get_path_prop):  remove 
	  blank definitions.  
	
	* props.c (svn_wc_prop_get, svn_wc_prop_patch):  new funcs.  

2000-11-13 11:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/README (1.59):

	Notes about properties in the working copy.  

2000-11-13 01:13   Branko Cibej &lt;brane@xbc.nu&gt;

	* IDEAS (1.13):

	New item: Interoperate with CVS servers 

2000-11-12 19:46   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_delta/vdelta.c (1.6):

	(svn_txdelta__vdelta): Add some hash statistics, toggled off.  

2000-11-12 19:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.43), subversion/libsvn_wc/get_editor.c (1.137),
	subversion/libsvn_wc/log.c (1.62), subversion/libsvn_wc/wc.h
	(1.113):

	Changes in preparation for driving patch, and all other programs run 
	from the log file, via a single generic interface using APR's
	process creation api: 
	
	* configure.in: find a default patch program path, just like diff.  
	
	* libsvn_wc/get_editor.c (run_cmd_in_directory): new func, inheritor 
	of old run_cmd_under_directory.  Untested.  
	
	* libsvn_wc/wc.h (SVN_WC__LOG_RUN_CMD): document.  
	(SVN_WC__LOG_ATTR_INFILE, SVN_WC__LOG_ATTR_OUTFILE, 
	SVN_WC__LOG_ATTR_ERRFILE, SVN_WC__LOG_ATTR_ARG_1, 
	SVN_WC__LOG_ATTR_ARG_2, SVN_WC__LOG_ATTR_ARG_3, 
	SVN_WC__LOG_ATTR_ARG_4, SVN_WC__LOG_ATTR_ARG_5, 
	SVN_WC__LOG_ATTR_ARG_6, SVN_WC__LOG_ATTR_ARG_7, 
	SVN_WC__LOG_ATTR_ARG_8, SVN_WC__LOG_ATTR_ARG_9): new defines, use
	with the generic command runner.  

2000-11-12 17:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.50), libsvn_wc/props.c (1.12):

	Mechanism for displaying all properties of a working copy node.  
	
	$ ./svn propfind tests/t1/A/mu $ $ ./svn propfind tests/t1/iota 
	ocean : atlantic bat : ball color : blue 
	
	* props.c (svn_wc_prop_find):  new public function.  
	
	* svn_wc.h (svn_wc_prop_find):  declaration thereof.  
	
	* main.c (main):  add new "propfind" command to svn binary.  
	
	* props.c (svn_cl__print_prop_hash):  new file and func.  
	
	* cl.h (svn_cl__print_prop_hash:  declaration thereof.  
	
	* Makefile.am:  compile props.c into `svn'.  

2000-11-12 15:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.124), libsvn_delta/delta.h
	(1.44), libsvn_delta/xml_parse.c (1.132), libsvn_wc/get_editor.c
	(1.136), libsvn_wc/props.c (1.11), libsvn_wc/wc.h (1.112):

	Moving datastructures around.  
	
	* svn_delta.h (svn_propdelta_t):  move back into private world of 
	  libsvn_delta 
	
	  (svn_prop_t):  generic property structure for the public 
	
	* delta.h (svn_delta__propdelta_t, svn_xml_digger_t): rename of 
	  svn_propdelta_t to svn_delta__propdelta_t 
	
	* xml_parse.c (do_begin_propdelta):  do rename as above 
	
	* props.c, get_editor.c:  do rename as above 
	
	* get_editor.c (change_file_prop, change_dir_prop):  don't fill out 
	  pointless fields in the prop structure anymore.  They're gone.  

2000-11-12 15:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile.am (1.24), get_editor.c (1.135):

	Put -I../.. into include path, and #include "config.h".  
	
	(close_file): use SVN_CLIENT_DIFF, instead of a hardcoded diff path.  
	
	Note: I don't see any reason to conditionalize the include, as in 
	
	   #ifdef HAVE_CONFIG_H 
	   #include "config.h" 
	   #endif /* HAVE_CONFIG_H */ 
	
	because we can't build without config.h, right?  However, a lot of 
	examples and tradition seem to indicate that such a conditional is 
	expected.  I don't know why.  If you do, please say so. :-) 

2000-11-12 13:34   Joe Orton &lt;joe@light.plus.com&gt;

	* configure.in (1.42):

	* configure.in: Make the search for a diff program work, using 
	AC_DEFINE_UNQUOTED.  

2000-11-12 12:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.41):

	Tweak unsuccessful attempt to get SVN_CLIENT_DIFF set in config.h,
	so other readers have a better sense of what I was actually trying.  

2000-11-12 12:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.40):

	Unsuccessful attempt to get SVN_CLIENT_DIFF set in config.h.  

2000-11-12 12:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: props.c (1.10), wc.h (1.111):

	
	* props.c (svn_wc__do_property_merge):  bugfix, stop creating .prej 
	  files in CWD.  Guarantee logfile only mentions "relative" paths.  
	
	* wc.h (svn_wc__do_property_merge):  docfix.  

2000-11-12 11:34   Bruce Korb &lt;bkorb@cruzio.com&gt;

	* doc/: client.texi (1.33), model.texi (1.10, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), server.texi
	(1.37, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	provide: itemize mark 

2000-11-12 11:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.134):

	(close_file): formatting fix.  

2000-11-12 11:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.133):

	(close_file): drive diff the APR way, instead of via C system() and 
	redirection.  

2000-11-12 11:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/props.c (1.9):

	(svn_wc__conflicting_propchanges_p):  better english descriptions of 
	property conflicts.  

2000-11-10 20:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.27), subversion/libsvn_wc/status.c (1.15):

	(svn_wc_statuses): use known length, not APR_HASH_KEY_STRING.  

2000-11-10 20:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/status.c (1.14):

	(svn_wc_statuses): recurse on dirs only, never files, so we never
	have to read an entries file twice.  

2000-11-10 19:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.26), subversion/include/svn_io.h (1.17),
	subversion/libsvn_subr/io.c (1.16),
	subversion/libsvn_wc/adm_crawler.c (1.56),
	subversion/libsvn_wc/get_editor.c (1.132),
	subversion/libsvn_wc/local_changes.c (1.23),
	subversion/libsvn_wc/log.c (1.61), subversion/libsvn_wc/questions.c
	(1.32), subversion/libsvn_wc/wc.h (1.110):

	Random cleanups: 
	
	* include/svn_io.c, libsvn_subr/io.c, libsvn_wc/questions.c 
	(svn_io_file_affected_time): now a public function in svn_io, was 
	svn_wc__file_affected_time.  All callers changed.  
	
	* libsvn_wc/get_editor.c (close_file): renamed variable to avoid 
	confusion.  
	
	* STACK: popped.  

2000-11-10 19:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.131):

	(close_file): try to drive diff the APR way.  Not yet successful, so 
	the new code is toggled out, and the old code is toggled in, for
	now.  

2000-11-10 16:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.25):

	The Square Root of 2 is Irrational:  Proof by Poem 
	
	Double a square is never a square, 
	  and here is the reason why: If m-squared were equal to two
	  n-squared, then to their prime factors we'd fly.  But the
	  decomposition that lies on the left had all of its exponents even, 
	But the power of two on the right must be odd, 
	  so one of the twos is "bereaven"! 

2000-11-10 16:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.130), questions.c (1.31):

	(svn_wc_props_modified_p):  fill out this routine.  
	
	(close_file):  use svn_wc_props_modified_p() correctly.  

2000-11-10 15:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.57), get_editor.c (1.129),
	props.c (1.8), wc.h (1.109):

	(thing_path): new helper func.  
	(svn_wc__text_base_path): reimplement using above.  
	(svn_wc__prop_path): new func.  
	(svn_wc__do_property_merge): doc fix.  
	(SVN_WC__TEXT_REJ_EXT, SVN_WC__TEXT_REJ_EXT): new pair of #defines, 
	replacing former SVN_WC__REJ_EXT.  Use everywhere instead of ".rej" 
	and ".prej".  

2000-11-10 15:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/io.c (1.15):

	(svn_io_open_unique_file): fix error message.  

2000-11-10 15:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.49), libsvn_wc/README (1.58),
	libsvn_wc/adm_crawler.c (1.55), libsvn_wc/adm_ops.c (1.31),
	libsvn_wc/entries.c (1.69), libsvn_wc/get_editor.c (1.128),
	libsvn_wc/local_changes.c (1.22), libsvn_wc/log.c (1.60),
	libsvn_wc/questions.c (1.30), libsvn_wc/wc.h (1.108):

	.  
	
	Subversion Timestamps.  Now with Sophistication(tm) Technology. :) 
	
	Track two independent timestamps in the WC "entries" file: one for 
	text, one for properties.  See libsvn_wc/README for details.  
	Obviously, this is a big change that affects many, many things.  
	
	
	* README:  describe text-time and prop-time entry attributes.  
	
	* svn_wc.h (SVN_WC_ENTRY_ATTR_TEXT_TIME,
	  SVN_WC_ENTRY_ATTR_PROP_TIME): define new entry attributes for
	  textual timestamps and property timestamps.  
	
	  (svn_wc_entry_t):  rename `timestamp' field to `text_time', add 
	  `prop_time' field as well.  
	
	* get_editor.c (close_file): write log item to bump revision number, 
	  then write one (or both) log items to bump text_time and/or 
	  prop_time.  Also: only bump a timestamp if the file's text (or 
	  props) is *not* locally modified! 
	
	  (free_dir_baton, add_directory): change calls to 
	  svn_wc__entry_merge_sync() 
	
	* entries.c (handle_start_tag):  fill in both timestamp fields when
	  reading an entry from XML.  
	
	  (sync_entry):  sync both timestamp fields into the attribute hash.  
	
	  (svn_wc__entry_merge_sync):  take both text_time and prop_time as 
	  arguments.  
	
	  (stuff_entry):  same.  
	
	  (svn_wc__entry_dup):  use new text_time and prop_time fields in
	  entry.  
	
	* log.c (start_handler): when executing &lt;modify-entry .../&gt;, check
	  for all three timestamps scenarios for BOTH text_time and prop_time.  
	  Change all calls to svn_wc__entry_merge_sync().  
	
	* questions.c (timestamps_equal_p):  add svn_wc__timestamp_kind
	  input, indicating if you want either text or property timestamps
	compared.  
	
	  (svn_wc_text_modified_p):  change calls to timestamps_equal_p().  
	  Also run svn_io_check_path to see if file exists... if not, return 
	  "unmodified".  
	
	* wc.h:  (svn_wc__entry_merge_sync):  update prototype.  
	
	* adm_ops.c: (svn_wc_delete_file, svn_wc_add_file):  change call to 
	  svn_wc__entry_merge_sync().  
	
	* adm_crawler.c: (check_for_unresolved_file_conflict):  use new 
	  text_time entry field.  This whole function is Wrong anyway, will
	  be fixed soonly.  
	
	* local_changes.c: (svn_wc__file_affected_time):  doc fix.  

2000-11-10 12:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/local_changes.c (1.21):

	(svn_wc__file_affected_time): don't do props, just do the requested 
	file, as before.  This reverts change 1.18--1.19, at Ben's request.  

2000-11-10 12:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.48), libsvn_wc/get_editor.c
	(1.127), libsvn_wc/local_changes.c (1.20), libsvn_wc/wc.h (1.107):

	(svn_wc__get_local_changes, svn_wc__gnudiff_differ, 
	svn_wc__merge_local_changes, svn_wc__gnudiff_patcher, 
	svn_wc_diff_fn_t, svn_wc_patch_fn_t, svn_wc__diff_holder): removed.  
	This turns out not to be how we do merging.  
	
	(close_file): removed cruft.  

2000-11-10 12:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.47), libsvn_wc/adm_crawler.c
	(1.54), libsvn_wc/questions.c (1.29), libsvn_wc/status.c (1.13):

	(svn_wc_props_modified_p): new func, skeleton for Ben to fill in.  
	(svn_wc_text_modified_p): new name for svn_wc_file_modified_p, to
	make room in the namespace for above.  All callers changed.  

2000-11-10 11:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.46), libsvn_wc/adm_crawler.c
	(1.53), libsvn_wc/questions.c (1.28), libsvn_wc/status.c (1.12),
	libsvn_wc/wc.h (1.106):

	* client/trace.c (close_file): rearrange code in preparation for 
	adding sensitivity to merges.  
	
	* client/tests/svn-test.sh: demonstrate merging.  
	
	* include/svn_wc.h, libsvn_wc/questions.c (svn_wc_file_modified_p): 
	new public name for svn_wc__file_modified_p.  All callers changed.  

2000-11-10 05:19   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_delta/vdelta.c (1.5):

	Wall! Just changing the multiplier and factor in the hash function
	speeds up the vdelta encoder. You live and learn.  

2000-11-09 16:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.24):

	One, two! One, two! And through and through 
	  The vorpal blade went snicker-snack! He left it dead, and with its
	  head He went galumphing back.  

2000-11-09 16:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.23):

	"Hey, Pinky, I've got an idea: how about a country where everybody 
	gets to vote, but depending on your province, your vote might not 
	actually count." 
	
	"Sounds great, Brain!  When do we start?  Also, I think when we
	tally the results, we should use computers that are known to come up
	with a different answer every time we run the ballot." 
	
	"You're catching on, Pinky, you're catching on..." 

2000-11-09 16:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.59):

	(start_handler): use svn_path_add_component_nts, as Greg Stein 
	suggested.  

2000-11-09 15:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.20), include/svn_wc.h (1.45),
	libsvn_subr/path.c (1.24), libsvn_wc/entries.c (1.68),
	libsvn_wc/status.c (1.11):

	Obtaining entry and status information: 
	
	(svn_cl__print_statuses): new name for what was
	svn_cl__print_status.  All callers changed.  
	(svn_cl__print_status): new func, prints one status line.  
	(svn_wc_status_t): document meaning of null `entry' field.  
	(assemble_status): handle null entry.  
	(svn_wc_status, svn_wc_entry): completed.  
	
	Unrelated: 
	
	(svn_path_is_empty): replaces svn_path_isempty; this kept biting me.  

2000-11-09 14:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/README (1.57):

	Change definition of `timestamp'.  

2000-11-09 12:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.126), local_changes.c
	(1.19), log.c (1.58), questions.c (1.27), wc.h (1.105):

	.  Make file_affected_time() examine property-file timestamp, too.  
	
	Plus, unrelated rename of constant.  
	
	* wc.h (SVN_WC__LOG_ATTR_TIMESTAMP_WC): rename to
	SVN_WC_TIMESTAMP_WC 
	
	* get_editor.c (close_file):  rename to SVN_WC_TIMESTAMP_WC 
	
	* log.c (start_handler):  rename to SVN_WC_TIMESTAMP_WC 
	
	* questions.c (svn_wc__file_modified_p):  doc fix 
	
	* local_changes.c (svn_wc__file_affected_time):  now returns latest 
	  timestamp from file or its *property* file, if one exists.  

2000-11-09 11:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/README (1.56):

	Replace `version' with `revision'.  
	
	Explain that timestamp and revision bumping are inseparable.  

2000-11-09 10:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.125):

	(close_file): use "-c" instead of "-u" for diff, "-r" instead of 
	"--reject-file" for patch, because more widely compatible. 
	Suggested by Daniel Stenberg &lt;daniel@haxx.se&gt;.  

2000-11-09 09:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/xml/up3.xml (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	Add another prop-conflict test file 

2000-11-09 09:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.124), log.c (1.57), wc.h
	(1.104):

	Fixed broken timestamp interface and execution.  
	
	First of all, an entry should *always* receive a timestamp whenever
	it receives a revision-stamp.  They are inseparable concepts; the 
	timestamp represents the last time the file was known to be updated
	by a repository.  
	
	Second, the log entry "&lt;modify-entry ...&gt;" should do *exactly* as
	its told, and not try to be smarter than its caller unless
	explicitly asked.  Therefore the timestamp attribute has three
	potential values: 
	
	  1. &lt;modify-entry timestamp="8378128827" revision="6"/&gt; 
	
	      Use the timestamp directly, as an apr_time_t.  
	
	  2. &lt;modify-entry conflict="true" reject-file="foo.c.342.34.prej"/&gt; 
	
	      No mention of timestamp, so don't modify it.  
	
	  3. &lt;modify-entry timestamp="working" revision="6"/&gt; 
	
	      Be smart.  Get the timestamp from the working version of the 
	      file.  
	
	All files now have timestamps.  They get them when they're checked
	out or updated.  (finally!) 
	
	* wc.h (SVN_WC__LOG_ATTR_TIMESTAMP_WC): new `smart' value of the 
	  timestamp field in &lt;modify-entry&gt; 
	
	  (svn_wc__entry_merge_sync):  small doc fix 
	
	* log.c (start_handler): new implementation of timestamp handling,
	  as described above.  
	
	* get_editor.c (close_file):  use `smart' value for timestamp when 
	  writing log entry to bump the revision number.  

2000-11-09 07:08   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.22):

	sleep calls. then yesterday's taped Dragonball Z. then today's. oh,
	   and the Blue Submarine mini-series, of course. (why are you still
	reading this?) 

2000-11-08 13:00   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/xml/: co1-inline.xml (1.4), co1-postfix.xml
	(1.4) (utags: milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal):

	Fix encoded svndiffs (they were encoded using a faulty base64
	table).  

2000-11-08 11:53   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_wc/questions.c (1.26):

	(timestamps_equal_p): Handle the case where the entry for the 
	requested file does not exist.  (By returning false, just as when
	the entry exists but the timestamp does not.) 

2000-11-08 10:50   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.16):

	Added a note about checking APR status codes.  

2000-11-08 04:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.11):

	checkpoint some continued development.  

2000-11-08 01:33   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/base64.c (1.5):

	(base64tab): I seem not to have learned my ABCs well enough in
	school.  I had two characters missing in the capital alphabet, and
	was thus two characters short overall.  

2000-11-08 00:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.21):

	Depending on the results of tonight's election, I may be forced to
	use "cvs admin" to remove one revision from U.S. history.  

2000-11-07 23:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.56):

	(start_handler):  call apr_remove_file with correct full path.  

2000-11-07 23:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.123):

	(close_file): pass --quiet option to patch program, but #ifdef'd out 
	for now because it's still useful to watch patch run.  

2000-11-07 23:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.55):

	(start_handler): pass received attribute hash to 
	svn_wc__entry_merge_sync.  

2000-11-07 23:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.67), wc.h (1.103):

	In preparation for fixing the bug Ben reported, about adding generic 
	attributes to log items / entries: 
	
	(svn_wc__entry_merge_sync): take an attribute hash instead of 
	varargs.  All callers changed.  
	(stuff_entry): replaces stuff_entry, takes an attribute hash instead 
	of va_list now.  
	(svn_wc__entry_add): removed, unused.  

2000-11-07 23:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: log.c (1.54), props.c (1.7), wc.h (1.102):

	
	* wc.h (SVN_WC__LOG_RM):  new log command 
	
	* log.c (start_handler):  SVN_WC__LOG_RM just calls
	  apr_remove_file(), nothing more.  This is different than
	  SVN_WC__LOG_DELETE_ENTRY, which calls
	remove_from_revision_control().  
	
	* props.c (svn_wc__do_property_merge):  use new SVN_WC__LOG_RM 

2000-11-07 23:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.66):

	(sync_entry): handle merge and conflict flags.  

2000-11-07 23:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.44), libsvn_wc/entries.c (1.65),
	libsvn_wc/status.c (1.10):

	(assemble_status): new helper func.  
	(add_status_structure): use it.  
	(svn_wc_status): new func, incomplete.  
	(svn_wc_entry): new func, incomplete.  

2000-11-07 23:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.20):

	Bugs for Ben n' Karl regarding merging/conflicts 

2000-11-07 22:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.43), libsvn_client/status.c
	(1.5), libsvn_wc/status.c (1.9):

	(svn_wc_statuses): replaces svn_wc_get_status, in preparation for 
	addition of new func svn_wc_status.  All callers changed.  And I
	don't want to hear it about the plural -- this is English, not 
	Latin.  

2000-11-07 21:59   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.26), libsvn_fs/convert-size.c
	(1.6), libsvn_fs/convert-size.h (1.3), libsvn_fs/dir.c (1.10),
	libsvn_fs/id.c (1.9), libsvn_fs/id.h (1.5), libsvn_fs/skel.c (1.7),
	libsvn_fs/skel.h (1.5), libsvn_fs/txn.c (1.8):

	*) turn some "char *" into "const char *" and deal with the
	   resulting const poisoning :-) 
	*) add "const" to a lot of the svn_fs_id_* functions 
	
	[ it would be a Good Thing to constify the internal skel handling at
	  some future time, but I skipped it here... I was mostly concerned
	  with the svn_fs_id interfaces and svn_fs_parse_id's use of a char* ] 

2000-11-07 21:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.42):

	(svn_wc_entry_t): doc fix.  

2000-11-07 21:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.41):

	(svn_wc_entry_t): doc fix.  

2000-11-07 21:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.40), libsvn_client/status.c
	(1.4), libsvn_wc/adm_crawler.c (1.52), libsvn_wc/adm_ops.c (1.30),
	libsvn_wc/entries.c (1.64), libsvn_wc/get_editor.c (1.122),
	libsvn_wc/log.c (1.53), libsvn_wc/props.c (1.6),
	libsvn_wc/questions.c (1.25), libsvn_wc/status.c (1.8),
	libsvn_wc/wc.h (1.101):

	Make the entries interface public and partially unify with status 
	information, the first stage of some code unification: 
	
	(svn_wc_entry_t): replaces svn_wc__entry_t, moved from wc.h to 
	svn_wc.h, and: 
	
	   SVN_WC_ENTRY_ATTR_NAME       replaces  SVN_WC__ENTRIES_ATTR_NAME 
	   SVN_WC_ENTRY_ATTR_REVISION   replaces 
	   SVN_WC__ENTRIES_ATTR_REVISION SVN_WC_ENTRY_ATTR_KIND      
	   replaces  SVN_WC__ENTRIES_ATTR_KIND SVN_WC_ENTRY_ATTR_TIMESTAMP 
	   replaces  SVN_WC__ENTRIES_ATTR_TIMESTAMP SVN_WC_ENTRY_ATTR_CHECKSUM 
	   replaces  SVN_WC__ENTRIES_ATTR_CHECKSUM SVN_WC_ENTRY_ATTR_ADD       
	   replaces  SVN_WC__ENTRIES_ATTR_ADD SVN_WC_ENTRY_ATTR_DELETE    
	   replaces  SVN_WC__ENTRIES_ATTR_DELETE SVN_WC_ENTRY_ATTR_MERGED    
	   replaces  SVN_WC__ENTRIES_ATTR_MERGED SVN_WC_ENTRY_ATTR_CONFLICT  
	   replaces  SVN_WC__ENTRIES_ATTR_CONFLICT SVN_WC_ENTRY_ATTR_ANCESTOR  
	   replaces  SVN_WC__ENTRIES_ATTR_ANCESTOR SVN_WC_ENTRY_ATTR_REJFILE   
	replaces  SVN_WC__ENTRIES_ATTR_REJFILE 
	
	   SVN_WC_ENTRY_CLEAR           replaces  SVN_WC__ENTRY_CLEAR 
	   SVN_WC_ENTRY_ADD             replaces  SVN_WC__ENTRY_ADD 
	   SVN_WC_ENTRY_DELETE          replaces  SVN_WC__ENTRY_DELETE 
	   SVN_WC_ENTRY_MERGED          replaces  SVN_WC__ENTRY_MERGED 
	   SVN_WC_ENTRY_CONFLICT        replaces  SVN_WC__ENTRY_CONFLICT 
	
	   SVN_WC_ENTRY_THIS_DIR        replaces  SVN_WC__ENTRIES_THIS_DIR 
	
	(svn_wc_status_t): new field `entry'.  Lose `local_ver' field, it's
	part of the entry now.  Doc changes.  
	
	Unrelatedly, implement an append action for wc adm logs: 
	(svn_wc__xfer_action): new enum.  
	(file_xfer_under_path): replaces cp_or_mv_under_directory.  
	(start_handler): use above to implement appending, copying, and 
	renaming.  
	
	Even more unrelatedly: 
	(svn_wc__get_existing_reject_file): add `const' qualifier.  

2000-11-07 20:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_subr/io.c (1.14), libsvn_wc/props.c (1.5):

	
	* props.c (svn_wc__do_property_merge):  convert absolute path to 
	  relative path for use in log commands 
	
	* io.c (svn_io_open_unique_file): don't dereference a NULL value. :) 

2000-11-07 20:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.24), libsvn_subr/io.c (1.13),
	libsvn_subr/xml.c (1.32), libsvn_wc/log.c (1.52):

	Use `apr_size_t' instead of the now-obsolete `apr_ssize_t'.  

2000-11-07 19:46   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_wc/get_editor.c (1.121):

	* libsvn_wc/get_editor (close_file): Remove a bit that got left in 
	by mistake after merging Karl's changes.  

2000-11-07 19:30   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_client/apply_edits.c (1.5), libsvn_subr/io.c
	(1.12), tests/libsvn_delta/deltaparse-test.c (1.56),
	tests/libsvn_delta/random-test.c (1.10), libsvn_wc/adm_files.c
	(1.56), libsvn_wc/entries.c (1.63), libsvn_wc/get_editor.c (1.120),
	libsvn_wc/lock.c (1.18), libsvn_wc/log.c (1.51),
	libsvn_wc/questions.c (1.24), libsvn_wc/util.c (1.13),
	tests/libsvn_wc/checkout-test.c (1.33):

	This is the main batch of changes for Win32.  
	
		* all: Change all tests of APR status codes to use the 
		APR_STATUS_IS...() macros.  
	
		* libavn_subr/io.c (apr_transfer_file_contents): Bug fix: 
		initialize `read_err' before first use.  
	
		* libsvn_wc/adm_files.c (check_adm_exists): Check for directory 
		with `svn_io_check_path' instead of `apr_opendir'. Add assertions 
		for extra error checking.  
		* libsvn_wc/util.c (svn_wc__ensure_directory): Likewise.  

2000-11-07 18:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.123), include/svn_error.h
	(1.57), include/svn_hash.h (1.10), include/svn_wc.h (1.39),
	libsvn_delta/xml_parse.c (1.131), libsvn_subr/hashdump.c (1.15),
	libsvn_subr/keysort.c (1.4), libsvn_subr/path.c (1.23),
	libsvn_subr/svn_error.c (1.45), libsvn_subr/xml.c (1.31),
	libsvn_wc/adm_crawler.c (1.51), libsvn_wc/status.c (1.7):

	Make sure public functions are documented in their header files and 
	never in their source files (in many cases, the two had diverged).  

2000-11-07 18:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/xml/up2.xml (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	A property patch update against co1.xml 

2000-11-07 18:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/props.c (1.4):

	(svn_wc__append_prop_conflict):  drop the prefix, this is a static
	func.  

2000-11-07 18:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: props.c (1.3), wc.h (1.100):

	Finish property merging and conflict detection.  Still untested; 
	but it compiles and doesn't break `make check`. :) 
	
	* props.c (svn_wc__conflicting_propcahnges_p):  new definition,
	  return an english description of the property conflict.  
	
	  (svn_wc__append_prop_conflict): new func 
	
	  (svn_wc__get_existing_reject_file):  new func 
	
	  (svn_wc__do_property_merge):  lots of new code to record conflicts 
	  and merging.  
	
	
	* wc.h (SVN_WC__LOG_APPEND):  new log command;  needs to be 
	  implemented in log.c still.  
	
	  (SVN_WC__ENTRIES_ATTR_REJFILE):  new entry attribute, points to the 
	  .rej or .prej file that keeps a file "in conflict" 
	
	  (svn_wc__conflicting_propchanges_p):  new declaration 
	
	  (svn_wc__get_existing_reject_file):  new declaration 

2000-11-07 17:56   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_fs.h (1.25), libsvn_fs/dbt.c (1.8),
	libsvn_fs/dbt.h (1.7), libsvn_fs/dir.c (1.9), libsvn_fs/file.c
	(1.4), libsvn_fs/id.c (1.8), libsvn_fs/id.h (1.4), libsvn_fs/node.c
	(1.10), libsvn_fs/revision.c (1.2), libsvn_fs/txn.c (1.7):

	* include/svn_fs.h: (svn_fs_parse_id, svn_fs_unparse_id) New funcs,
	    renamed from svn_fs__parse_id and svn_fs__unparse_id (from
	libsvn_fs/id.h).  
	
	* libsvn_fs/id.h: (svn_fs__parse_id, svn_fs__unparse_id) Renamed to 
	    svn_fs_parse_id and svn_fs_unparse_id and moved to
	    include/svn_fs.h.  Trim the headers back to just what is needed.  
	
	* libsvn_fs/dbt.h: remove id.h include (superfluous); use angle
	    brackets for the "system" header apr_pools.h. Add svn_fs.h for the
	svn_fs_id_t type.  
	
	* libsvn_fs/dbt.c, dir.c, file.c, node.c, revision.c, txn.c: update
	    for the renamed svn_fs_parse_id, svn_fs_unparse_id.  
	    Trim the headers: remove unneeded id.h 
	
	* libsvn_fs/id.c: rename to svn_fs_parse_id and svn_fs_unparse_id 
	    (svn_fs_parse_id): simplify memory allocation logic 

2000-11-07 17:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.119), log.c (1.50):

	Preserve local mods by patching: 
	
	* libsvn_client/tests/svn-test.sh: make more changes in the updated 
	tree t2, commit them.  
	
	* libsvn_wc/get_editor.c (close_file): if working file present,
	update by patching.  
	
	* libsvn_wc/log.c (start_handler): implement SVN_WC__LOG_RUN_CMD.  
	(run_cmd_under_directory): removed, unnecessary right now.  
	
	Note: this change breaks "make check", because the final update in 
	client/tests/t2 fails, apparently due to some ascii nulls in the XML 
	file resulting from the second commit (run "make check" in 
	subversion/client/, then look at
	subversion/client/tests/commit-2.xml, line 51).  
	
	Am committing anyway for the sake of reproduction, but will commit 
	another change immediately to restore "make check"'s success.  

2000-11-07 17:28   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.19):

	watching Blue Submarine No. 6 ...  

2000-11-07 17:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_io.h (1.16):

	(svn_io_open_unique_file): doc fix.  

2000-11-07 16:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.118):

	(close_file): mask out irrelevant bits of return code.  

2000-11-07 15:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_io.h (1.15), libsvn_subr/io.c (1.11):

	(apr_transfer_file_contents): new helper func, holding common code.  
	(apr_copy_file): implement using above.  
	(apr_append_file): new func, same.  
	(svn_io_append_file): new func.  

2000-11-07 15:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_io.h (1.14), libsvn_subr/io.c (1.10),
	libsvn_wc/adm_crawler.c (1.50), libsvn_wc/adm_files.c (1.55),
	libsvn_wc/local_changes.c (1.18), libsvn_wc/log.c (1.49),
	libsvn_wc/wc.h (1.99):

	(apr_copy): lives in io.c for now.  
	(svn_io_copy_file): replaces svn_wc__copy_file, lives in io.c now.  
	All callers changed.  

2000-11-07 00:32   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/Makefile.am (1.8):

	*) hack the LIBADD line until we get libtool 1.4 
	*) add the right commands for the APXS install type 

2000-11-07 00:29   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/static/config.m4 (1.3, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	Explicitly default dav_svn to "no". This also guarantees that the
	variable is set before we check it on the next line.  

2000-11-07 00:27   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/mod_dav_svn.c (1.10):

	fix the header_parser prototype (it needs to return an HTTP status) 

2000-11-07 00:26   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_subr/svn_error.c (1.44),
	tests/libsvn_wc/checkout-test.c (1.32):

	don't use apr_canonical_error() -- its continued existence is
	questionable 

2000-11-07 00:23   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/svn-apache.m4 (1.8):

	*) fix the set of include directories 
	*) don't pick up CFLAGS from apxs; Apache and SVN both use libtool
	   for compilations, so the basic flags should be the same already;
	   this also keeps a lot of duplicate flags and other crap out of
	CFLAGS 

2000-11-06 19:58   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_subr/.cvsignore (1.4, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	tests/libsvn_delta/.cvsignore (1.9, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	tests/libsvn_fs/.cvsignore (1.3), tests/libsvn_subr/.cvsignore
	(1.4), tests/libsvn_wc/.cvsignore (1.6, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	Ignore Debug and Release subfdirs created by MSVC. Clean up
	.cvsignore in libsvn_subr(/tests).  

2000-11-06 19:51   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsw (1.4), subversion/libsvn_client/libsvn_client.dsp
	(1.2), subversion/libsvn_delta/libsvn_delta.dsp (1.2),
	subversion/libsvn_fs/libsvn_fs.dsp (1.3),
	subversion/tests/libsvn_delta/deltaparse_test.dsp (1.1),
	subversion/tests/libsvn_delta/random_test.dsp (1.1),
	subversion/tests/libsvn_delta/svndiff_test.dsp (1.1),
	subversion/tests/libsvn_delta/vdelta_test.dsp (1.1),
	subversion/tests/libsvn_delta/xml_output_test.dsp (1.1),
	subversion/tests/libsvn_fs/skel_test.dsp (1.1),
	subversion/libsvn_subr/libsvn_subr.dsp (1.2),
	subversion/libsvn_wc/libsvn_wc.dsp (1.2),
	subversion/tests/libsvn_subr/hashdump_test.dsp (1.1),
	subversion/tests/libsvn_subr/sting_test.dsp (1.1),
	subversion/tests/libsvn_subr/string_test.dsp (1.1),
	subversion/tests/libsvn_wc/checkout_test.dsp (1.1),
	subversion/tests/libsvn_wc/commit_test.dsp (1.1),
	subversion/tests/libsvn_test_editor.dsp (1.2),
	subversion/tests/libsvn_test_main.dsp (1.2):

	More MSVC projects and fixes. Almost there ...  

2000-11-06 19:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/: structure (1.14), TODO (1.11):

	Replace "version" with "revision".  

2000-11-06 18:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* AUTHORS (1.8, post-edit-baton-removal, pre-edit-baton-removal):

	added Daniel Stenberg 

2000-11-06 17:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.48):

	Fix void returns.  

2000-11-06 11:51   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.24):

	we want 0.7.7 to get the right linking behavior when shared libs are
	built 

2000-11-05 21:05   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_subr/xml.c (1.30):

	Oh wow, I wonder how many of those are still in there ...  
	
	* libsvn_subr/xml.c (amalgamate): Copy the hash keys to the pool, 
	too, because otherwise the keys get clobbered when we return to 
	expat-lite/xmlparse.c:doContent.  

2000-11-05 16:32   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_subr/hashdump.c (1.14):

	* libsvn_subr/hashdump.c (read_length_line): Change `i' to `size_t'
	to match parameter and silence MSVC warning.  

2000-11-05 16:30   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_fs/skel-test.c (1.6):

	* libsvn_fs/tests/skel-test.c: Include &lt;stdlib.h&gt; for alloca on
	Win32.  

2000-11-05 16:29   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_delta/vdelta-test.c (1.2):

	* libsvn_delta/tests/vdelta-test.c: Added option `-q'.  
	(print_delta_window): Print only bottom 8 bits of escaped char, so
	negative numbers don't overflow the field size with MSVC.  

2000-11-05 05:59   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_fs/fs.c (1.20):

	(cleanup_fs): cleanup fs-&gt;env only when it is non-NULL. set it to
	  NULL after cleaning it up.  
	(svn_fs_open_berkeley): cleanup_fs() isn't quite smart enough to
	  clean up after a failure during opening (it attempts to checkpoint
	  an unopend db).  set fs-&gt;env to NULL if we don't get the thing
	opened properly.  

2000-11-04 19:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_error.h (1.56), libsvn_subr/svn_error.c
	(1.43), mod_dav_svn/mod_dav_svn.c (1.9):

	Create a way for embedding apps to initialize the error pool so that
	SVN won't blow up when it calls svn_pool_create() and expects an
	error pool to exist.  
	
	* include/svn_error.h: (svn_error_init_pool) declaration for new
	  func.  Add mucho doc on the error pool.  
	* libsvn_subr/svn_error.c: (svn_error_init_pool) new func.  
	    (svn_pool_create) use svn_error_init_pool to initialize/prep the
	      error pool.  
	* mod_dav_svn/mod_dav_svn.c: call svn_error_init_pool at right point 

2000-11-04 19:01   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_fs/.cvsignore (1.3, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	libsvn_fs/Makefile.am (1.11), libsvn_subr/.cvsignore (1.3),
	libsvn_subr/Makefile.am (1.12), mod_dav_svn/.cvsignore (1.2,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	mod_dav_svn/Makefile.am (1.7), mod_dav_svn/repos.c (1.10),
	mod_dav_svn/static/config.m4 (1.2):

	Fix up the installation stuff for mod_dav_svn.  
	
	* libsvn_fs/Makefile.am: add -ldb to mark a dependency in the .la
	    file so that Apache will link in -ldb when it statically links
	mod_dav_svn 
	* libsvn_fs/Makefile.am, libsvn_subr/Makefile.am: add install code
	    to copy the .a and .la files into Apache when we statically link
	    into Apache.  creates .la-a with a filtered library_names just in
	    case static AND shared libs are built 
	* mod_dav_svn/Makefile.am: go back to lib_LTLIBRARIES cuz the
	    noinst_ form does not build .a and .so files when --disable-shared
	    was not given.  Similar to _fs and _subr, preprocess the .la file
	    before copying into the Apache directory.  
	* mod_dav_svn/repos.c: #if out the FS stuff that was recently
	removed 
	* mod_dav_svn/static/config.m4: add the extra libs to the link 
	* .../.cvsignore: ignore the .la-a files which are .la files forced
	    to refer to just the .a (static) libraries 

2000-11-04 17:43   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/svn-apache.m4 (1.7):

	use a different test for IS_STATIC_APACHE -- this ensures that the
	condition is also false when Apache wasn't found at all. IOW, it is
	only true when we are definitely building for a static-link with
	Apache 

2000-11-04 02:12   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/libsvn_fs/Makefile.am (1.5):

	add some missing libraries to the link 

2000-11-03 20:44   Greg Stein &lt;gstein@lyra.org&gt;

	* expat-lite/Makefile.am (1.2):

	make libtool be quiet 

2000-11-03 20:15   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: include/svn_string.h (1.39), libsvn_delta/delta.h
	(1.43), libsvn_wc/adm_files.c (1.54):

	Fixed some warnings reported by Win32 build.  
	
	* include/svn_string.h (svn_string_appendbytes): `count' is
	apr_size_t.  
	* libsvn_delta/delta.h (svn_txdelta__vdelta); Remove const from
	`start'.  
	* libsvn_wc/adm_files.c (close_adm_file): Create error string from 
	`path-&gt;data'; `tmp_path' isn't initialised here. Also remove
	top-level `tmp_path', it's not used any more and it's shadowed in
	block scope later on.  

2000-11-03 20:05   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/libsvn_fs.dsp (1.2):

	Put `.\' on files, like DevStudio does.  

2000-11-03 20:03   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsw (1.3):

	Get rid of those weird uppercase path names.  

2000-11-03 19:06   Branko Cibej &lt;brane@xbc.nu&gt;

	* HACKING (1.15):

	Describe Win32 build process.  

2000-11-03 17:34   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion.dsw (1.2):

	Include libsvn_fs project.  

2000-11-03 17:33   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/libsvn_fs/: .cvsignore (1.2), fs.c (1.19), id.c (1.7),
	libsvn_fs.dsp (1.1):

	Made changes to compile libsvn_fs on Win32, plus minor fix to the
	client build.  
	
	* libsvn_fs/libsvn_fs.dsp: New.  
	* libsvn_fs/.cvsignore: Ignore Debug and Release dirs.  
	* libsvn_fs/fs.c (cleanup_fs): Use apr_sleep instead of sleep, and
	don't include &lt;unistd.h&gt;.  
	* libsvn_fs/id.c (abs): Remove. It's an ISO C function.  
	
	* client/subversion_client.dsp: Link incrementally in debug build to
	shut up MSVC warning.  

2000-11-02 20:37   Branko Cibej &lt;brane@xbc.nu&gt;

	* .cvsignore (1.5, post-edit-baton-removal,
	pre-edit-baton-removal), subversion.dsw (1.1),
	expat-lite/.cvsignore (1.2, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), expat-lite/libexpat.dsp (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_client/.cvsignore (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_client/libsvn_client.dsp (1.1),
	subversion/libsvn_delta/.cvsignore (1.6, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_delta/libsvn_delta.dsp (1.1),
	subversion/libsvn_subr/.cvsignore (1.2),
	subversion/libsvn_subr/libsvn_subr.dsp (1.1),
	subversion/libsvn_wc/.cvsignore (1.6, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/libsvn_wc/libsvn_wc.dsp (1.1),
	subversion/tests/.cvsignore (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal),
	subversion/tests/libsvn_test_editor.dsp (1.1),
	subversion/tests/libsvn_test_main.dsp (1.1):

	Add MSVC project files for building the client and libraries.  
	Modify .cvsignore files to not complain about the new build dirs.  

2000-11-02 14:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.55), include/svn_io.h (1.13),
	libsvn_subr/io.c (1.9), libsvn_wc/get_editor.c (1.117),
	libsvn_wc/log.c (1.47):

	(close_file): convert svn diff to textual diff and save in wc adm 
	area, so updates can be done in a mergey way.  
	(svn_io_open_unique_file): replaces svn_io_tmp_file, more accurate.  
	(SVN_ERR_IO_UNIQUE_NAMES_EXHAUSTED): replaces 
	SVN_ERR_IO_TMP_NAMES_EXHAUSTED.  
	(svn_io_check_path): add const qualifier.  
	(merge_text): removed.  
	(run_cmd_under_directory): new func, in progress, #if'd out.  

2000-11-02 12:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.116), props.c (1.2), wc.h
	(1.98):

	Factorize code for merging properties into a working copy.  Property 
	merges should now work on directories as well as files now.  (In 
	theory. ;))  `make check` still works.  
	
	* props.c (svn_wc__do_property_merge): new func; factorized code is 
	  called by close_file() and close_dir() when properties need to be 
	  merged.  
	
	* get_editor.c (struct dir_baton):  add apr array of svn_propdelta_t
	objects 
	
	  (make_dir_baton):  initialize this array 
	
	  (change_dir_prop): accumulate propchanges in the baton, just like 
	  change_file_prop().  
	
	  (close_file):  call svn_wc__do_property_merge() 
	
	  (close_dir):  if there are pending propchanges, do all the stuff 
	  that close_file() does:  lock, merge, write log, run log, unlock.  
	  Then decrement the ref count at the end of everything, as usual.  
	
	* wc.h (svn_wc__do_property_merge):  declare prototype.  

2000-11-02 12:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.97):

	(SVN_WC__LOG_REPLACE_PROP_BASE): removed.  

2000-11-02 12:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: log.c (1.46), wc.h (1.96):

	(SVN_WC__LOG_MERGE_PROPS, SVN_WC__LOG_MERGE_TEXT): removed these 
	over-specialized log actions.  
	(start_handler): don't handle the latter anymore.  Also, added some
	code here for SVN_WC__LOG_CP in the previous commit.  

2000-11-02 12:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.115), log.c (1.45), wc.h
	(1.95):

	(close_file): make "make check" work again, by writing a log entry 
	that copies text-base file back out to working area.  But this time, 
	do so using the new, abstracted log actions.  
	(SVN_WC__LOG_CP): new log action, handle as variant of
	SVN_WC__LOG_MV.  
	(cp_or_mv_under_directory): replaces rename_under_directory.  
	(SVN_WC__LOG_RUN_CMD): new log action.  Initial use will be to
	invoke diff, for preserving one side of changes during a merge.  

2000-11-02 00:16   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.9):

	add the new pool argument for svn_fs_open_node() 

2000-11-01 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/props.c (1.1):

	Duh, it would help if I actually add the new file.  

2000-11-01 17:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.122), libsvn_delta/delta.h
	(1.42), libsvn_wc/Makefile.am (1.23), libsvn_wc/get_editor.c
	(1.114), libsvn_wc/wc.h (1.94):

	Major rewrite of property change "merging" during updates.  Cleaner.  
	More efficient.  Tastes great.  Less filling.  
	
	Conflicts are now detected.  Property hashes are no longer loaded
	from disk and merged until the file baton is closed.  All
	working-copy "property" related functions are in a new file
	`props.c'.  
	
	TODO: There's an empty C-block waiting to be filled in: 
	
	     - need logging mechanism to mark entry as "conflicted" 
	     - need mechanism to save property conflicts in a `tmpnam.prej'
	     file.  
	
	Also, ask Karl about how entry timestamps are updated.  (another log 
	command?) 
	
	
	* delta.h (svn_propdelta_t):  removed from private area 
	
	* svn_delta.h (svn_propdelta_t):  added to public area 
	
	* props.c (svn_wc__load_prop_file, svn_wc__save_prop_file):  moved 
	  here from get_editor.c, added svn_wc__ prefix.  
	
	  (svn_wc__get_local_propchanges):  new func to deduce what the user 
	  has done to properties since the last update.  
	
	  (svn_wc__conflicting_propchange_p):  new func decides if two 
	  propchanges conflict.  
	
	* Makefile.am:  add props.c to build 
	
	* get_editor.c (struct file_baton):  remove property hashes, just
	  one array of svn_propdelta_t objects now.  
	
	  (make_file_baton):  initialize this array.  
	
	  (change_file_prop):  rename my_* variables, since it drives Karl 
	  nuts.  ;)  create a propdelta object and push it onto the array.  
	
	  (close_file):  TOTAL rewrite of the code which merges property 
	  changes.  Makes use of new routines defined in props.c above.  
	
	* wc.h:  add declarations for everything in props.c 

2000-11-01 15:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/architecture.texi (1.15, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), doc/client.texi
	(1.32), doc/future.texi (1.10, post-edit-baton-removal,
	pre-edit-baton-removal), doc/goals.texi (1.10, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal), doc/model.texi
	(1.9), doc/server.texi (1.36), subversion/include/svn_client.h
	(1.11), subversion/include/svn_delta.h (1.121),
	subversion/include/svn_error.h (1.54), subversion/include/svn_fs.h
	(1.24), subversion/include/svn_ra.h (1.10),
	subversion/include/svn_test.h (1.4), subversion/include/svn_types.h
	(1.48), subversion/include/svn_wc.h (1.38),
	subversion/libsvn_client/apply_edits.c (1.4),
	subversion/libsvn_client/checkout.c (1.10),
	subversion/libsvn_client/client.h (1.4),
	subversion/libsvn_client/commit.c (1.11),
	subversion/libsvn_client/status.c (1.3),
	subversion/libsvn_client/update.c (1.7),
	subversion/libsvn_delta/compose_editors.c (1.3),
	subversion/libsvn_delta/delta.h (1.41),
	subversion/libsvn_delta/xml_output.c (1.15),
	subversion/libsvn_delta/xml_parse.c (1.130),
	subversion/tests/libsvn_delta/deltaparse-test.c (1.55),
	subversion/libsvn_fs/Makefile.am (1.10),
	subversion/libsvn_fs/convert-size.c (1.5),
	subversion/libsvn_fs/delta.c (1.16), subversion/libsvn_fs/dir.c
	(1.8), subversion/libsvn_fs/file.c (1.3),
	subversion/libsvn_fs/file.h (1.2), subversion/libsvn_fs/fs.c
	(1.18), subversion/libsvn_fs/fs.h (1.10), subversion/libsvn_fs/id.c
	(1.6), subversion/libsvn_fs/node.c (1.9),
	subversion/libsvn_fs/node.h (1.5), subversion/libsvn_fs/revision.c
	(1.1), subversion/libsvn_fs/revision.h (1.1),
	subversion/libsvn_fs/txn.c (1.6), subversion/libsvn_fs/version.c
	(1.8), subversion/libsvn_fs/version.h (1.3),
	subversion/libsvn_repos/delta.c (1.16),
	subversion/libsvn_ra_dav/commit.c (1.13),
	subversion/libsvn_ra_dav/fetch.c (1.22),
	subversion/libsvn_wc/adm_crawler.c (1.49),
	subversion/libsvn_wc/adm_files.c (1.53),
	subversion/libsvn_wc/adm_ops.c (1.29),
	subversion/libsvn_wc/entries.c (1.62),
	subversion/libsvn_wc/get_editor.c (1.113),
	subversion/libsvn_wc/log.c (1.44), subversion/libsvn_wc/questions.c
	(1.23), subversion/libsvn_wc/status.c (1.6),
	subversion/libsvn_wc/wc.h (1.93),
	subversion/tests/libsvn_wc/checkout-test.c (1.31),
	subversion/mod_dav_svn/repos.c (1.8),
	subversion/tests/svn_test_editor.c (1.10):

	Replace "version" with "revision" everywhere.  
	
	Mostly, this is the expected textual replacement, with the following 
	gotchas: 
	
	   * In most places, have not used "version" as a verb.  SVN is still 
	     a version control system, and files are still versioned.  But 
	     files don't have version numbers, they have revision numbers.  
	
	   * A few local variables named `verstr' are now `revstr' 
	
	   * Changed `vernum' to `revnum' everywhere.  
	
	   * In libsvn_fs/, the files version.c and version.h are now 
	     revision.c and revision.h.  This was done entirely through Unix 
	     mv and the cvs client, no repository mucking happened (but let
	     me know if you need that history, Jim).  
	
	   * However, mod_dav_svn/version.c has kept its name.  Greg, in 
	     general, I tried to D.T.R.T. in libsvn_ra_dav/ and
	     mod_dav_svn/, please let me know if anything's messed up.  
	
	   * Finished replacement started by Bruce in libsvn_client/README.  

2000-10-31 19:48   Bruce Korb &lt;bkorb@cruzio.com&gt;

	* IDEAS (1.12):

	use a format string to construct ``svn status'' output 

2000-10-31 16:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.55), get_editor.c (1.112), log.c
	(1.43), wc.h (1.92):

	More simplications to log running in preparation for preservation of 
	local mods.  This change breaks the second half of "make check", but 
	will fix the other side tomorrow.  
	
	(SVN_WC__LOG_MODIFY_ENTRY): replaces SVN_WC__LOG_SET_VERSION, make
	it handle the general case of tweaking an entry.  
	
	(SVN_WC__ENTRY_MERGED, SVN_WC__ENTRIES_ATTR_MERGED, 
	SVN_WC__ENTRIES_ATTR_CONFLICT): new #defines.  
	(SVN_WC__ENTRY_CONFLICT): doc fix.  
	
	(SVN_WC__LOG_REPLACE_TEXT_BASE): really removed.  Previous commit 
	claimed it was removed then, but that was a dirty lie.  
	
	(close_file): moved some crucial documentation out to README.  Use
	SVN_WC__LOG_MODIFY_ENTRY to bump version numbers.  
	
	* README: see above.  

2000-10-31 13:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.42):

	(rename_under_directory): more accurate name for 
	rename_within_directory.  

2000-10-31 13:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.19), libsvn_subr/path.c
	(1.22), libsvn_wc/adm_files.c (1.52), libsvn_wc/get_editor.c
	(1.111), libsvn_wc/log.c (1.41), libsvn_wc/wc.h (1.91):

	Simplifications -- the code is getting smaller, whoa: 
	
	(SVN_WC__TMP_EXT, SVN_WC__REJ_EXT): new #defines.  
	(svn_path_split, svn_wc__text_base_path): add const qualifier.  
	(rename_within_directory): new name for move_file.  
	(SVN_WC__LOG_REPLACE_TEXT_BASE): removed, obsolete.  This is handled 
	by SVN_WC__LOG_MV now.  
	(close_file): use SVN_WC__LOG_MV to take care of text-base now.  

2000-10-31 13:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.53), libsvn_wc/adm_crawler.c
	(1.48):

	commit-crawler now bails the entire commit if it discovers a file
	with an unresolved conflict.  (it removes locks when bailing).  code
	is as yet untested;  we don't yet have facility to mark entries as 
	conflicted.  
	
	* adm_crawler.c (do_lock):  factorized code out 
	  (remove_all_locks):  new func, contains code from do_lock 
	  (check_for_unresolved_file_conflict): new func, compares
	  timestamps between working copy file and entry.  If working copy
	  timestamp is newer, assume the conflict has been resolved.  
	  (process_subdirectory):  before asking any other questions about
	  an entry, if it's a file marked with conflict, call 
	  check_for_unresolved_file_conflict() and bail whole commit if
	  necessary.  
	
	* svn_error.h:  added SVN_ERR_WC_FOUND_CONFLICT 

2000-10-31 12:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/io.c (1.8):

	(svn_io_tmp_file): doc fix.  

2000-10-31 12:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.52), include/svn_io.h (1.12),
	libsvn_subr/io.c (1.7):

	(svn_io_tmp_file): replaces svn_io_tmp_name, for more reliable 
	collision avoidance.  Generate friendlier names, too.  
	(SVN_ERR_IO_TMP_NAMES_EXHAUSTED): shorter and in the correct 
	namespace, unlike the now-removed
	SVN_ERR_WC_UNIQUE_NAME_UNAVAILABLE.  

2000-10-31 11:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_io.h (1.11), libsvn_subr/io.c (1.6):

	(svn_io_tmp_name): make suffix part of arguments.  Mark const args
	as such.  

2000-10-31 11:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/path.c (1.21):

	(svn_path_compare_paths): make sure dirs always appear before their 
	children.  
	(count_chars): removed.  Actually, this function was never added;
	the previous log message was inaccurate.  

2000-10-30 18:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_hash.h (1.9), include/svn_path.h (1.18),
	libsvn_subr/keysort.c (1.3), libsvn_subr/path.c (1.20):

	(svn_path_compare_paths): new func.  Still needs some tweaking, but
	interface won't change.  
	(count_char): helper for above.  
	(SVN_PATH__REPOS_SEPARATOR): privatize SVN_PATH_REPOS_SEPARATOR.  
	(apr_hash_sorted_keys): replaces apr_get_sorted_keys.  
	(svn_sort_compare_as_paths): new func; may change location soon.  
	
	Confidential to Ben: we misthunk status output sorting.  See the 
	comment in svn_path_compare_paths.  We'll talk in the morning.  

2000-10-30 17:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_io.h (1.10):

	(svn_io_tmp_name): doc clarifications.  

2000-10-30 17:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.51), include/svn_io.h (1.9),
	include/svn_types.h (1.47), libsvn_subr/io.c (1.5),
	libsvn_wc/adm_crawler.c (1.47), libsvn_wc/adm_files.c (1.51),
	libsvn_wc/adm_ops.c (1.28), libsvn_wc/entries.c (1.61),
	libsvn_wc/get_editor.c (1.110), libsvn_wc/local_changes.c (1.17),
	libsvn_wc/lock.c (1.17), libsvn_wc/log.c (1.40), libsvn_wc/status.c
	(1.5), libsvn_wc/wc.h (1.90):

	(SVN_ERR_WC_UNIQUE_TMP_NAME_UNAVAILABLE): new error code.  
	(svn_io_tmp_name): new func.  
	(svn_node_kind): epistemological fix -- in a consistent namespace, 
	distinguish between nothingness and unknowing: 
	
	        svn_node_none     replaces  svn_invalid_kind 
	        svn_node_file     replaces  svn_file_kind 
	        svn_node_dir      replaces  svn_dir_kind 
	        svn_node_unknown  replaces  svn_invalid_kind 
	
	All callers changed.  
	
	Unrelated namespace fix: 
	
	(SVN_ERR_WC_OBSTRUCTED_UPDATE): replaces SVN_ERR_OBSTRUCTED_UPDATE.  

2000-10-30 15:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/keysort.c (1.2):

	(counted_length_compare): dereference qsort-supplied args in the 
	qsort-approved manner.  All qsort-bow before the qsort-power and 
	infinite qsort-wisdom of qsort.  &lt;thud&gt; 

2000-10-30 15:13   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_hash.h (1.8), libsvn_subr/Makefile.am
	(1.11), libsvn_subr/keysort.c (1.1):

	Routine to convert an apr_hash_t into a ordered, sorted 
	apr_array_header_t.  Notice that the APR array is full of
	(apr_item_t 
	*) objects, which contain {key, klen, val}.  This means that *all*
	of the hash data is conveniently converted into the array.  
	
	Status command now attempts to use this function to print sorted 
	output.  
	
	* keysort.c:  new file implementing apr_get_sorted_keys() 
	
	* Makefile.am:  build keysort.c into libsvn_subr 
	
	* svn_hash.h:  declare apr_get_sorted_keys() 
	
	* status.c (svn_cl__print_status):  take a pool now, and call 
	  apr_get_sorted_keys() instead of looping over the hash.  
	
	* main.c (main):  change call to svn_cl__print_status() 
	
	* cl.h (svn_cl__print_status): update prototype 

2000-10-30 13:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.10), include/svn_delta.h
	(1.120), libsvn_client/apply_edits.c (1.3),
	libsvn_client/checkout.c (1.9), libsvn_client/client.h (1.3),
	libsvn_client/update.c (1.6), libsvn_delta/compose_editors.c (1.2):

	Allow passenger editors on both sides of main svn_delta_edit_fns_t: 
	
	* include/svn_delta.h, libsvn_delta/compose_editors.c 
	(svn_delta_wrap_editor): new func.  
	(svn_delta_compose_editors): return void.  
	
	* include/svn_client.h, libsvn_client/client.h,
	libsvn_client/update.c 
	(svn_client_update, svn_client_checkout): convert passenger_editor, 
	passenger_edit_baton arguments into before_editor, before_edit_baton 
	and after_editor, after_edit_baton.  
	
	* libsvn_client/cl.h libsvn_client/apply_edits.c 
	(svn_client_update_internal, svn_client_checkout_internal): same.  
	(do_edits): same.  
	(apply_edits): same, then use svn_delta_wrap_editor instead of 
	svn_delta_compose_editors.  
	
	Unrelated cosmetic change: 
	
	* client/trace.c (dir_baton): arrange structure more consistently.  

2000-10-28 02:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.37), libsvn_wc/status.c (1.4):

	(svn_wc_status_t): replaces svn_wc__status_t everywhere.  Added
	`svn_wc_status_merged' to enum.  
	(svn_cl__print_status): handle all combinations of version state.  
	Produce script-friendlier output by never leaving a version spot 
	whitespace.  Handle merged status.  

2000-10-27 17:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/status.c (1.3):

	Cleaner recursive algorithm.  But Karl and I are still hunting this 
	weird array resize bug!  Grr.  

2000-10-27 16:43   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.23), libsvn_fs/Makefile.am
	(1.9), libsvn_fs/TODO (1.10), libsvn_fs/dbt.c (1.7),
	libsvn_fs/dbt.h (1.6), libsvn_fs/dir.c (1.7), libsvn_fs/dir.h
	(1.2), libsvn_fs/err.c (1.10), libsvn_fs/err.h (1.7),
	libsvn_fs/fs.h (1.9), libsvn_fs/id.c (1.5), libsvn_fs/id.h (1.3),
	libsvn_fs/node.c (1.8), libsvn_fs/node.h (1.4),
	libsvn_fs/proplist.c (1.5), libsvn_fs/proplist.h (1.3),
	libsvn_fs/skel.c (1.6), libsvn_fs/skel.h (1.4), libsvn_fs/structure
	(1.13), libsvn_fs/txn.c (1.5), libsvn_fs/txn.h (1.2),
	libsvn_fs/version.c (1.7):

	"I'm glad to see the Ministry's continuing its tradition of
	recruiting the brightest and best, sir." 
	
	Use skels directly, instead of building more C-like structures. 
	This gives us less to build up and tear down when accessing mutable
	nodes.  The contents of a mutable node cannot be cached, except
	within a Berkeley DB transaction --- we have to read them and throw
	them out every time.  
	* libsvn_fs/fs.h (struct svn_fs_node_t, kind_t): Delete definitons.  
	Make nodes opaque outside of node.c.  (struct svn_fs_file_t, struct
	svn_fs_dir_t): Delete definitions.  We can't cache any of the node's
	contents, so there's not much we can put in these structures anyway.
	The interface still uses them, but they're always incomplete types.  
	* libsvn_fs/node.c (struct svn_fs_node_t, kind_t): Declare these
	here.  Don't cache the node's property list --- on a mutable node,
	that could change at any time.  
	(header_values_t, parse_header): New type, new function.  
	(svn_fs__init_node): Deleted.  
	(svn_fs__open_node_by_id): Don't parse kind-specific data at all;
	just check for kind and mutability.  
	(svn_fs__get_node_version, svn_fs__put_node_version, 
	svn_fs__reopen_node): New functions.  
	* libsvn_fs/node.h (svn_fs__init_node): Delete declaration.  
	(svn_fs__get_node_version, svn_fs__put_node_version, 
	svn_fs__reopen_node): New declarations.  
	* libsvn_fs/dir.c (svn_fs_open_node): Use `svn_fs__reopen_node',
	instead of bumping the open count ourselves.  
	(build_entries, compare_dirents, svn_fs__dir_from_skel, 
	svn_fs_dir_entries): Deleted.  
	(search): New function, to search skels directly.  
	(svn_fs_open_node): Tweaked thoroughly.  Use `search'.  
	* libsvn_fs/dir.h (svn_fs__dir_from_skel): Delete declaration.  
	
	Begin implementation of filesystem transactions.  
	* libsvn_fs/fs.h (struct svn_fs_txn_t): Make this opaque outside of
	txn.c.  (Possibly a stupid idea.) 
	* libsvn_fs/txn.c (struct svn_fs_txn_t): Declare here.  
	(corrupt_txn, dangling_txn_id, no_such_txn, bad_txn_root): New error
	functions.  
	(get_transaction_skel): New function.  
	(begin_txn_body): Renamed from create_txn_body.  
	(svn_fs_begin_txn, begin_txn_body): Reworked to use
	svn_fs__retry_txn.  (struct replace_root_args): New structure.  
	(replace_root_body, svn_fs_replace_root, svn_fs__txn_id, 
	svn_fs_txn_name): New functions.  
	* libsvn_fs/txn.h (svn_fs__txn_id): New declaration.  
	(DB_ERR): New macro.  
	* libsvn_fs/node.c (get_representation_skel, get_node_version_skel, 
	svn_fs__open_node_by_id): Operate as part of a Berkeley DB 
	transaction.  
	(put_representation_skel): Rearrange args for consistency.  
	(new_node_id, svn_fs__create_node, last_key_before,
	new_successor_id, svn_fs__create_successor, svn_fs__stable_node,
	svn_fs__node_fs, svn_fs__node_id, svn_fs_node_is_mutable): New
	functions.  
	* libsvn_fs/node.h (svn_fs__open_node_by_id): Update declaration.  
	(svn_fs__create_node, svn_fs__create_successor, svn_fs__node_fs, 
	svn_fs__node_id, svn_fs__stable_node): New declarations.  
	* libsvn_fs/skel.c: (svn_fs__make_atom, svn_fs__make_empty_list, 
	svn_fs__prepend, svn_fs__copy_skel): New functions.  
	* libsvn_fs/skel.h: Declare them.  
	* libsvn_fs/dir.c (node_not_mutable): New error function.  (struct
	delete_args): New local type.  
	(svn_fs_delete, delete_body): New functions.  
	* libsvn_fs/id.c (svn_fs__is_parent): New function.  
	* libsvn_fs/id.h (svn_fs__is_parent): New declaration.  
	
	Wrap up the logic for Berkeley DB transaction retries and aborts in 
	a single function: 
	* libsvn_fs/err.c (svn_fs__retry_txn): New function.  
	* libsvn_fs/err.h (svn_fs__retry_txn): New declaration.  
	* libsvn_fs/txn.c (svn_fs_begin_txn, begin_txn_body): Reworked to
	use svn_fs__retry_txn.  
	
	Remove property list objects.  Let the user retrieve single
	properties directly from the node; for more demanding applications,
	just give them a hash table and let them do as they please.  
	* include/svn_fs.h (svn_fs_proplist_t, svn_fs_proplist_get, 
	svn_fs_proplist_names, svn_fs_proplist_hash_table, 
	svn_fs_compare_prop_names): Delete declarations.  
	(svn_fs_get_node_prop, svn_fs_get_node_proplist): New declarations.  
	* libsvn_fs/fs.h: (struct svn_fs_proplist_t): Delete.  
	* libsvn_fs/proplist.[ch]: Deleted.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Remove proplist.c 
	* libsvn_fs/dir.c: Don't #include "proplist.h".  
	* libsvn_fs/node.c (svn_fs_get_node_prop, svn_fs_get_node_proplist): 
	New functions.  
	
	Simplify directory entry reading interface.  
	* include/svn_fs.h: (svn_fs_dir_entries): Don't return a sorted
	list, shared with our internal data.  Give the user a hash table,
	allocated in their own pool.  
	(svn_fs_compare_dirents): Prototype deleted.  
	* libsvn_fs/dir.c (svn_fs_dir_entries): Rewritten.  
	(svn_fs_compare_dirents): Function deleted.  
	
	Simplify `nodes' table structure.  We can do without `N.head'
	entries in the table by doing other kinds of range queries, so drop
	them.  
	* libsvn_fs/structure: Update.  
	* libsvn_fs/id.c (svn_fs__parse_id): Drop `flags' argument.  Never 
	recognize `.head' at the end of an ID.  
	* libsvn_fs/id.h (svn_fs__key_id): Delete.  
	(svn_fs__parse_id): Update declaration.  
	* libsvn_fs/node.c (compare_ids): Simplify accordingly.  
	* libsvn_fs/version.c (svn_fs__version_root): No need to pass
	`flags' argument.  
	
	Provide simple functions for making DBT's from node ID's, skels, and 
	strings, and DBT's that request no data.  
	* libsvn_fs/dbt.c: #include "id.h" and "skel.h".  
	(svn_fs__nodata_dbt, svn_fs__id_to_dbt, svn_fs__skel_to_dbt, 
	svn_fs__str_to_dbt): New functions.  
	* libsvn_fs/dbt.h: New prototypes for above.  
	* libsvn_fs/node.c (get_representation_skel,
	put_representation_skel, new_successor_id): Use them.  
	* libsvn_fs/txn.c (put_transaction_skel): Same.  
	* libsvn_fs/version.c (put_version_skel): Same.  
	
	Make `nodes' key comparison more robust.  
	* libsvn_fs/node.c (parse_node_version_dbt): New function.  
	(compare_nodes_keys): Use it, to verify that every key is a node 
	version ID, not a node ID.  
	
	Change NODE-VERSION structure to insulate kind-specific data from 
	changes to the common node structure.  
	* libsvn_fs/structure: Document changes.  
	* libsvn_fs/nodes.c (make_nodes): Update form of root directory.  
	
	* libsvn_fs/version.c (put_version_skel): Rearrange args for 
	consistency.  
	
	* libsvn_fs/dir.c (not_a_directory): Fix SVN error code.  
	
	* libsvn_fs/dir.c (svn_fs_open_root): Just use the filesystem's
	root, not a subpool.  Don't forget to close root_node if it's bogus.  
	
	* libsvn_fs/dir.c (svn_fs_open_root): Check the FS argument.  
	
	* include/svn_fs.h (svn_fs_node_version): Deleted; this isn't
	well-defined.  
	
	* include/svn_fs.h (svn_fs_open_node, svn_fs_delete): Add a `pool' 
	argument, for temporary allocation.  
	
	* include/svn_fs.h (svn_fs_node_is_mutable): Renamed from 
	svn_fs_is_mutable.  
	
	* include/svn_fs.h (svn_fs_file_contents): Clarify lifetime of 
	CONTENTS / CONTENTS_BATON.  
	
	* libsvn_fs/Makefile.am (delta.c, file.c): Set aside for now.  

2000-10-27 14:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.9), include/svn_wc.h (1.36),
	libsvn_client/status.c (1.2), libsvn_wc/get_editor.c (1.109),
	libsvn_wc/status.c (1.2):

	First-stage rewrite of `svn status';  instead of returning a single 
	status structure, return a hash full of them.  (Next step: 
	recursion.) 
	
	* libsvn_wc/status.c (svn_wc_get_status): return a hash of status 
	  structs, not just one struct.  A big rewrite here.  
	  (add_status_structure): new helper to convert entry structs to 
	  status structs.  
	
	* svn_wc.h (svn_wc_get_status):  change declaration appropriately 
	
	* libsvn_client/status.c (svn_client_status):  allocate and return a 
	  hash now.  
	
	* svn_client.h (svn_client_status) change declaration appropriately 
	
	* main.c (main):  change args to svn_client_status() call 
	
	* client/status.c (svn_cl__print_status):  print each structure in 
	  hash.  
	
	* cl.h (svn_cl__print_status): change declaration appropriately 

2000-10-27 13:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_wc.h (1.35):

	(svn_wc__status_t):  add svn_wc_status_conflicted enum 

2000-10-27 11:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.108):

	(change_file_prop): fix bug in property patching;  property deletes
	work now.  

2000-10-27 10:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.89):

	Add SVN_WC__ENTRY_CONFLICT flag in entries structure.  

2000-10-26 20:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* IDEAS (1.11):

	Lost an idea, gained an idea.  

2000-10-26 19:33   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* subversion/include/svn_delta.h (1.119):

	Fixed indentation.  

2000-10-26 19:02   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* IDEAS (1.10):

	Added ideas for 'svn convert' and 'svn repo' 

2000-10-26 16:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.107), log.c (1.39), wc.h
	(1.88):

	We can now checkout properties into a working copy.  (So it seems.) 
	Next stop:  &gt;committing&lt; properties.  
	
	* log.c (move_file):  new func which calls apr_rename_file().  
	  (start_handler):  look for SVN_WC__LOG_MV and call move_file().  
	
	* get_editor.c (close_file): write correct log entries using 
	  SVN_WC__LOG_MV when there are properties present.  
	  (change_file_prop):  dup storage of name/value into fb's pool.  
	
	* wc.h:  add SVN_WC__LOG_MV and SVN_WC__LOG_DEST 

2000-10-26 16:00   Joe Orton &lt;joe@light.plus.com&gt;

	* AUTHORS (1.7):

	Change of e-mail address.  

2000-10-26 15:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.8), include/svn_delta.h
	(1.118), libsvn_client/apply_edits.c (1.2),
	libsvn_client/checkout.c (1.8), libsvn_client/client.h (1.2),
	libsvn_client/update.c (1.5), libsvn_delta/Makefile.am (1.14),
	libsvn_delta/compose_editors.c (1.1):

	Implement CVS-like command-line progress reporting by composing
	delta editors: 
	
	* libsvn_delta/compose_editors.c (svn_delta_compose_editors): new 
	file, new func.  
	
	* libsvn_delta/Makefile.am: add compose_editors.c.  
	
	* include/svn_delta.h (svn_delta_compose_editors): prototype and 
	document.  
	
	* libsvn_client/checkout.c, libsvn_client/update.c, 
	libsvn_client/apply_edits.c, libsvn_client/client.h: 
	(svn_client_checkout, svn_client_update, 
	svn_client__checkout_internal, svn_client__update_internal,
	do_edits): take passenger editor and baton, pass them along.  
	(apply_delta): receive  passenger editor and baton, compose them
	onto real editor.  
	
	* include/svn_client.h: adjust for above.  
	
	* client/main.c (main): get a trace editor, pass it along to
	checkout and update.  
	
	* client/trace.c (svn_cl__get_trace_editor): new file, new func.  
	
	* client/Makefile.am: add trace.c.  
	
	Unrelatedly, break status command out into its own file: 
	
	* status.c (svn_cl__print_status): new file, new name for 
	print_status, which lives here now.  
	
	* Makefile.am, main.c: adjust for above.  
	
	* cl.h: prototype.  

2000-10-26 14:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.38):

	merged conflicts from Joe.  :) 

2000-10-26 14:32   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_fs/: dir.c (1.6), version.c (1.6):

	svn_vernum_t is a long int, so use %ld.  

2000-10-26 14:29   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_wc/: entries.c (1.60), get_editor.c (1.106),
	log.c (1.37):

	Pass char *'s rather than svn_string_t *'s to printf-style
	functions.  

2000-10-26 13:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.35):

	Removed lock-manager discussion from spec.  

2000-10-26 13:05   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/include/: svn_error.h (1.50), svn_string.h (1.38):

	* svn_error.h (svn_error_createf): Add GCC printf format-checking 
	attributes.  
	
	* svn_string.h (svn_string_createf, svn_string_createv): Add GCC 
	printf format-checking attributes.  

2000-10-26 11:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.50), get_editor.c (1.105):

	
	* get_editor.c (close_file, load_prop_file): fix input args to 
	  svn_wc__adm_path.  
	
	* adm_files.c (init_adm): create SVN/ dir with new #defines.  

2000-10-26 11:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.49):

	(svn_wc__adm_path): fix braino.  

2000-10-26 07:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.104):

	Duh, only write prop hashes if fb-&gt;prop_changed.  

2000-10-25 21:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.48), get_editor.c (1.103),
	wc.h (1.87):

	Begin implementing properties in checkout/update.  The immediate 
	short-term goal is to be able to read a &lt;prop-delta&gt; from XML and 
	correctly store properties in the SVN/ area; properties should be 
	"updated" in the same logged, crash-safe way that normal files are.  
	
	The main restriction, for now, is that we have no way for users to 
	manipulate properties from the command-line.  
	
	At the moment, here's our algorithm, on a per-file basis: 
	
	  * load the pristine properties from prop-base/ into `baseprops' hash 
	
	  * load working properties from props/ into `localprops' hash 
	
	  * merge each prop-delta into baseprops hash.  
	
	  * merge each prop-delta into localprops hash, but *note* conflicts.  
	
	  * when we close the file_baton, write our two hashes into the
	    SVN/tmp/ area, specifically tmp/prop-base/ and tmp/props/ 
	
	  * write log entry to move tmp/prop-base/ to prop-base/ 
	
	  * if (conflict) either leave tmp/props/ alone, (or move it?) 
	
	I have a feeling this algorithm is going to change.  ;) 
	
	
	* wc.h: change administrative file #defines to match new property 
	  storage schema in libsvn_wc/README.  
	
	* get_editor.c (struct file_baton):  add "properties" hashes to be 
	  edited in-memory as a prop-delta is received.  
	  (make_file_baton):  initialize hashes 
	  (change_file_prop):  actually fill in this routine.  Builds 
	  in-memory prophashes within the file_baton;  all prop-delta edits
	  go into this hash.  
	  (close_file):  flush hashes to SVN/tmp/ areas, write log entries.  
	  (load_prop_file):  factorized code to read properties from disk to
	  hash 
	(save_prop_file):  factorized code to write props from hash to disk 
	
	* adm_files.c: change calls to SVN_WC__ADM_* defines where
	necessary.  

2000-10-25 21:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_hash.h (1.7), libsvn_subr/hashdump.c
	(1.13), tests/libsvn_subr/hashdump-test.c (1.13):

	Fix input args to svn_hash_read.  (Why the heck were we passing a
	double pointer to a hash?!?)  `hashdump-test' still passes all
	tests.  
	
	* svn_hash.h (svn_hash_read):  fix declaration 
	* hashdump.c (svn_hash_read):  change input from **hash to *hash 
	* hashdump-test.c (test2):  change call to svn_hash_read 

2000-10-25 18:29   Branko Cibej &lt;brane@xbc.nu&gt;

	* IDEAS (1.9):

	Added two new sections: 
	
	    * Reserved and unreserved checkouts 
	    * Handling conflicts in the client and working copy 
	
	And a new subsection to 
	* shell-like interactive mode for client (like ftp): 
	
	    ** Useful for integration with Emacs, etc.  

2000-10-25 16:27   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.49):

	(SVN_ERR_FS_NO_SUCH_TRANSACTION, SVN_ERR_FS_BAD_REPLACE_ROOT, 
	SVN_ERR_FS_NOT_MUTABLE): New errors.  

2000-10-25 12:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/README (1.54):

	Describe new property-storage scheme.  

2000-10-25 10:58   Branko Cibej &lt;brane@xbc.nu&gt;

	* configure.in (1.39), subversion/libsvn_fs/Makefile.am (1.8),
	subversion/tests/libsvn_delta/Makefile.am (1.12),
	subversion/tests/libsvn_fs/Makefile.am (1.4),
	subversion/tests/Makefile.am (1.7),
	subversion/tests/libsvn_subr/Makefile.am (1.11),
	subversion/tests/libsvn_wc/Makefile.am (1.12):

	Use flags and libs computed by APR's configure: 
	
	* configure.in: Source apr/APRVARS after subdir config and set 
	initial CPPFLAGS, CFLAGS and LIBS.  * &lt;all&gt; Makefile.am: Remove
	explicit definitions of CFLAGS.  

2000-10-25 07:48   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.10), notes/webdav-usage.html (1.10):

	point to the latest rev of the I-D 

2000-10-24 17:39   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_client.h (1.7), include/svn_wc.h (1.34),
	libsvn_client/Makefile.am (1.8), libsvn_client/status.c (1.1),
	libsvn_wc/Makefile.am (1.22), libsvn_wc/status.c (1.1),
	libsvn_wc/wc.h (1.86):

	Implemented `svn status' command.  
	
	Command-line binary calls svn_client_status(), which in turn calls 
	svn_wc_get_status().  The structure returned has all fields filled 
	except for the repos_version; once libsvn_ra is working, 
	svn_client_status() can get this info from the repository and finish 
	filling out the structure.  For now, this field is left as 
	SVN_INVALID_VERNUM.  
	
	* svn_wc.h (svn_wc__status_t, svn_wc_get_status) new public status 
	  structure and routine for fetching one.  
	
	* svn_client.h (svn_client_status): new public interface for
	  fetching status.  
	
	* main.c (main, command, parse_options): implement `status' command.  
	  (print_status): new helper function.  
	
	* status.c:  new files added to both libsvn_wc/ and libsvn_client 
	
	* Makefile.am:  modified in both libsvn_wc/ and libsvn_client/ to
	  build new `status.c' files.  

2000-10-24 14:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.11, post-edit-baton-removal, pre-edit-baton-removal),
	STACK (1.18), subversion/Makefile.am (1.16),
	subversion/include/svn_error.h (1.48),
	subversion/include/svn_parse.h (1.7), subversion/include/svn_svr.h
	(1.34), subversion/include/svn_types.h (1.46),
	subversion/libsvn_subr/svn_error.c (1.42),
	subversion/libsvn_subr/svn_parse.c (1.41):

	Clean out unused code and types: 
	
	* README: bring description of source tree up to date.  
	
	* include/svn_types.h (svn_file_t, svn_dirent_t, svn_directory_t, 
	svn_node_t, svn_ver_t, svn_svr_action_t, svn_user_t, svn_token_t): 
	removed these obsolete types.  
	(svn_node_kind): preserve by moving out of svn_node_t.  
	
	* Makefile.am (EXTRA_DIST): removed include/svn_svr.h.  
	
	* include/svn_error.h (svn_handle_warning): doc fix.  
	
	* libsvn_subr/svn_error.c (svn_handle_warning): doc fix.  
	
	Removed these files: 
	
	* include/svn_svr.h 
	* include/svn_parse.h 
	* libsvn_subr/svn_parse.c 
	* libsvn_subr/parsetest/Makefile 
	* libsvn_subr/parsetest/configfile 
	* libsvn_subr/parsetest/parsetest.c 
	* libsvn_svr/plugin_security/plugin_security.c 
	* libsvn_svr/plugin_security/svn_security 
	* libsvn_svr/server_init.c 
	* libsvn_svr/svn.conf 
	* libsvn_svr/server_fs.c 
	* libsvn_svr/README 
	* libsvn_svr/tests/Makefile 
	* libsvn_svr/tests/svrtest.c 
	* libsvn_svr/tests/testpolicy.conf 

2000-10-24 08:24   Branko Cibej &lt;brane@xbc.nu&gt;

	* ac-helpers/berkeley-db.m4 (1.5, post-edit-baton-removal,
	pre-edit-baton-removal):

	* ac-helpers/berkeley-db.m4: Don't mix LIBS and CPPFLAGS.  

2000-10-23 20:54   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* IDEAS (1.8):

	Moved svn sync from subversion/client/README to here where it
	belongs 

2000-10-23 20:51   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* IDEAS (1.7):

	Added Branko's idea 

2000-10-23 17:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: client.texi (1.31), future.texi (1.9), protocol.texi (1.6,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal),
	server.texi (1.34):

	Finished first pass at bringing .texi spec up-to-date with our code
	tree.  

2000-10-23 17:09   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/future.texi (1.8):

	* future.texi:  add pointer to IDEAS.  

2000-10-23 17:08   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.33):

	Updating the spec to reflect all that is new in the last four
	months. ;) 
	
	* server.texi:  put pointers to Jimb's documentation and headers on 
	  the filesystem.  Remove most discussion of "libsvn_svr", which no 
	  longer exists.  However, notice that I left behind discussion of 
	  authentication and authorization mechanisms -- as food for thought 
	  as we move forward.  
	
	  Also, left the discussion of the filesystem "lock-manager", but I 
	  think this is a dead idea.  Jimb, you'll need to go take a look at 
	  it and nuke it if so.  

2000-10-23 16:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: client.texi (1.30), protocol.texi (1.5):

	Updating the spec to reflect all that is new in the last four
	months. ;) 
	
	* protocol.texi:  provide many links to Neon, DeltaV, and Greg's RFC 
	  paper that describes how he's mapping DeltaV to Subversion.  

2000-10-23 16:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/client.texi (1.29):

	Updating client.texi to reflect all that is new in the last four
	months. ;) 
	
	* Remove discussion of "skeltas", and discuss "postfix text deltas"
	instead.  
	
	* Update description of files in the working copy administrative
	area.  
	
	* Remove all API descriptions of libsvn_wc, libsvn_ra,
	  libsvn_client; instead,  put pointers to the public header files. 
	:) 

2000-10-23 16:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.53):

	Cleaning up some loose ends.  

2000-10-23 16:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.52):

	Clearer intro.  

2000-10-23 12:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.14):

	Some tasks are now just stack items, others are in-progress.  

2000-10-23 12:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.17):

	You know, I could make all these changes and *then* commit, but 
	noooo...  

2000-10-23 12:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.16):

	another note about hook editor 

2000-10-23 12:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.15):

	note about hook editor 

2000-10-23 12:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.14):

	mmm...  a PINHEAD, during an EARTHQUAKE, encounters an ALL-MIDGET
	 FIDDLE ORCHESTRA...  ha..  ha..  

2000-10-23 12:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/svn-design.texi (1.15):

	Add date keyword to front page.  

2000-10-23 12:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.13):

	Sunshine my herring trousers.  

2000-10-23 11:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/architecture.texi (1.14):

	Remove `server layer' from diagram, and show two future 
	implementations of libsvn_ra.  Update comments accordingly.  

2000-10-23 11:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* STACK (1.12):

	What Ben is doing now.  :) 

2000-10-23 10:45   Greg Stein &lt;gstein@lyra.org&gt;

	* IDEAS (1.6):

	add an idea about splitting WC 

2000-10-21 17:52   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.21):

	* fetch.c (everywhere): Use SVN_NO_ERROR for 'no error', rather than 
	NULL (for readability and consistency).  

2000-10-21 17:48   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.20):

	* fetch.c (fetch_dirents): Destroy the PROPFIND handler before
	returning in error cases.  

2000-10-21 17:46   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.19):

	* fetch.c (fetch_dirents): Destroy PROPFIND handler after use.  

2000-10-21 17:43   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.18):

	* fetch.c (fetch_dirents): More verbose error reporting for PROPFIND 
	failures.  

2000-10-21 10:25   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.17):

	* fetch.c (svn_ra_checkout): Remove debugging printf which got 
	committed by mistake.  

2000-10-21 01:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/index.html (1.16, milestone-1):

	Simplify language.  

2000-10-21 01:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.11, milestone-1):

	Note some more todo items.  

2000-10-21 01:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/index.html (1.15):

	Note Milestone 1.  

2000-10-21 00:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_client/commit.c (1.10),
	libsvn_client/update.c (1.4), libsvn_delta/xml_output.c (1.14),
	libsvn_delta/xml_parse.c (1.129), libsvn_wc/adm_crawler.c (1.46),
	libsvn_wc/get_editor.c (1.102), libsvn_wc/log.c (1.36),
	libsvn_wc/wc.h (1.85) (utags: milestone-1):

	Make updates work: 
	
	* client/svn-test.sh: demonstrate updates.  
	
	* client/README: notes about update functionality and testing the 
	client.  
	
	* libsvn_client/commit.c (svn_client_commit): don't use test editor 
	for debugging anymore, use xml output editor unconditionally.  
	
	* libsvn_client/update.c (svn_client_update): call 
	svn_client__update_internal unconditionally.  
	
	* libsvn_wc/wc.h (SVN_WC__LOG_DELETE_ENTRY): new log item.  
	(SVN_WC__LOG_SET_VERSION): fix string value.  
	(svn_wc__entry_dup, svn_wc__entry_merge_sync): doc fixes.  
	
	* libsvn_wc/log.c (start_handler): handle SVN_WC__LOG_DELETE_ENTRY.  
	Handle deletion correctly in SVN_WC__LOG_COMMITTED.  Tighten up
	error handling in general, by bailing immediately after signalling
	if any error is encountered.  
	(remove_from_version_control): new helper func for above.  
	
	* libsvn_wc/get_editor.c (replace_file): don't pass adding flag when 
	calling add_or_replace_file.  
	(replace_directory): set the child baton.  
	(delete): implement.  
	(apply_textdelta, window_handler): handle absence of text-base 
	gracefully, so adding works.  
	
	* libsvn_wc/adm_crawler.c (process_subdirectory): check for error 
	after reading entries.  Correct logic in checking for an entry that
	is marked addition and deletion.  Remember to record deleted-only
	files in affected_targets.  
	
	* libsvn_delta/xml_parse.c (outermost_tree_delta_close_p): new func.  
	(xml_handle_end): never call do_close_directory() on &lt;/tree-delta&gt; 
	unless it's known to be the final &lt;/tree-delta&gt;.  For all non-root 
	dirs, calling do_close_directory() on &lt;/dir&gt; suffices.  
	(everywere): allocate in the safe way.  
	
	* libsvn_delta/xml_output.c (get_to_elem): revert previous change, 
	that is, emit prop-delta with svn_xml_normal instead of 
	svn_xml_protect_pcdata.  
	
	* STACK: note some future todo items.  

2000-10-20 21:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.45):

	(push_stack): allocate in the safe style.  

2000-10-20 21:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_test_editor.c (1.9, milestone-1):

	(svn_test_get_editor): allocate in the safe style.  

2000-10-20 21:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/xml.c (1.29, milestone-1):

	(svn_xml_make_parser): allocate in the safe style.  

2000-10-20 21:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_string.c (1.5, milestone-1):

	(svn_string_ncreate): allocate in the safe style.  

2000-10-20 21:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.41, milestone-1):

	(make_error_internal): allocate in the safe style.  

2000-10-20 21:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/hashdump.c (1.12, milestone-1):

	(svn_pack_bytestring): allocate in the safe style.  

2000-10-20 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* IDEAS (1.5, milestone-1):

	Describe how commit/update "hooks" might work in the near future.  

2000-10-20 16:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.101):

	(apply_textdelta): handle errors correctly.  

2000-10-20 16:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/txn.c (1.4), libsvn_ra_dav/commit.c (1.12)
	(utags: milestone-1):

	Get a warning-free compilation: 
	
	* libsvn_ra_dav/commit.c (checkout_resource): #if out for now, to 
	avoid a compile warning about the function being defined but not 
	used.  We can put it back when it has callers.  
	
	* libsvn_fs/txn.c (create_txn_body): manually prototype 
	svn_fs__nodata_dbt() for now, to avoid `implicit declaration' 
	warning.  

2000-10-20 16:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.47, milestone-1):

	(open_adm_file): set *handle to null if the open failed.  

2000-10-20 16:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.44):

	Prevent hash key from possibly vanishing. :) 

2000-10-20 16:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/xml_output.c (1.13):

	(get_to_elem, apply_textdelta): use svn_xml_protect_pcdata when 
	creating text-deltas and prop-deltas.  

2000-10-20 15:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.59, milestone-1),
	get_editor.c (1.100), log.c (1.35), wc.h (1.84):

	(svn_wc__entry_merge_sync): doc fix.  
	(SVN_WC__ENTRY_CLEAR): new #define.  
	(sync_entry): use it.  
	(start_handler): clear entry flags when handle
	SVN_WC__LOG_COMMITTED.  
	(delete): add note.  

2000-10-20 15:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.40, milestone-1),
	xml_parse.c (1.128):

	Fix some major sloppiness in our XML parser.  :) 
	
	* delta.h:  remove out-of-date cruft in documentation 
	
	* xml_parse.c (svn_delta_make_xml_parser, do_stack_append, 
	  do_stack_remove): our stack should start and end life as NULL now.  
	  Do *not* call replace_root() preemptively -- yeesh! 
	
	  (xml_handle_start, xml_handle_end):  treat initial &lt;delta-pkg&gt; and 
	  first &lt;tree-delta&gt; frames specially, storing base ancestry in the 
	  former, and storing the root_dir_baton in the latter.  In other 
	  words, we never call replace_root() until we actually see a 
	  &lt;tree-delta&gt;.  Along these lines, allow close_dir(root) to happen 
	  naturally when we get the final &lt;/tree-delta&gt;.  

2000-10-20 14:06   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/: include/svn_path.h (1.17, milestone-1),
	libsvn_delta/xml_parse.c (1.127), libsvn_fs/delta.c (1.15,
	milestone-1), libsvn_repos/delta.c (1.15, milestone-1),
	libsvn_subr/path.c (1.19, milestone-1), libsvn_wc/adm_crawler.c
	(1.43), libsvn_wc/adm_files.c (1.46), libsvn_wc/entries.c (1.58),
	libsvn_wc/get_editor.c (1.99), libsvn_wc/log.c (1.34),
	tests/svn_test_editor.c (1.8):

	* path.c (svn_path_add_component, svn_path_add_component_nts, 
	add_component_internal): Remove redundant pool argument.  
	
	All callers changed.  

2000-10-20 14:04   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/session.c (1.8, milestone-1):

	* session.c (svn_ra_open): Fix URL validity check.  

2000-10-20 13:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.126):

	Remove silly style of calling function pointers.  

2000-10-20 13:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.57):

	(sync_entry): bitwise AND is not the same as logical AND, Karl.  Did 
	you eat your Wheaties? 

2000-10-20 11:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.42), entries.c (1.56),
	wc.h (1.83):

	
	* adm_crawler.c (process_subdirectory):  reinstate subpools at each 
	  level of the tree, but also remove the second "pool" argument to 
	  this routine;  all subpools are now direct children of top_pool, 
	  rather than generating a long chain of subpools.  This is more 
	  readable.  Also:  guarantee that *everything* stored in our 
	  `affected_targets' hash is allocated from top_pool;  this means 
	  calling svn_wc__entry_dup when storing the entry in a new 
	  target_baton.  
	
	* wc.h, entries.c (svn_wc__entry_dup): public utility to duplicate
	  an entry (and its hash!) into a new pool.  

2000-10-20 11:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.22, milestone-1):

	(filesizes_definitely_different_p): rename back from 
	filesizes_different_p, and doc fix, now that Ben has reminded me of 
	why we called it this in the first place.  

2000-10-20 10:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_io.h (1.8, milestone-1):

	(svn_io_file_reader, svn_io_file_writer): include clarification,
	with thanks to Greg Stein.  

2000-10-19 22:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_io.h (1.7), libsvn_subr/io.c (1.4,
	milestone-1), libsvn_wc/adm_crawler.c (1.41):

	Changes to send txdeltas for added files: 
	
	* adm_crawler.c: Replaced `filehash' with `affected_targets' 
	everywhere; the new name more accurately reflects the fact that it 
	stores (or will store) anything that got committed.  This is
	probably the beginning of a larger change, see the comment above
	struct target_baton.  
	
	(target_baton): new struct.  
	(process_subdirectory): use top-level pool, instead of making a 
	subpool, because the batons we now store in affected_targets need to 
	outlive this call.  
	(do_postfix_text_deltas): don't try to send txdeltas for anything
	but modified or new files.  
	(do_apply_textdelta): take a target_baton, not a file_baton.  
	Non-existent text base not an error if this file is being added.  
	
	Supporting changes: 
	
	(svn_io_file_reader): if filehandle is null, then simply return 0 
	bytes of data.  
	(svn_io_file_reader, svn_io_file_writer): document in header only.  
	
	* client/svn-test.sh: demonstrate the adds.  
	
	Not really related changes: 
	
	(svn_wc_crawl_local_mods): doc fix.  

2000-10-19 21:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_client/commit.c (1.9), libsvn_wc/entries.c
	(1.55), libsvn_wc/log.c (1.33), libsvn_wc/questions.c (1.21),
	libsvn_wc/wc.h (1.82):

	Get commits working: 
	
	(contents_identical_p): take two file arguments, instead of
	branching a single argument; caller changed.  Fix buglet whereby
	first file shorter might result in a false positive.  More detailed
	error reporting.  
	(svn_wc__file_modified_p): pass textbase_filename to 
	contents_identical_p, since we already have it anyway.  
	(filesizes_different_p): replaces filesizes_definitely_different_p.  
	Why on earth I suggested the longer name, I can't remember now.  
	Caller changed.  
	(svn_wc__files_contents_same_p): new func.  
	
	(set_version): removed, do it inline.  
	(svn_client_commit): conditionally get a test editor instead of an
	xml editor, for easier debugging.  
	(start_handler): do what set_version did inline now.  Handle
	SVN_WC__LOG_COMMITTED.  
	(sync_entry): don't override timestamp if none was passed in.  
	(signal_error): replace fmt argument with a child error argument. 
	All callers changed.  

2000-10-19 19:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.27, milestone-1), log.c
	(1.32), wc.h (1.81):

	(svn_wc__log_commit): targets arg before version arg, for
	consistency.  

2000-10-19 19:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.40):

	(do_lock): innify scope of new error variable.  

2000-10-19 19:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.39):

	(do_lock): don't overload error variable.  

2000-10-19 19:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.26), log.c (1.31), wc.h
	(1.80):

	(svn_wc__cleanup): take targets arg.  
	(svn_wc__log_commit): test for targets in the right way.  

2000-10-19 18:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_test.h (1.3, milestone-1),
	include/svn_wc.h (1.33, milestone-1), libsvn_client/commit.c (1.8),
	tests/libsvn_delta/deltaparse-test.c (1.54, milestone-1),
	libsvn_wc/adm_crawler.c (1.38), libsvn_wc/adm_ops.c (1.25),
	libsvn_wc/log.c (1.30), libsvn_wc/wc.h (1.79),
	tests/libsvn_wc/commit-test.c (1.11, milestone-1),
	tests/svn_test_editor.c (1.7):

	Qualify svn_delta_edit_fns_t arguments with `const' everywhere,
	adjust callers accordingly.  
	
	Unrelatedly, make committing functions cooperate by sharing the list 
	of committed entities and treading carefully w.r.t. lockfiles.  
	
	(svn_wc_close_commit, svn_wc__log_commit): take new targets arg.  
	Only write log items for things that were actually committed.  
	(svn_wc_crawl_local_mods): return targets in a hash.  
	(svn_client_commit): grab targets from svn_wc_crawl_local_mods, pass 
	along to svn_wc_close_commit.  
	(svn_wc__cleanup): use bail_on_lock.  
	
	Note: still need a targets arg to prevent svn_wc__cleanup() from 
	cleaning up in areas where it's not supposed to.  

2000-10-19 18:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.37):

	(do_dir_replaces):  only call do_lock() at the bottom of the
	routine, once we've found the "lowest" directory baton.  

2000-10-19 17:54   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_io.h (1.6), libsvn_client/commit.c
	(1.7), libsvn_fs/structure (1.12, milestone-1), libsvn_subr/io.c
	(1.3), libsvn_wc/adm_crawler.c (1.36),
	tests/libsvn_wc/commit-test.c (1.10):

	
	* io.c (svn_io_file_reader, svn_io_file_writer):  generic routines
	  to read and write open filehandles, conforming to svn_read_fn_t and 
	  svn_write_fn_t.   Lots of folks need these, I think.  
	
	* svn_io.h (svn_io_file_reader, svn_io_file_writer): declarations of 
	  above.  
	
	* commit.c (generic_write) removed in favor of above, changed one 
	  caller to it.  
	
	* adm_crawler.c (posix_reader) removed in favor above, changed
	callers.  
	
	* commit-test.c: add -x flag to optionally use Greg Hudson's XML 
	  output editor instead of the "generic" test editor.  
	
	  KARL:  please fix the above.  commit-test.c is trying to open a 
	  filehandle to stdout.  Apparently the "-" doesn't work.  :) 

2000-10-19 17:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.24), log.c (1.29), wc.h
	(1.78):

	(svn_wc__cleanup): added bail_on_lock argument.  All callers
	changed.  

2000-10-19 17:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.23), log.c (1.28), wc.h
	(1.77):

	(svn_wc__cleanup): new func.  
	(svn_wc_close_commit): filled in.  

2000-10-19 16:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.45), lock.c (1.16,
	milestone-1), log.c (1.27), wc.h (1.76):

	(svn_wc__adm_path, svn_wc__locked, svn_wc__log_commit): new funcs.  

2000-10-19 16:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.35), adm_files.c (1.44):

	Add directory locking to the commit-crawler; also make it send diffs 
	against a temporary *copy* of the working file, not the file itself.  
	
	* adm_files.c (apr_copy_file):  add declaration, to make compiler
	happy.  
	
	* adm_crawler.c (do_lock): new routine which locks a dir and stores
	in a hash.  If lock fails, all locks in the hash are unlocked and
	the commit bails.  
	
	(do_dir_replaces): now takes a `locks' hash and top-level pool; the 
	main caller of do_lock(), since we want to lock a directory whenever 
	we call replace_directory().  
	
	(do_apply_textdelta): copy working file to tmp area, then open
	*that* file handle for diffing.  
	
	(process_subdirectory): now takes `locks' hash; changed calls to 
	do_dir_replaces().  
	
	(svn_wc_crawl_local_mods):  adjust call to to
	process_subdirectory().  

2000-10-19 16:09   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.10):

	just noticed that I still needed to do this, from one of Karl's
	commits 

2000-10-19 15:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.75):

	(SVN_WC__LOG_COMMITTED): restored.  

2000-10-19 15:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.98), log.c (1.26), wc.h
	(1.74):

	Document the meanings of the log elements, and: 
	
	(SVN_WC__LOG_SET_VERSION): more accurate name for
	SVN_WC__LOG_SET_ENTRY.  
	(set_version): more accurate name for set_entry.  

2000-10-19 14:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.73):

	(SVN_WC__LOG_COMMITTED): new log tag.  

2000-10-19 14:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.72):

	(svn_wc__copy_file): doc fix.  

2000-10-19 14:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.71):

	(apr_copy_file): don't export.  

2000-10-19 14:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.43), local_changes.c (1.16,
	milestone-1), wc.h (1.70):

	(svn_wc__copy_file): new func.  
	(maybe_copy_file, svn_wc__gnudiff_patcher): use above new func.  

2000-10-19 07:45   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: Makefile.am (1.6), dav_svn.h (1.5),
	mod_dav_svn.c (1.8), repos.c (1.7), util.c (1.1) (utags:
	milestone-1):

	- clean up some of the URI, root_uri, and path parsing 
	- introduce dav_svn_repos structure 
	- really implement dav_stream structure; fill in reading code 
	- open the FS and squirrel it away into dav_svn_repos 
	- add SVNPath directive for specifying where the FS sits 
	- util function for SVN-&gt;DAV error conversion 

2000-10-19 07:42   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_error.h (1.47, milestone-1):

	add some errors that are specific to the mod_dav_svn Apache module 

2000-10-19 05:14   Greg Stein &lt;gstein@lyra.org&gt;

	* STACK (1.9):

	random whack at what needs to be coded / what can be deferred for a
	bit 

2000-10-18 20:57   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* IDEAS (1.4):

	Fixed indentation. Doh.  

2000-10-18 20:57   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* IDEAS (1.3):

	Added cvs-compatibility wrapper idea 

2000-10-18 20:39   Brian Fitzpatrick &lt;fitz@red-bean.com&gt;

	* IDEAS (1.2):

	Added possible implementation specific information as item under
	'shell-like insteractive mode' 

2000-10-18 15:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.32), libsvn_client/commit.c
	(1.6), libsvn_wc/adm_ops.c (1.22):

	(svn_wc_close_commit): don't take tok arg.  All callers changed.  
	(svn_client_commit): don't generate a universally unique id, don't 
	make a token from it, etc.  

2000-10-18 10:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/adm_crawler.c (1.34),
	tests/libsvn_wc/commit-test.c (1.9):

	Crawler now closes edit internally.  
	
	* adm_crawler.c (process_subdirectory): `stack' arg is now a double 
	  pointer, so that it can returned to svn_wc_crawl_local_mods().  
	
	(svn_wc_crawl_local_mods): after completing working copy crawl,
	  check top-level stackframe for existence of a root-dir baton.  If
	  it's there, call editor-&gt;close_edit().  
	
	* commit-test.c:  don't call editor-&gt;close_edit() anymore, our
	  crawler now does so automatically if necessary.  

2000-10-18 02:09   Joe Orton &lt;joe@light.plus.com&gt;

	* BUGS (1.2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1):

	Put in the neon mailing list as the bug-reporting address.  

2000-10-17 21:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* BUGS (1.1):

	New file, so I can remember where to send APR bug reports.  

2000-10-17 20:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/local_changes.c (1.15):

	(svn_wc__string_to_time): remove glaringly incorrect comment.  

2000-10-17 20:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/local_changes.c (1.14):

	APR *_snames working again, so make timestamp code live.  
	
	(svn_wc__string_to_time): set tm_mon correctly.  Ben, the timestamp
	code works now.  

2000-10-17 20:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/io.c (1.2):

	(svn_io_check_path): ahem, *cough* ... implement using apr_stat ...
	*cough thanks Greg Stein cough* ...  

2000-10-17 20:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.54):

	(svn_wc__compose_paths): new name for svn_wc_compose_paths, which is 
	internally public, not externally public.  

2000-10-17 19:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.53):

	(svn_wc_compose_paths): replaces compose_paths, because this will
	have to be an internally public function.  But also #ifdef out,
	because no one is ready to use it yet.  

2000-10-17 19:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_io.h (1.5), include/svn_types.h (1.45,
	milestone-1), libsvn_subr/Makefile.am (1.10, milestone-1),
	libsvn_subr/io.c (1.1), libsvn_wc/adm_files.c (1.42),
	libsvn_wc/entries.c (1.52), libsvn_wc/local_changes.c (1.13),
	libsvn_wc/log.c (1.25), libsvn_wc/wc.h (1.69):

	* io.c (svn_io_check_path): new file, new func.  All callers
	changed.  
	
	* libsvn_wc (svn_wc__file_exists_p): removed, in favor of 
	svn_io_check_path.  
	
	Also, we're not going to have a generic recursion function, because 
	recursing is easy and genericizing it actually results in more code 
	than not.  Thank goodness for the phone call with Jim!  So: 
	
	(svn_wc__entries_recurse, svn_wc__recurse_enter_dir_t, 
	svn_wc__recurse_leave_dir_t, svn_wc__recurse_handle_file_t):
	removed.  
	(compose_paths): replaces remove_redundancies.  But not removed, as 
	will still be useful.  

2000-10-17 17:58   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.16, milestone-1):

	* fetch.c (fetch_file_reader): Fix string declaration.  

2000-10-17 17:23   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.15):

	* fetch.c (svn_ra_checkout): Don't call add_directory for the root
	of the repository.  

2000-10-17 17:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/path.c (1.18):

	Load svn-dev.el.  

2000-10-17 16:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_path.h (1.16):

	(svn_path_canonicalize): not static here either.  

2000-10-17 16:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/path.c (1.17):

	(svn_path_canonicalize): not static.  

2000-10-17 16:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_path.h (1.15):

	(svn_path_canonicalize): semicolon assumed the position.  

2000-10-17 16:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/path.c (1.16):

	(svn_path_canonicalize): oops, change all callers of the old 
	canonicalize.  

2000-10-17 16:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.14), libsvn_subr/path.c
	(1.15):

	(svn_path_canonicalize): new public name for canonicalize.  

2000-10-17 16:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.68):

	(svn_wc__entries_recurse): document.  

2000-10-17 15:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.67):

	(svn_wc__entries_recurse, svn_wc__recurse_handle_file_t, 
	svn_wc__recurse_leave_dir_t, svn_wc__recurse_enter_dir_t): new 
	functions, conditionally declared.  

2000-10-17 13:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.33):

	(process_subdirectory): add "top_pool" argument to this routine, and 
	make sure filehash paths use this pool for storage.  

2000-10-17 13:33   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/text_delta.c (1.19, milestone-1):

	Save some space and copying by combining the buffer which saves
	source data with the buffer passed to the vdelta routine.  

2000-10-17 13:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_test_editor.c (1.6):

	(my_vcdiff_windoweater): cast printf args to avoid compilation
	warnings.  

2000-10-17 13:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_test_editor.c (1.5):

	(my_vcdiff_windoweater): show every kind of window action.  

2000-10-17 12:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.32):

	(do_apply_textdelta): doh, got the source and target streams
	reversed in call   to svn_txdelta().  Interesting results... :) 

2000-10-17 12:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_test_editor.c (1.4):

	Fix indentation in the test editor, by always storing an absolute 
	indent level in each baton: 
	
	(edit_baton): don't store indentation.  
	(indent_amount): new static const int.  
	(dir_baton, file_baton): do store indentation.  
	(inc_spaces, dec_spaces): removed.  
	(everyone): prefix print statements with the appropriate
	indentation.  Even postfix textdeltas and their matching close_files
	have indent levels, relative to their open_files.  

2000-10-17 12:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/: libsvn_wc/checkout-1.delta (1.15),
	libsvn_wc/checkout-2.delta (1.6), libsvn_wc/checkout-test.sh (1.9,
	milestone-1), xml/co1-inline.xml (1.3, milestone-1),
	xml/co1-postfix.xml (1.3, milestone-1):

	Use real base64-encoded vcdiff data in the shared xml test data.  
	
	Removed the non-shared test data in libsvn_wc (everyone's test data 
	should live in the shared area).  Change test script to match.  
	
	Restored commented-out tests in client/tests/svn-test.sh.  

2000-10-17 12:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.20):

	
	(timestamps_equal_p): rearrange error-check logic; if we can't stat 
	one or both files, assume timestamps are different.  
	
	(filesizes_definitely_different_p): renamed from filesizes_equal_p.  
	This question more accurately describes why we're running the test.
	:) Again, if we can't stat one or both files, return `different =
	FALSE'.  
	
	(svn_wc__file_modified_p): clean up logic, using routines above.  

2000-10-17 12:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* AUTHORS (1.6, milestone-1):

	Added bkorb, fitz, lefty, mab.  

2000-10-17 12:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* IDEAS (1.1):

	[sorry, accidentally checked in STACK with this log message a moment
	ago] 
	
	New file.  
	
	Initialize with John Cavanaugh's idea for ftp-like shell mode for
	client.  

2000-10-17 12:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.8):

	New file.  
	
	Initialize with John Cavanaugh's idea for ftp-like shell mode for
	client.  

2000-10-17 11:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/svn_test_editor.c (1.3):

	Fill out edit_baton properly.  

2000-10-17 11:12   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.22, milestone-1),
	libsvn_fs/txn.c (1.3):

	* include/libsvn_fs.h: Doc fix.  
	
	* libsvn_fs/txn.c (svn_fs_begin_txn): Remove PARENT_POOL argument.  
	* include/libsvn_fs.h (svn_fs_begin_txn): Update declaration.  
	
	* libsvn_fs/txn.c (put_transaction_skel): New function.  
	(create_txn_body): Use it.  
	
	* libsvn_fs/txn.c (svn_fs_begin_txn): Call svn_fs__check_fs before 
	doing anything else.  

2000-10-17 10:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.19):

	(timestamps_equal_p): get rid of unused variable entry_time.  

2000-10-17 10:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/adm_crawler.c (1.31),
	tests/libsvn_wc/commit-test.c (1.8):

	* adm_crawler.c (pop_stack): think-o, don't forget to set next ptr
	to NULL.  This fixes do_dir_replaces().  
	
	* commit-test.c:  as Greg S. suggests, exit(1).  

2000-10-16 19:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.51), wc.h (1.66):

	(BRAVE_NEW_INTERFACE): removed this conditional and all the code
	that wasn't in it.  The brave new interface is working now.  
	
	(svn_wc__entry_set, svn_wc__entry_merge, svn_wc__entry_get, 
	svn_wc__entry_get_ancestry, get_entry_attributes, write_entry, 
	handle_end_tag, do_parse, do_entry): gone.  

2000-10-16 19:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.21), get_editor.c (1.97):

	(delete, svn_wc_delete_file, svn_wc_add_file): pass flag correctly.  

2000-10-16 19:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.50):

	(take_from_entry): subdir entries don't record a version number.  
	(alloc_entry): new func.  
	(handle_start_tag, stuff_entry_v): use alloc_entry.  

2000-10-16 19:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_client/delete.c (1.3, milestone-1):

	typo 

2000-10-16 19:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.96):

	doc fix 

2000-10-16 18:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.95):

	(read_from_file): APR_EOF is legit from apr_full_read.  

2000-10-16 18:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.41):

	Removed obsolete comment.  

2000-10-16 17:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.94), local_changes.c
	(1.12):

	(svn_wc__string_to_time, svn_wc__time_to_string): use dummy
	timestamps until the apr_day_snames and apr_month_snames problem is
	fixed.  
	
	Also fixed a couple of argument-order brainos.  Now libsvn_wc passes 
	checkout-test again.  

2000-10-16 17:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.18):

	(contents_identical_p):  remember that apr_full_read can return 
	APR_EOF and still be successful.  Only look for non-EOF errors. :) 

2000-10-16 17:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.30):

	(process_subdirectory): fix silly recursion bug.  

2000-10-16 17:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_wc/commit-test.c (1.7):

	Check for errors at each point, not just at the end.  

2000-10-16 17:04   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.11):

	Bring discussion of node, node versions and ID's into sync with
	what's in svn_fs.h.  (Perhaps this copy should be deleted?) 

2000-10-16 16:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.31), libsvn_client/commit.c
	(1.5), libsvn_wc/adm_crawler.c (1.29), libsvn_wc/adm_ops.c (1.20),
	libsvn_wc/entries.c (1.49), libsvn_wc/get_editor.c (1.93),
	libsvn_wc/log.c (1.24), libsvn_wc/questions.c (1.17),
	libsvn_wc/wc.h (1.65), tests/libsvn_wc/commit-test.c (1.6),
	tests/svn_test_editor.c (1.2):

	(svn_wc__entries_write): make close tag too.  
	(sync_entry): do timestamp and kind conditionally.  
	(stuff_entry_v): new helper func.  
	(svn_wc__entry_add): put pool arg last.  Implement using above.  
	(svn_wc__entry_merge_sync): new func, same, takes over from old 
	svn_wc__entry_merge.  
	
	(add_directory, delete, free_dir_baton, svn_wc_delete_file, 
	svn_wc_add_file): use svn_wc__entry_merge_sync.  
	
	(timestamps_equal_p): use new entry interface.  Fold timestamp 
	resolution to avoid false negatives.  
	
	(svn_wc_crawl_local_mods): remove tok arg, all callers changed.  
	
	Various tweaks to bring error-free compilation back.  

2000-10-16 16:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.21):

	(svn_fs_begin_txn): add pool to prototype, so can compile.  Jim, I 
	didn't update the documentation, you might want to write something 
	about parent_pool.  

2000-10-16 16:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_test.h (1.2):

	#include necessary things, wrap in SVN_TEST_H.  

2000-10-16 16:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.53):

	(main): use (void *) for edit_baton.  Remove `my_' prefix.  

2000-10-16 16:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_string.h (1.37, milestone-1),
	libsvn_subr/svn_string.c (1.4), tests/libsvn_subr/stringtest.c
	(1.3, milestone-1):

	(svn_string_createf, svn_string_createv): new functions.  
	(test12): test for above.  
	
	Also, make all svn_string interface documentation be in
	svn_string.h, reformatted and checked for consistency.  

2000-10-16 16:05   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.20):

	* include/svn_fs.h (svn_fs_commit_txn): If the commit fails, the 
	transaction still exists, until you abort it.  You could change
	things and try committing again.  
	
	* include/svn_fs.h (svn_fs_begin_txn): Remove POOL argument.  
	(svn_fs_txn_subpool): Delete function.  
	(svn_fs_close_txn, svn_fs_cleanup_txn, svn_fs_kill_cleanup_txn, 
	svn_fs_run_cleanup_txn): New functions.  

2000-10-16 15:05   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/file.c (1.2, milestone-1):

	libsvn_fs/file.c (read_string_fn): Remove baton cast.  
	(svn_fs_file_contents): Same.  

2000-10-16 15:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_test.h (1.1), tests/Makefile.am (1.6,
	milestone-1), tests/README (1.5, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1), tests/TEST-FRAMEWORK (1.1,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	tests/svn_test_editor.c (1.1), tests/libsvn_delta/Makefile.am
	(1.11, milestone-1), tests/libsvn_delta/deltaparse-test.c (1.52),
	tests/libsvn_wc/Makefile.am (1.11, milestone-1),
	tests/libsvn_wc/commit-test.c (1.5):

	
	* README:  describe everything in the tests-common/ subdir.  
	
	* TEST-FRAMEWORK:  what *used* to be README in tests-common/.  Gee,
	  it sure would be nice if our version control system knew about that 
	  ancestry.  :) 
	
	* svn_test_editor.c, svn_test.h: implementation of a `dummy' editor 
	  whose callbacks print to stdout.  This was being used in at least 
	  two test programs, so now we've factorized it into a new library.  
	  Anyone who needs a dummy editor... there it is.  
	
	* deltaparse-test.c, commit-test.c:  factorize to use the dummy 
	  editor.  Greatly shortened.  
	
	* Makefile.am (s): make the two test programs above depend on the
	  new libsvn_test_editor.la.  

2000-10-16 13:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.48), wc.h (1.64):

	(handle_start_tag): always pass a len when hashing the entry name, 
	it's not worth special-casing for dir's own name twice.  
	(take_from_entry): finish.  
	(resolve_to_defaults): new, more descriptive name for
	check_defaults.  
	(sync_entry): return void, all callers changed.  
	(read_entries): make static.  Doc fixes.  
	(svn_wc__entries_write, svn_wc__entry_add): code flow improvements.  
	(svn_wc__entry_remove): return void.  Finish.  

2000-10-16 12:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.47), get_editor.c (1.92),
	local_changes.c (1.11), log.c (1.23):

	Remove unnecessary casts, as per recent discussion on the list.  
	
	(Except, don't do so in adm_crawler.c, since Ben's got lots of 
	uncommitted changes there right now.) 
	
	Also, a few minor formatting/doc tweaks.  

2000-10-16 10:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/txn.c (1.2):

	#include &lt;string.h&gt;, for memset.  

2000-10-16 10:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_wc/commit-test.c (1.4):

	Don't forget to close the edit.  

2000-10-16 08:23   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.38, milestone-1):

	* for Subversion users, the default *is* to configure the subdirs.
	  now that we're close to a user-release, make it so.  
	  (developers: you may want to learn the --disable-subdir-config
	  switch) 
	
	* add a comment to the output stream that libtool configuration is
	starting 

2000-10-16 08:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_fs/proplist.c (1.4, milestone-1),
	libsvn_subr/xml.c (1.28), libsvn_wc/adm_crawler.c (1.28),
	libsvn_wc/entries.c (1.46), libsvn_wc/questions.c (1.16):

	tweak the calls to apr_hash_get and apr_hash_set to use
	APR_HASH_KEY_STRING where appropriate. simplify a call in
	svn_fs__make_proplist().  

2000-10-15 22:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.10):

	Expand on how changes proceed within a transaction.  You only need
	to `bubble up' once.  

2000-10-15 21:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.9, milestone-1):

	Is that a pontoon in your pocket, or are you just happy to see me? 

2000-10-14 17:41   Joe Orton &lt;joe@light.plus.com&gt;

	* configure.in (1.37):

	Remove references to old libsvn_string.  

2000-10-14 16:05   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: libsvn_client/Makefile.am (1.7),
	libsvn_wc/Makefile.am (1.21) (utags: milestone-1):

	So, putting relative paths to .la files in *_la_LIBADD to signal
	shared library dependencies doesn't work; it just breaks our shared
	library build.  I'm not sure what the right way is;
	"-L../libsvn_foo/.libs -lsvn_foo" seems to work but doesn't seem
	very clean to me.  So I removed those definitions entirely; we
	didn't have one in libsvn_delta so it can't be too bad.  This change
	gets the shared library build going again, although without 
	dependency information.  

2000-10-14 15:58   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/libsvn_subr/Makefile.am (1.10, milestone-1):

	Need expat for test programs now that we have XML stuff in 
	libsvn_subr.  

2000-10-14 11:47   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: TODO (1.7), TODO (1.8):

	[no log message] 

2000-10-14 11:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dir.c (1.5, milestone-1):

	libsvn_fs/dir.c (svn_fs_open_node): Be sure to close any nodes we've 
	opened in the process of descending the tree, even when we return an 
	error.  

2000-10-14 01:27   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.6):

	[no log message] 

2000-10-14 01:11   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: Makefile.am (1.7, milestone-1), dbt.c
	(1.6, milestone-1), dbt.h (1.5, milestone-1), fs.c (1.17,
	milestone-1), fs.h (1.8, milestone-1), structure (1.9), txn.c
	(1.1), txn.h (1.1, milestone-1):

	Get started with transaction implementation.  
	* libsvn_fs/txn.h, libsvn_fs/txn.c: New files.  
	* libsvn_fs/fs.h (struct svn_fs_t): New members `transactions' and
	`open_txns'.  (struct svn_fs_txn_t): New struct definition.  (struct
	svn_fs_node_t): New member `txn'.  
	* libsvn_fs/fs.c: #include "txn.h".  
	(svn_fs_new): Initialize the filesystem object's `open_txns' table.  
	(cleanup_fs): Close the `transactions' table.  
	(svn_fs_create_berkeley): Create the `transactions' table.  
	(svn_fs_open_berkeley): Open the `transactions' table.  
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add txn.c.  
	* libsvn_fs/structure: Keep current.  
	
	* libsvn_fs/dbt.c (svn_fs__compare_dbt): Make the DBT's const.  
	* libsvn_fs/dbt.h (svn_fs__compare_dbt): Fix declaration.  

2000-10-13 18:40   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: dbt.c (1.5), dbt.h (1.4), node.c (1.7,
	milestone-1):

	* libsvn_fs/dbt.c (svn_fs__compare_dbt): New function.  
	* libsvn_fs/dbt.h (svn_fs__compare_dbt): New declaration.  
	* libsvn_fs/node.c (compare_nodes_keys): Use svn_fs__compare_dbt.  
	(compare_bytewise): Delete function.  

2000-10-13 18:25   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/fs.c (1.16):

	libsvn_fs/fs.c (cleanup_fs): Close databases before checkpointing.  

2000-10-13 18:24   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: err.c (1.9, milestone-1), err.h (1.6,
	milestone-1), fs.c (1.15), node.c (1.6), version.c (1.5,
	milestone-1):

	* libsvn_fs/err.h (DB_WRAP): Renamed from DB_ERR.  By symmetry with 
	SVN_ERR, something named DB_ERR should check a Berkeley DB error
	value and return it.  I think I may actually want something like
	that soon...  
	(svn_fs__wrap_db): Renamed from svn_fs__check_db.  
	* libsvn_fs/err.c (svn_fs__wrap_db): Renamed from svn_fs__check_db.  
	* libsvn_fs/fs.c, libsvn_fs/node.c, libsvn_fs/version.c: Change uses 
	of DB_ERR to DB_WRAP, and reindent.  

2000-10-13 18:12   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dbt.h (1.3):

	Doc fix.  

2000-10-13 18:12   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.5):

	[no log message] 

2000-10-13 17:37   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.46):

	(SVN_ERR): Use a stranger name for the temporary variable.  I 
	accidentally used `svn_err' as a real variable, and then (after some 
	manual cleanup) tried to say `SVN_ERR (svn_err)', which didn't do
	what I meant.  ("Shoulda written it in Scheme...") 

2000-10-13 17:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.45), wc.h (1.63):

	Implementation of the new entries interface: 
	
	(read_entries, check_defaults, take_from_entry, sync_entry): new 
	helper funcs.  
	(svn_wc__entries_read, svn_wc__entries_write, svn_wc__entry_add, 
	svn_wc__entry_remove): implement, for the new entries interface.  
	(svn_wc__entry_t): tweaks.  
	(SVN_WC__ENTRIES_THIS_DIR): empty string now.  
	
	Needs testing.  

2000-10-13 16:02   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.4):

	Long-term repository readability strategy.  

2000-10-13 15:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.45):

	(SVN_ERR_WC_ENTRY_MISSING_VERSION): new error code.  

2000-10-13 14:48   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_base64.h (1.2), libsvn_subr/base64.c
	(1.4) (utags: milestone-1):

	Greg Stein suggested he might want to base64-encode property values.
	The write filter interfaces would be rather inconvenient for that,
	so reorganize the code and add some string interfaces which assume
	you have all the data at once but don't force you to go through
	callback hell.  
	(svn_base64_encode_string, svn_base64_decode_string): New, simpler 
	interfaces.  
	* base64.c (encode_bytes, encode_partial_group, decode_bytes): New
	helper functions to factor out encoding and decoding of byte
	strings.  

2000-10-13 14:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.44):

	(SVN_ERR_UNKNOWN_NODE_KIND): new error.  

2000-10-13 14:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.44):

	(svn_node_t): new kind svn_invalid_kind in svn_node_kind.  

2000-10-13 13:50   Jim Blandy &lt;jimb@redhat.com&gt;

	* ac-helpers/berkeley-db.m4 (1.4, milestone-1):

	Help Subversion find Berkeley DB 3.1.14 on FreeBSD.  

2000-10-13 12:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.62):

	(svn_wc__entry_t): merged redundant fields path and ancestor_path
	into one new field, `ancestor'.  

2000-10-13 12:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.61):

	(SVN_WC__ENTRIES_THIS_DIR): doc fix.  

2000-10-13 12:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.60):

	Added #define, because apr won't let us store NULL as a hash key
	(yet).  

2000-10-13 09:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.59):

	Cleanly separate new entries interface from old via pivot
	conditional.  (Slight tweaks to new interface, just before starting
	to implement.) 

2000-10-12 20:34   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/vdelta.c (1.4, milestone-1):

	Increase window size to 100K, which seems to increase performance 
	dramatically on some real-life inputs (gcc-2.95.1.tar and 
	gcc-2.95.2.tar, for instance) without adding greatly to runtime.  

2000-10-12 18:32   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/svn_string.c (1.3):

	(svn_string_ensure): Don't reallocate when not necessary.  

2000-10-12 16:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.58):

	(BRAVE_NEW_INTERFACE): new #define while entries interface is being 
	improved.  

2000-10-12 16:21   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/: include/svn_string.h (1.36), libsvn_delta/svndiff.c
	(1.7, milestone-1), libsvn_delta/text_delta.c (1.18),
	libsvn_delta/xml_parse.c (1.125), libsvn_fs/id.c (1.4,
	milestone-1), libsvn_fs/skel.c (1.5, milestone-1),
	libsvn_subr/base64.c (1.3), libsvn_subr/path.c (1.14),
	libsvn_subr/svn_parse.c (1.40, milestone-1),
	libsvn_subr/svn_string.c (1.2), libsvn_subr/xml.c (1.27),
	tests/libsvn_fs/skel-test.c (1.5, milestone-1),
	tests/libsvn_subr/stringtest.c (1.2):

	* include/svn_string.h: Added pool pointer to svn_string_t
	structure.  Removed 'pool' argument from svn_string_ensure,
	svn_string_append*.  
	
	* libsvn_subr/svn_string.c (svn_string_ensure,
	svn_string_appendcstr, svn_string_appendbytes,
	svn_string_appendstr): Removed pool argument.  
	(svn_string_ncreate): Store pool pointer in structure.
	(svn_string_ensure): Pass the original pool to my__realloc.  
	
	* (everywhere): Don't pass pool in calls to svn_string_append*, and 
	svn_string_ensure accordingly.  

2000-10-12 16:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.57):

	New interface prototyped, but #ifdef'd out.  

2000-10-12 12:28   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/libsvn_delta/svndiff-test.c (1.4, milestone-1):

	Output base64-encoded deltas, so that this program can be used to 
	generate stuff suitable for inclusion in XML deltas.  

2000-10-12 12:28   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/: libsvn_delta/foo.delta (1.9, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	libsvn_delta/postfix.delta (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	libsvn_delta/simple.delta (1.3, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	libsvn_wc/checkout-1.delta (1.14), libsvn_wc/checkout-2.delta
	(1.5), libsvn_wc/simple.delta (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1):

	Include base64-encoded svndiffs in text-delta elements, since we use
	that now.  Such diffs can be generated using
	libsvn_delta/tests/svndiff-test.  

2000-10-12 12:25   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/: delta.h (1.39), text_delta.c (1.17),
	xml_output.c (1.12), xml_parse.c (1.124):

	Hook up the svndiff code again, this time with base64 encoding. 
	Everything appears to work this time around.  (deltas will be
	changed to include base64-encoded svndiff data in the next commit.) 
	* delta.h (svn_xml__digger_t): Remove workaround fields 
	* xml_parse.c (do_begin_textdelta, xml_handle_end, xml_handle_data): 
	Remove workarounds, and use base64 decoding.  
	* xml_output.c: Un-revert reverted changes.  
	* text-delta.c (svn_txdelta): Reenable call to vdelta routine.  

2000-10-12 12:21   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/base64.c (1.2):

	(encode_group): Don't shift four bits four to the left when 
	constructing a six-bit value.  
	(svn_base64_encode, svn_base64_decode): Record proper pool in baton.  

2000-10-12 12:19   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/svndiff.c (1.6):

	(write_handler): Increment buffer when chewing up header bytes, or 
	we'll copy the wrong data into db-&gt;buffer.  

2000-10-12 12:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: Makefile.am (1.15, milestone-1),
	libsvn_client/Makefile.am (1.6), tests/libsvn_delta/Makefile.am
	(1.10), tests/libsvn_fs/Makefile.am (1.3, milestone-1),
	libsvn_subr/Makefile.am (1.9), libsvn_subr/svn_string.c (1.1),
	tests/libsvn_subr/Makefile.am (1.9), tests/libsvn_subr/stringtest.c
	(1.1), tests/libsvn_wc/Makefile.am (1.10):

	Merge libsvn_string into libsvn_subr.  

2000-10-12 11:20   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.8):

	Describe how transactions are implemented.  

2000-10-11 19:42   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/fs.c (1.14):

	libsvn_fs/fs.c (cleanup_fs): Repeat call to txn_checkpoint if it 
	returns DB_INCOMPLETE.  

2000-10-11 16:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/xml/: up1a-inline.xml (1.3), up1a-postfix.xml
	(1.3), up1b-postfix.xml (1.4) (utags: milestone-1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal):

	Fix typos in standard xml test deltas 

2000-10-11 14:59   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/: delta.h (1.38), text_delta.c (1.16),
	xml_output.c (1.11), xml_parse.c (1.123):

	So, it turns out we can't embed svndiff data in XML without
	base64-encoding it first, and that will take a little time.  In the
	meantime, make the world safe for testing with the following
	workarounds and fixes: 
	
	* text_delta.c (svn_txdelta): Once again disable the call to 
	svn_txdelta__vdelta and create a fake window instead.  
	* xml_output.c: Revert rev 1.9 which used the svndiff routines. 
	Also fix two bugs which slipped into rev 1.7: 
	(apply_textdelta): Initialize str to NULL before calling tag
	routines.  
	(get_to_elem): Handle file -&gt; file_prop_delta transition.  
	* delta.h, xml_parse.c: We can't do a simple reversion because I
	removed the svn_vcdiff_parser stubs.  Instead, cons up fake delta
	windows on our own.  

2000-10-11 14:23   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_output.c (1.10):

	(output_addreplace): Call the correct svn_xml_make_open_tag function 
	for innertag.  

2000-10-11 14:19   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_base64.h (1.1), libsvn_subr/Makefile.am
	(1.8), libsvn_subr/base64.c (1.1):

	Add a base64 encoder and decoder.  This code compiles fine; it is
	not known to work yet.  (And there is some reason to expect that it
	does not.) Nothing uses it yet.  
	
	(svn_base64_encode, svn_base64_decode): New functions to do base64
	encoding and decoding, using an svn_write_fn_t pipeline approach.  

2000-10-11 13:19   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/libsvn_fs/skel-test.c (1.4,
	jimb_pre_transaction):

	* libsvn_fs/tests/skel-test.c (skel_is_digit): Dyke out, to silence 
	`unused function' warnings.  

2000-10-11 13:18   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: dbt.c (1.4), dbt.h (1.2), dir.c (1.4),
	fs.c (1.13), id.c (1.3), id.h (1.2, milestone-1), node.c (1.5),
	node.h (1.3, milestone-1), skel.c (1.4), version.c (1.4), version.h
	(1.2, milestone-1) (utags: jimb_pre_transaction):

	Move table opening / creation code into the modules that actually
	work with those tables.  
	* libsvn_fs/fs.c (create_table, open_table): Deleted.  
	(svn_fs_create_berkeley): Call svn_fs__create_versions and 
	svn_fs__create_nodes, instead of building these tables ourselves.  
	(svn_fs_open_berkeley): Call svn_fs__ope_versions and 
	svn_fs__open_nodes, instead of opening these tables ourselves.  
	* libsvn_fs/node.h (svn_fs__create_nodes, svn_fs__open_nodes):
	Declare.  
	* libsvn_fs/node.c (put_representation_skel, make_nodes, 
	svn_fs__create_nodes, svn_fs__open_nodes): New functions.  
	* libsvn_fs/version.h (svn_fs__create_versions,
	svn_fs__open_versions): Declare.  
	* libsvn_fs/version.c (put_version_skel): New function.  
	(make_versions, svn_fs__create_versions, svn_fs__open_versions): New 
	functions.  
	(get_version_skel): Adapt to the fact that `versions' is now a
	`recno' table, indexed by record number, not a `btree', indexed by
	strings.  
	
	Sort the `nodes' table in a nice order for our access patterns.  
	* libsvn_fs/node.c (compare_bytewise, compare_ids,
	compare_nodes_keys): New functions.  
	(make_nodes): Set `compare_nodes_keys' as the comparison function
	for the `nodes' table.  
	* libsvn_fs/id.c (svn_fs__parse_id): Extend to parse ID's as they 
	appear as keys in the `nodes' table --- with the `.head' suffix.  
	* libsvn_fs/id.h (svn_fs__parse_id): Updated interface.  
	(svn_fs__key_id): New flag.  
	* libsvn_fs/dir.c (build_entries): Pass zero for FLAGS to 
	svn_fs__parse_id.  
	* libsvn_fs/version.c (svn_fs__version_root): Same.  
	
	* libsvn_fs/fs.c (cleanup_fs): Checkpoint the database before
	closing.  
	
	* libsvn_fs/skel.c (unparse): If we can't convert the length to
	ASCII in the buffer provided, then just abort.  We don't want to
	make all our users check for errors (which they weren't), just on
	the off chance that someday apr_size_t will be seven hundred bits
	long.  
	
	* libsvn_fs/dbt.c (svn_fs__set_dbt): Change `data' argument to a 
	pointer to void, since that's what the DBT's `data' member is.  
	* libsvn_fs/dbt.c (svn_fs__set_dbt): Adjust declaration.  

2000-10-11 13:05   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.7, jimb_pre_transaction):

	[no log message] 

2000-10-11 12:52   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.3, jimb_pre_transaction):

	[no log message] 

2000-10-11 12:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.19):

	* include/svn_fs.h (svn_fs_file_delta): Document the fact that if 
	SOURCE_FILE is zero, we treat it as the empty file.  

2000-10-10 20:19   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/svndiff.c (1.5):

	(write_handler): nheader should be at most *len, not at least *len.  
	Oops.  

2000-10-10 17:17   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* www/: project_license.html (1.1, milestone-2), project_nav.html
	(1.2) (utags: milestone-1, post-edit-baton-removal,
	pre-edit-baton-removal):

	Added the "project license" web page PR: Obtained from: Submitted
	by: Reviewed by: 

2000-10-10 15:33   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/tests/libsvn_wc/checkout-test.c (1.30, milestone-1):

	* checkout-test.c (main): Exit with an error if apply_delta fails.  

2000-10-10 15:03   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/: include/svn_error.h (1.43), libsvn_ra_dav/session.c
	(1.7):

	* svn_error.h: Move RA-specific errors into SVN_ERR_RA_ namespace.  
	
	* session.c: Altered accordingly.  

2000-10-10 14:18   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/tests/libsvn_wc/.cvsignore (1.5, milestone-1):

	Add commit-test.  

2000-10-10 13:55   Greg Hudson &lt;ghudson@mit.edu&gt;

	* notes/svndiff (1.3, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1):

	Not only did I typo the header text in the example, I typo'd the 
	binary.  Fix.  

2000-10-10 11:09   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_wc/get_editor.c (1.91):

	* libsvn_wc/get_editor.c (add_or_replace_file): Everyone finds the 
	error-handling logic confusing here.  Relax it a bit, for
	readability.  (I hope this is actually correct...) 

2000-10-10 07:59   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_fs/delta.c (1.14), libsvn_repos/delta.c
	(1.14), tests/libsvn_fs/Makefile.am (1.2) (utags:
	jimb_pre_transaction):

	* delta.c 
	  (svn_fs_file_delta): remove SVN_ERR() macro from the svn_txdelta 
	                       call. svn_txdelta is now a void function.  
	  (delta_files): compile fix: renamed stream variable to
	  delta_stream 
	
	* Makefile.am: add libsvn_subr to pick up the svn_pool_create needed
	  for libsvn_tests_main 

2000-10-10 07:43   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.23, milestone-1):

	The automake line generates Makefile.in from Makefile.am. However, 
	Makefile.in is also dependent upon aclocal.m4 which was being
	generated *after* the Makefile.in. Thus, the first thing a "make"
	would do is regenerate the Makefile.in.  
	
	Moving the automake pass *after* the aclocal.m4 regeneration should
	avoid this senseless rebuild.  

2000-10-10 07:28   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/svn-macros.m4 (1.3, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1):

	previous attempt at eliminating no-recursion and no-create was
	bogus.  one more try using the standard ac_configure_args variable 

2000-10-10 07:27   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/berkeley-db.m4 (1.3):

	add the default install location for the DB distro to our search
	path 

2000-10-10 06:36   Greg Stein &lt;gstein@lyra.org&gt;

	* notes/svndiff (1.2):

	typo 

2000-10-10 06:34   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.4), mod_dav_svn.c (1.7),
	repos.c (1.6):

	* dav_svn.h: document "special URI" concept 
	  add declaration of dav_svn_get_special_uri() 
	
	* mod_dav_svn.c: add special URI concept: a new command
	  (SVNSpecialURI), a new command handling function, config record
	  merging, and an accessor function (with a default).  
	
	* repos.c: resolve the type of the resource based on the URI. add
	  some framework for futher resolution/parsing of the URI in a
	  type-specific manner.  

2000-10-10 06:30   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/liveprops.c (1.3, milestone-1):

	don't duplicate mod_dav_fs's property set. we don't define our own
	for right now, but at least change the URL to act as a guide in the
	future 

2000-10-10 06:29   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/svn-macros.m4 (1.2):

	some of the automake magic rules would include these switches when 
	re-running configure. They would then (erroneously) show up in the 
	config.nice file... bad juju.  
	
	Assume the user will never use them and just elide them.  

2000-10-10 06:27   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.22):

	Try and preserve the timestamp on aclocal.m4 to prevent excessive
	churning from the top-level Makefile.  
	
	[ Every time autogen.sh was run, it would smack that timestamp,
	  which caused the top-level Makefile to rebuild Makefile.in,
	  Makefile, and configure. It would then run ./configure(!)  ] 

2000-10-10 05:52   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.21):

	update the required version of Neon 

2000-10-10 04:10   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.5):

	*) (dav_svn_get_resource): initial work on parsing the incoming URI
	   into useful values.  
	
	*) (dav_svn_open_stream, dav_svn_read_stream): do some fake stream
	   stuff to return some content 
	
	*) (dav_svn_set_headers): this erroneously used some standard
	   functions for setting Last-Modified and Etag which are based on
	   filesystem stuff. That isn't true for us, so #if out the
	Last-Modified and use our ETag 

2000-10-10 03:30   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/libsvn_delta/svndiff-test.c (1.3):

	Produce svndiff output.  This should give people a way to create
	some svndiff output to stuff into the test XML deltas.  

2000-10-10 03:23   Greg Hudson &lt;ghudson@mit.edu&gt;

	* notes/svndiff (1.1):

	Document the svndiff format as clearly as I can at the moment.  

2000-10-10 02:41   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_delta.h (1.117, milestone-1):

	Note new requirement on the use of the svn_txdelta_new operation. 
	If this requirement ever becomes onerous, it can be relaxed with
	some simple mods to svndiff.c's window_handler, but it seemed silly
	to make that function go to extra work when text delta producers
	conform to this requirement already.  

2000-10-10 02:27   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.116),
	libsvn_delta/Makefile.am (1.13, milestone-1), libsvn_delta/delta.h
	(1.37), libsvn_delta/svndiff.c (1.4), libsvn_delta/text_delta.c
	(1.15), libsvn_delta/vcdiff_parse.c (1.19),
	libsvn_delta/xml_output.c (1.9), libsvn_delta/xml_parse.c (1.122),
	libsvn_wc/adm_crawler.c (1.27), libsvn_wc/get_editor.c (1.90),
	tests/libsvn_delta/random-test.c (1.9, milestone-1),
	tests/libsvn_delta/svndiff-test.c (1.2):

	Hook up svndiff generator/parser.  Make a few adjustments along the 
	way.  I think all the relevant code works but the testing deltas
	need to contain real svndiff data now.  Hopefully this will settle
	out before the new Milestone 1 target.  
	
	(svn_txdelta, svn_txdelta_apply, svn_txdelta_to_svndiff, 
	svn_txdelta_parse_svndiff): These functions cannot fail; don't
	return an error.  Call sites changed.  
	(svn_vcdiff_parser_t, svn_make_vcdiff_parser, svn_vcdiff_parse, 
	svn_vcdiff__send_window, svn_vcdiff__send_terminal_window): Garbage 
	collect stub vcdiff parsing functions.  
	(svn_txdelta): Turn the call to vdelta back on so we get optimized 
	text delta windows instead of faked up ones.  
	* delta.h (svn_xml__digger_t): Switch over fields for svndiff 
	interfaces.  
	* xml_parse.c (do_close_file, do_begin_textdelta, xml_handle_end, 
	xml_handle_data, svn_delta_make_parser): Use svndiff interfaces.  
	* xml_output.c (output_svndiff_data, apply_delta): Use svndiff 
	interfaces.  
	* svndiff.c (svn_txdelta_to_svndiff, window_handler): Don't write 
	header until we get the first call to window_handler.  The caller
	may not be ready to write at svn_txdelta_to_svndiff time.  

2000-10-10 00:13   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.36):

	tell Neon that we will be using a libtool version of libexpat.  

2000-10-09 22:56   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/: delta.h (1.36), text_delta.c (1.14),
	vdelta.c (1.3):

	I noticed a few issues with our vdelta generator: (1) if the source
	or target of a copy straddled the boundary, we didn't really take
	that into account when comparing to other possible copies, and (2) I
	don't think we were always picking the longest extension when trying
	to improve the current match.  I reorganized and simplified the code
	a bit to eliminate these problems, and made a few changes to the
	surrounding interfaces in the process.  These fixes have only
	marginal impact on performance, unfortunately; we are performing
	about a factor of 35 worse than what Phong Vo gets with his
	implementation.  
	
	(svn_txdelta__init_window): Removed.  
	(svn_txdelta_make_window): New function, returns window (can't
	fail), takes pool argument intead of stream argument.  Callers
	changed.  
	(svn_txdelta__insert_op, svn_txdelta__vdelta): These functions can't
	fail; return void.  Callers changed.  
	* vdelta.c (vdelta): New function, lives under svn_txdelta__vdelta, 
	performs core algorithm.  svn_txdelta__vdelta runs it twice, once on
	the source region and once on the target region.  Also simplified
	and fixed up a bit from the old code.  

2000-10-09 22:34   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/svndiff.c (1.3):

	(window_handler, decode_instruction, write_handler): Encode the
	length in a simpler and, based on testing, marginally more efficient
	format.  If the length is 63 or less, stuff it in the lower six
	bytes; otherwise encode it in the next bytes.  Also, don't encode an
	offset for insertions from the new text; make that implicit based on
	the length and previous insertions.  
	(encode_int, decode_int): Remove bits_in_first_byte parameter.  
	Callers changed.  
	(window_compare): Was only here by accident, remove.  

2000-10-09 19:28   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_error.h (1.42), libsvn_delta/svndiff.c
	(1.2), libsvn_delta/text_delta.c (1.13),
	libsvn_delta/vcdiff_parse.c (1.18), libsvn_delta/xml_output.c
	(1.8), libsvn_delta/xml_parse.c (1.121), libsvn_fs/dir.c (1.3),
	libsvn_fs/err.c (1.8, jimb_pre_transaction), libsvn_fs/err.h (1.5,
	jimb_pre_transaction), libsvn_fs/fs.c (1.12), libsvn_fs/node.c
	(1.4), libsvn_fs/version.c (1.3),
	tests/libsvn_delta/deltaparse-test.c (1.51),
	tests/libsvn_delta/random-test.c (1.8),
	tests/libsvn_delta/xml-output-test.c (1.4, milestone-1),
	libsvn_subr/svn_error.c (1.40), libsvn_subr/svn_parse.c (1.39),
	libsvn_subr/xml.c (1.26), tests/libsvn_subr/Makefile.am (1.8),
	libsvn_wc/get_editor.c (1.89), tests/Makefile.am (1.5),
	tests/svn_tests_main.c (1.11, milestone-1),
	tests/libsvn_wc/checkout-test.c (1.29),
	tests/libsvn_wc/commit-test.c (1.3):

	* svn_error.[ch]: (svn_pool_create) remove the abort function
	  parameter and always use a function that calls abort(). If we ever
	  need/want different behavior, then we can handle that case
	  separately.  [ updated all callers ] 
	
	  (abort_on_pool_failure): renamed from default_abort.  
	  (svn_handle_error): changed call from default_abort(1) to a simple
	  abort() 
	
	* fs/err.[ch]: (svn_fs__pool_abort) removed 
	
	* svn_tests_main: (main) use svn_pool_create() to get the correct
	  abort and error pool behavior.  
	
	* .../Makefile.am: add libsvn_subr.la into some link lines. adjust
	  the order of some to get the linking correct. This was due to the
	  (introduced) dependency of svn_tests_main on
	libsvn_subr::svn_pool_create() 

2000-10-09 16:58   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/fs.c (1.11):

	Doc fix.  

2000-10-09 16:38   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: libsvn_fs/delta.c (1.13), libsvn_repos/delta.c
	(1.13):

	* libsvn_fs/delta.c (svn_fs_file_delta): Implement.  
	(send_text_delta): Take an svn_txdelta_stream_t as an argument, 
	instead of taking two read functions and computing the delta
	ourselves.  
	(delta_files, file_from_scratch): Call svn_fs_file_delta, and pass
	the delta to send_text_delta.  

2000-10-09 15:20   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dbt.c (1.3):

	subversion/libsvn_fs/dbt.c (svn_fs__track_dbt): Pass
	apr_null_cleanup as the exec cleanup function, not zero.  

2000-10-09 11:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.18), libsvn_fs/delta.c (1.12),
	libsvn_fs/fs.c (1.10), libsvn_fs/node.c (1.3), libsvn_repos/delta.c
	(1.12):

	Don't encourage baroque usage of pools.  
	* include/svn_fs.h (svn_fs_subpool, svn_fs_node_subpool): Delete
	declarations.  
	* libsvn_fs/fs.c (svn_fs_subpool): Delete.  
	* libsvn_fs/node.c (svn_fs_node_subpool): Delete.  
	
	* include/svn_fs.h (svn_fs_run_cleanup_node): New function, for 
	symmetry with apr_run_cleanup.  
	* libsvn_fs/node.c (svn_fs_run_cleanup_node): Define it.  
	* libsvn_fs/delta.c (replace_from_scratch, replace_related): Use 
	svn_fs_run_cleanup_node instead of paired calls to close the node
	and remove the cleanup.  
	
	* libsvn_fs/node.c (cache_node): Remove sanity check about caching 
	nodes with their own pools.  All that stuff has changed, and that
	rule is no longer relevant.  
	
	* libsvn_fs/node.c (cache_node): Use apr_null_cleanup for the exec 
	cleanup, not zero; the latter is an error.  
	* libsvn_fs/node.c (svn_fs_cleanup_node): Same.  
	
	* libsvn_fs/node.c (close_node): Doc fixes.  
	
	* libsvn_fs/node.c (svn_fs__open_node_by_id): Clarify logic.  

2000-10-09 01:56   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.115),
	libsvn_delta/Makefile.am (1.12), libsvn_delta/svndiff.c (1.1),
	tests/libsvn_delta/.cvsignore (1.8, milestone-1),
	tests/libsvn_delta/Makefile.am (1.9),
	tests/libsvn_delta/random-test.c (1.7),
	tests/libsvn_delta/svndiff-test.c (1.1):

	Add code to encode and decode text deltas in a custom format called 
	svndiff.  (For now, documentation is available at 
	http://subversion.tigris.org/subversion-dev/current/msg00864.html. 
	I'll include something in the tree when things settle.)  It is
	unclear whether svndiff is compact enough for our needs, but it
	gives us something to play with.  Nothing uses this code yet except
	the test programs.  
	
	(svn_txdelta_to_vcdiff): gc this declaration (there's no
	implementation).  
	(svn_txdelta_to_svndiff, svn_txdelta_parse_svndiff): New functions
	to encode an decode a text delta.  
	* svndiff-test.c: New program, exercises encoding function and lets
	us get some performance data.  Not useful for the testing framework
	at the moment.  
	* random-test.c: Extend the pipeline to encode and decode the
	generated delta before applying it.  Does not add appreciably to
	execution time.  

2000-10-09 01:20   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_wc/get_editor.c (1.88):

	I didn't quite understand how svn errors work and had the first two 
	arguments to svn_error_create reversed.  Fix.  

2000-10-09 00:08   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/dir.c (1.2):

	Rearrange logic that closes directories after traversing them to
	work properly in the presence of symlinks, once we have them.  

2000-10-08 12:41   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_error.h (1.41), libsvn_wc/get_editor.c
	(1.87):

	(add_or_replace_file): Make an attempt at getting this right.  I
	think the sense of the error test was correct before rev 1.85, but
	the handling was wrong (we can't wrap an error which didn't happen),
	and the test in the replace case was also going to dereference a
	null pointer.  
	(SVN_ERR_WC_ENTRY_EXISTS): New error code for the case in question.  

2000-10-07 23:44   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_wc/get_editor.c (1.86):

	(make_editor): Allocate enough memory for the editor baton.  

2000-10-07 19:52   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_wc/get_editor.c (1.85):

	* get_editor.c (add_or_replace_file): Invert test to prevent NULL
	pointer dereference.  

2000-10-07 18:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.7):

	[no log message] 

2000-10-07 17:48   Joe Orton &lt;joe@light.plus.com&gt;

	* autogen.sh (1.20):

	* autogen.sh: Require a specific version of neon which is known to 
	work, since future releases may not be compatible.  

2000-10-07 17:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.84):

	(debug_dir_baton): removed.  This no longer stimulates the 
	string-corruption bug, unfortunately.  

2000-10-07 17:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_client/: apply_edits.c (1.1), client.h (1.1)
	(utags: milestone-1, milestone-1-beta):

	Oops, forgot to add these files in the last commit.  

2000-10-07 17:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.6, milestone-1),
	libsvn_client/Makefile.am (1.5), libsvn_client/add.c (1.3,
	milestone-1), libsvn_client/checkout.c (1.7, milestone-1),
	libsvn_client/delete.c (1.2), libsvn_client/update.c (1.3),
	libsvn_wc/get_editor.c (1.83) (utags: milestone-1-beta):

	(main): take a target version arg for `update' as well.  
	(delete): implement.  
	
	* apply_edits.c: new file, abstracts checkout and update.  
	(generic_read, apply_delta): moved to here from checkout.c.  
	(do_edits, svn_client__checkout_internal, 
	svn_client__update_internal): new funcs.  
	
	(svn_client_checkout): implement in terms of above.  
	(svn_client_update): same.  Also, take version arg.  
	
	* client.h: new file.  
	
	* svn-test.sh: added update test, commented out deletion tests for
	now.  

2000-10-07 16:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/: up1a-inline.xml (1.2), up1a-postfix.xml
	(1.2), up1b-inline.xml (1.3, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1), up1b-postfix.xml (1.3)
	(utags: milestone-1-beta):

	Don't include version numbers in replacements.  

2000-10-07 16:21   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_xml.h (1.23, milestone-1,
	milestone-1-beta), libsvn_subr/xml.c (1.25, milestone-1-beta),
	libsvn_delta/xml_output.c (1.7, milestone-1-beta),
	libsvn_wc/entries.c (1.44, milestone-1-beta),
	libsvn_wc/get_editor.c (1.82):

	Reorg XML tag interfaces.  Separate open from close tags, and allow
	open tags to have meaningful pcdata (meaning, no cosmetic newline). 
	Combine make and append functions.  
	
	(svn_xml_tag_type, svn_xml_append_tag, svn_xml_make_tag, 
	svn_xml_append_tag_v, svn_xml_make_tag_v, svn_xml_append_tag_hash, 
	svn_xml_make_tag_hash): Gone.  
	(svn_xml_escape_string, svn_xml_make_header): Like the new
	functions, take an svn_string_t ** argument and make a new string or
	append to an existing string depending on whether it points to NULL.
	Call sites changed.  
	(svn_xml_open_tag_style, svn_xml_make_open_tag,
	svn_xml_make_open_tag_v, svn_xml_make_open_tag_hash,
	svn_xml_make_close_tag): New functions and enum.  Call sites
	changed.  

2000-10-07 16:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.43), wc.h (1.56,
	milestone-1-beta):

	(SVN_WC__ENTRIES_TOPLEVEL): replaces SVN_WC__ENTRIES_END and 
	SVN_WC__ENTRIES_START, since it's the only non-self-closing tag in 
	the entries format.  All callers changed.  
	
	(handle_start_tag): if see toplevel, then this must be an open tag.  

2000-10-07 15:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/: up1b-inline.xml (1.2), up1b-postfix.xml
	(1.2):

	Do a deletion.  

2000-10-07 15:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_ops.c (1.19, milestone-1-beta):

	(svn_wc_delete_file): make sure deletion doesn't affect version 
	number, by passing SVN_INVALID_VERNUM.  
	
	Tweaked tests.  

2000-10-07 15:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/: co1-inline.xml (1.2, milestone-1-beta),
	co1-postfix.xml (1.2, milestone-1-beta), up1a-inline.xml (1.1),
	up1a-postfix.xml (1.1), up1b-inline.xml (1.1), up1b-postfix.xml
	(1.1):

	More test data, and added proper xml headers to some old test data.  

2000-10-07 14:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.40, milestone-1-beta),
	libsvn_wc/entries.c (1.42), libsvn_wc/get_editor.c (1.81),
	libsvn_wc/wc.h (1.55), tests/libsvn_wc/checkout-test.sh (1.8,
	milestone-1-beta), tests/README (1.4, milestone-1-beta):

	(add_or_replace_file): new func, abstracts common code from
	add_file() and replace_file().  
	(add_file, replace_file): implement in terms of above.  
	(SVN_ERR_WC_ENTRY_NOT_FOUND): new error code, often not fatal.  
	(do_entry): if entry should have been found but wasn't, return above 
	error.  
	(svn_wc__entry_merge): tolerate absence of entry when merging.  
	(svn_wc__entry_get): set hash to NULL if returning error, but never 
	set hash if reference is null already.  Doc fix.  
	
	Tweaked test scripts.  

2000-10-07 13:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/co1.txt (1.2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	Doc fix.  

2000-10-07 13:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/xml/: README (1.1, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta),
	co1-inline.xml (1.1), co1-postfix.xml (1.1), co1.txt (1.1):

	Shareable test data.  

2000-10-07 13:46   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_output.c (1.6):

	(get_to_elem): Doc fix, clarifying the handling of the root
	directory.  The code already appears to be correct.  

2000-10-07 13:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/proplist.c (1.3, jimb_pre_transaction,
	milestone-1-beta):

	#include &lt;string.h&gt;, for memset 

2000-10-07 13:34   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_output.c (1.5):

	Don't forget the &lt;delta-pkg&gt; element.  

2000-10-07 08:06   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/repos.c (1.4, milestone-1-beta):

	checkpoint some framework code 

2000-10-07 08:06   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/mod_dav_svn.c (1.6, milestone-1-beta):

	put a SVN/&lt;version&gt; into the Server: header in the HTTP response.
	this lets us know that mod_dav_svn has been loaded, and what version
	is present.  

2000-10-07 08:04   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/Makefile.am (1.5),
	subversion/mod_dav_svn/static/Makefile.in (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	subversion/mod_dav_svn/static/README (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	subversion/mod_dav_svn/static/config.m4 (1.1, milestone-1),
	ac-helpers/svn-apache.m4 (1.6, milestone-1) (utags:
	milestone-1-beta):

	Enable static build/install of mod_dav_svn. This allows mod_dav_svn
	to be built within the SVN tree, copied over to the Apache tree, and
	linked into the Apache executable.  
	
	Note: the determining factor is the --with-apache switch passed to 
	configure. SVN should also be configured to build static libraries.  

2000-10-07 06:02   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/: include/svn_error.h (1.39), libsvn_ra_dav/session.c
	(1.6, milestone-1-beta):

	* svn_error.h (SVN_ERR_RA_HOSTNAME_LOOKUP): New error.  
	
	* session.c (svn_ra_open): Return an error if hostname lookup fails.  

2000-10-07 05:55   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_ra_dav/session.c (1.5):

	* session.c (svn_ra_open): Fix default ports in repository URL.  

2000-10-07 03:48   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_client/commit.c (1.4, milestone-1-beta):

	[ after fixing a build bug in APR's new UUID support... ] 
	
	(svn_client_commit): use UUIDs for the unique commit IDs.  

2000-10-07 03:24   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.35):

	fix how we pass the expat-lite directory to the Neon subconfig (make
	it absolute before passing). this fixes some of the linking problems
	we've seen.  

2000-10-07 02:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.26, milestone-1-beta):

	Doh\! Because pathnames aren't local vars anymore, we have to
	telescope them    manually, instead of relying on plain C
	call-stacks.  

2000-10-07 01:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.25):

	Ahhh..  Finally got crawler working right.  Fixed small logic bugs.  

2000-10-07 00:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.6):

	notes 

2000-10-07 00:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.34):

	Oops, forgot to commit this: build subversion/client/tests/Makefile.  

2000-10-07 00:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.40, milestone-1-beta),
	adm_ops.c (1.18), get_editor.c (1.80), util.c (1.12, milestone-1,
	milestone-1-beta), wc.h (1.54):

	Revert previous change.  

2000-10-07 00:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.39), adm_ops.c (1.17),
	get_editor.c (1.79), util.c (1.11), wc.h (1.53):

	Changes to get the correct target dir behavior.  But this stimulates 
	the old alloc bug, which now becomes highest priority. :-)  This 
	change will be reverted in a moment, I just want to have it in the 
	repository: 
	
	(svn_wc__ensure_directory): just create the directory one level
	deep, but tolerate if it already exists.  Don't try to recursively
	make the path, that's not an expected behavior for most users.  
	(prep_directory): removed this func.  Callers now do it themselves.  
	(check_adm_exists): take repository arg, but don't actually use it
	yet.  All callers changed.  
	(svn_wc__ensure_adm): removed.  
	(svn_wc__ensure_wc): take require_new arg, do it all here.  

2000-10-07 00:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_wc/simple.delta (1.1, milestone-1-beta):

	A simple checkout delta to play with 

2000-10-06 23:47   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.17, milestone-1-beta),
	libsvn_fs/Makefile.am (1.6, jimb_pre_transaction,
	milestone-1-beta), libsvn_fs/TODO (1.2, milestone-1-beta),
	libsvn_fs/delta.c (1.11, milestone-1-beta), libsvn_fs/dir.c (1.1,
	milestone-1-beta), libsvn_fs/dir.h (1.1, milestone-1,
	jimb_pre_transaction, milestone-1-beta), libsvn_fs/file.c (1.1,
	jimb_pre_transaction, milestone-1-beta), libsvn_fs/file.h (1.1,
	milestone-1, jimb_pre_transaction, milestone-1-beta),
	libsvn_fs/fs.h (1.7, jimb_pre_transaction, milestone-1-beta),
	libsvn_fs/id.c (1.2, milestone-1-beta), libsvn_fs/node.c (1.2,
	milestone-1-beta), libsvn_fs/node.h (1.2, milestone-1-beta),
	libsvn_fs/proplist.c (1.2), libsvn_fs/proplist.h (1.2, milestone-1,
	jimb_pre_transaction, milestone-1-beta), libsvn_fs/version.c (1.2,
	milestone-1-beta), libsvn_repos/delta.c (1.11, milestone-1-beta):

	All filesystem read functions complete, but completely untested.  

2000-10-06 23:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.38):

	(svn_errno_t): New filesystem errors: SVN_ERR_FS_PATH_SYNTAX, 
	SVN_ERR_FS_NO_SUCH_VERSION, SVN_ERR_FS_NOT_FOUND, 
	SVN_ERR_FS_NOT_DIRECTORY.  

2000-10-06 23:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.41):

	(svn_wc__entry_merge): if deleting an added file, just remove the 
	entry altogether.  
	(do_entry): sync file if setting an entry or removing.  

2000-10-06 23:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.5),
	libsvn_client/Makefile.am (1.4), libsvn_client/delete.c (1.1),
	libsvn_wc/adm_crawler.c (1.24), libsvn_wc/adm_ops.c (1.16),
	libsvn_wc/entries.c (1.40), libsvn_wc/wc.h (1.52):

	(SVN_WC__ENTRIES_ATTR_ADD): replaces SVN_WC__ENTRIES_ATTR_NEW.  All
	callers changed.  
	(svn_client_delete): new func.  
	(svn_wc_delete_file): wrote.  
	
	* main.c: implement `delete' command with optional `--force' arg.  
	Not strictly speaking part of Milestone 1, but, in a deplorable lack 
	of focus, I couldn't help myself.  Stop me before I code again.  
	
	Partially implement correct add/delete interaction: 
	
	(do_entry): take allow_duplicates argument.  
	(svn_wc__entry_merge): make sure add and delete don't interfere with 
	each other, and that they cause a duplicate entry to be made.  
	(handle_start_tag): conditionally write out duplicates.  
	(svn_wc__entry_baton_t): new field allow_duplicates.  
	
	This is not quite right, however: deleting something that's marked
	as added should make the entry just go away, no fuss, no duplicates.  
	
	* svn-test.sh: test addition and deletion more.  

2000-10-06 22:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.30, milestone-1-beta),
	libsvn_client/add.c (1.2), libsvn_wc/adm_ops.c (1.15):

	Implemented svn add: 
	
	(parse_options): don't require an xml file for adds, duh.  
	(svn_client_add): wrote.  
	(svn_wc_add_file): new func, replaces svn_wc_add.  There will be a 
	separate function for directories, when directory adding is 
	supported.  Wrote.  
	(svn_wc_delete_file): new func prototype, replaces svn_wc_delete.  
	There will be a separate function for directories, when directory 
	deletion is supported.  Still skeletal.  
	(svn_wc_rename, svn_wc_copy): add pool arg.  
	
	* svn-test.sh: test adding.  

2000-10-06 22:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_client/commit.c (1.3):

	(generic_write): new func.  
	(svn_client_commit): filled in.  Not fully working, due to library
	problems.  However, this part of the code is done, in theory anyway.  

2000-10-06 20:41   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.3, milestone-1-beta),
	deadprops.c (1.2, milestone-1, milestone-1-beta), liveprops.c (1.2,
	milestone-1-beta), mod_dav_svn.c (1.5), repos.c (1.3), version.c
	(1.2, milestone-1, milestone-1-beta):

	update to the latest provider registration mechanism in Apache
	  2.0a7-dev 
	- a block of hooks is now used, rather than multiple hooks 
	  - dav_register_provider() replaces dav_registory_provider() 
	  - create some blank/placeholder hook structures 

2000-10-06 20:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.39), get_editor.c (1.78):

	Fix the bug Ben reported, whereby child dirs don't get entries.  
	That was the old, insane behavior; the new, sane behavior is that 
	child dirs are recorded in the entries file.  
	
	(dir_baton): added name field.  
	(make_dir_baton): set it.  
	(add_directory): record the new dir in the parent's entries file.  
	(svn_wc__entry_merge): test for invalid vernum, not 0 vernum.  
	(write_entry): check entryname and version before writing.  

2000-10-06 20:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/: checkout-1.delta (1.13),
	checkout-2.delta (1.4) (utags: milestone-1-beta):

	Added test script to drive the client.  Removed ancestry information
	from XML files.  

2000-10-06 19:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.4), include/svn_delta.h
	(1.114, milestone-1-beta), libsvn_client/checkout.c (1.6),
	libsvn_delta/delta.h (1.35, milestone-1-beta),
	libsvn_delta/xml_parse.c (1.120, milestone-1-beta),
	tests/libsvn_delta/deltaparse-test.c (1.50, milestone-1-beta),
	libsvn_wc/get_editor.c (1.77), tests/libsvn_wc/checkout-test.c
	(1.28, milestone-1-beta):

	* checkout.c (svn_client_checkout): take ancestor_path and 
	ancestor_version args.  
	(apply_delta): take same args.  
	
	* log.c (start_handler): don't hardcode xml tagnames.  
	
	Fix up ancestry handling to be (inelegantly) consistent between true 
	delta streams and xml deltas.  This will probably have to be
	reworked later, but needs some think time.  Meanwhile: 
	
	* checkout.c (svn_delta_xml_auto_parse): pass ancestry after all.  
	
	* svn_delta.h: reverted change 1.113: 
	(svn_delta_make_xml_parser, svn_delta_xml_auto_parse): take
	base_path, base_version args after all -- it's the only way to set
	up ancestry, due to some silly lossage that will be corrected after
	m1.  
	
	* delta.h: reverted to 1.33: 
	(svn_xml__digger_t): restored base_path and base_version arguments.  
	
	* xml_parse.c: partially revert change 1.119: 
	(svn_delta_make_xml_parser): take base_path and base_version args 
	again, set them up in the digger (though I think this is not 
	necessary, Ben?) and the rootframe.  
	(svn_delta_xml_auto_parse): take base_path, base_version args again, 
	pass them along to svn_delta_make_xml_parser.  
	(xml_handle_start): use SVN_INVALID_VERNUM (this is unrelated to the 
	rest of this change).  
	
	* deltaparse-test.c (main): revert change 1.49.  
	
	* checkout-test.c (main): revert change 1.27.  

2000-10-06 17:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/adm_crawler.c (1.23), libsvn_wc/entries.c
	(1.38), tests/libsvn_wc/commit-test.c (1.2, milestone-1-beta):

	Saving work... Karl, take it away.  Crawler *seems* to work, but
	entries files  and timestamps don't work yet.  :) 

2000-10-06 16:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_client/checkout.c (1.5),
	libsvn_wc/get_editor.c (1.76):

	(svn_client_checkout): init file handle to null.  
	(debug_dir_baton): #ifdef out for now.  

2000-10-06 16:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/simple.delta (1.2,
	milestone-1-beta):

	add default ancestry to &lt;delta-pkg&gt; tag in this sample file.  

2000-10-06 16:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.37), log.c (1.22,
	milestone-1-beta):

	(get_entry_attributes): use hash correctly.  
	(set_entry): use svn_wc__entry_merge instead of svn_wc__entry_set.  

2000-10-06 16:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/index.html (1.14, milestone-1-beta):

	date fix 

2000-10-06 15:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.36):

	(svn_wc__entry_merge): handle version and kind correctly.  

2000-10-06 15:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/adm_files.c (1.38), libsvn_wc/entries.c
	(1.35), libsvn_wc/get_editor.c (1.75), libsvn_wc/wc.h (1.51),
	tests/libsvn_wc/checkout-test.c (1.27),
	tests/libsvn_wc/commit-test.c (1.1):

	Working on making the crawler work correctly.  Here are more
	bugfixes.  
	
	
	* commit-test.c: new test program 
	
	* wc.h (svn_wc__entries_init):  add ancestor_path argument 
	  (svn_wc__entry_merge):  new prototype 
	
	* entries.c (svn_wc__entries_init): add ancestor_path argument,
	  place it as an xml attribute in the parent-dir entry.  
	  (svn_wc__entry_merge): a NON-destructive version of entry_set, 
	  i.e. *get* the entry first, and *merge* any new changes into 
	  existing information before writing the entry out again.  
	
	* adm_files.c (init_adm):  pass ancestor_path to
	svn_wc__entries_init 
	
	* get_editor.c (free_dir_baton):  call svn_wc__entry_merge, not
	  _set, when bumping a directory version up.  
	
	* checkout-test.c (apply_delta): change call to 
	  svn_delta_xml_auto_parse, now that default ancestry is gone.  

2000-10-06 15:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/dbt.c (1.2, milestone-1-beta):

	#include &lt;string.h&gt;, for memset.  

2000-10-06 15:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.113), include/svn_error.h
	(1.37), libsvn_client/Makefile.am (1.3), libsvn_client/checkout.c
	(1.4), libsvn_delta/delta.h (1.34), libsvn_delta/xml_parse.c
	(1.119), tests/libsvn_delta/deltaparse-test.c (1.49),
	tests/libsvn_wc/checkout-1.delta (1.12),
	tests/libsvn_wc/checkout-2.delta (1.3):

	Making checkouts work, still some cleanup to be done: 
	
	(apply_delta, generic_read): helper funcs, lifted from 
	libsvn_wc/tests/checkout-test.c.  
	(svn_client_checkout): fill in.  
	
	Require a delta-pkg to have complete ancestry: 
	
	(svn_delta_make_xml_parser, svn_delta_xml_auto_parse): don't take 
	base_path or base_version ancestory args.  These will always be in
	the delta-pkg from now on.  Initialize rootframe's ancestry to
	blanks, and don't try to set any ancestry in the digger.  
	(svn_xml__digger_t): removed base_path and base_version fields.  
	(maybe_derive_ancestry): return error if unable to derive ancestry.  
	Don't take digger arg.  
	(do_stack_append): check return value of maybe_derive_ancestry.  
	
	(SVN_ERR_XML_MISSING_ANCESTRY): new error.  
	
	* checkout-1.delta, checkout-2.delta: have complete ancestry.  
	
	Also: 
	
	* Makefile.am: silly fixes.  

2000-10-06 14:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/adm_crawler.c (1.22), libsvn_wc/entries.c
	(1.34), libsvn_wc/questions.c (1.15, milestone-1-beta),
	tests/libsvn_wc/Makefile.am (1.9, milestone-1-beta):

	Working on making the crawler work correctly.  Here are some
	bugfixes (so far).  
	
	* adm_crawler.c (set_entry_flags): take a full path, not just an 
	  entryname 
	  (svn_wc_crawl_local_mods): duh, don't set edit_baton to NULL.  
	
	* entries.c (svn_wc__entry_get_ancestry):  if the "parent dir" entry 
	  has no default ancestry, return an error! 
	
	* questions.c (timestamps_equal_p): if the entry has no timestamp, 
	  return FALSE.  
	
	* commit-test.c:  new test program 
	
	* Makefile.am:  add rules for commit-test 

2000-10-06 13:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_client.h (1.3),
	libsvn_client/Makefile.am (1.2), libsvn_client/add.c (1.1),
	libsvn_client/checkout.c (1.3), libsvn_client/commit.c (1.2),
	libsvn_client/update.c (1.2):

	(svn_client_add): new func.  
	(svn_client_checkout, svn_client_update, svn_client_commit): print 
	args, for sanity.  
	
	* main.c (parse_command_options, parse_options, main): handle add
	command.  

2000-10-06 13:04   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.16), libsvn_fs/Makefile.am
	(1.5), libsvn_fs/convert-size.c (1.4, milestone-1,
	jimb_pre_transaction, milestone-1-beta), libsvn_fs/convert-size.h
	(1.2, milestone-1, jimb_pre_transaction, milestone-1-beta),
	libsvn_fs/dbt.c (1.1), libsvn_fs/dbt.h (1.1, milestone-1-beta),
	libsvn_fs/delta.c (1.10), libsvn_fs/err.c (1.7, milestone-1-beta),
	libsvn_fs/err.h (1.4, milestone-1-beta), libsvn_fs/fs.c (1.9,
	milestone-1-beta), libsvn_fs/fs.h (1.6), libsvn_fs/id.c (1.1),
	libsvn_fs/id.h (1.1, milestone-1-beta), libsvn_fs/node.c (1.1),
	libsvn_fs/node.h (1.1), libsvn_fs/proplist.c (1.1),
	libsvn_fs/proplist.h (1.1), libsvn_fs/skel.c (1.3,
	milestone-1-beta), libsvn_fs/skel.h (1.3, milestone-1,
	jimb_pre_transaction, milestone-1-beta), libsvn_fs/structure (1.6,
	milestone-1-beta), libsvn_fs/version.c (1.1), libsvn_fs/version.h
	(1.1, milestone-1-beta), libsvn_repos/delta.c (1.10),
	tests/libsvn_fs/skel-test.c (1.3, milestone-1-beta):

	* include/svn_fs.h: Miscellaneous changes throughout, as we figure
	out what form the filesystem should really have.  Biggest changes: 
	
	- Rework pool system.  Allocate all immutable nodes in the 
	filesystem's pool, and all mutable nodes in the transaction's pool, 
	but make it easy for people to register cleanup functions with their 
	own pools that close nodes.  Where we do let the user specify pools, 
	don't require them to be subpools of the filesystem; just make the 
	user responsible for freeing them before the filesystem is closed.  
	
	- Make the filesystem open / create functions Berkeley-DB specific.  
	This doesn't lose any real generality, and it means that we can add 
	functions to open / create other kinds of filesystems without losing 
	symmetry.  
	
	- Add new generic node type, svn_fs_node_t, which acts as a common 
	superclass for both files and directories.  This allows us to
	declare functions that operate on any kind of node, instead of
	having to write out separate functions for files and directories. 
	For example, we've combined `open_file' and `open_dir' into
	`open_node'.  
	
	- When adding and replacing files and directories, use immutable
	node objects to specify the base version, not filenames and version
	numbers.  
	
	* libsvn_fs: Much work throughout.  

2000-10-06 12:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.48):

	(my_vcdiff_windoweater):  check for NULL window, signifying end of
	textdelta 

2000-10-06 12:48   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/TODO (1.1):

	[no log message] 

2000-10-06 12:15   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/text_delta.c (1.12, milestone-1-beta):

	(svn_txdelta_next_window): For now, only generate windows which we 
	know how to "encode".  

2000-10-06 11:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.21), entries.c (1.33),
	wc.h (1.50):

	Rewrite the working copy crawler completely.  (What is this, the
	third time around?  :) ) 
	
	The entry-looping interface was inverted;  the recursive crawler no 
	longer "pulls" the next entry from an entries file, but now calls an 
	xml parser which then "pushes" each entry at a callback.  This 
	callback decides what to do about the entry, and sometimes calls the 
	crawler again, thereby completing the recursive circle.  Phew! 
	
	* wc.h (svn_wc__entries_index, svn_wc__entries_start, 
	  svn_wc__entries_next): remove these declarations, we don't want
	  this interface for entry-looping anymore.  
	  (svn_wc__entry_baton_t, do_parse): declare in public, because both 
	  entries.c and adm_crawler.c both need to use it.cd 
	
	* entries.c (svn_wc__entry_baton_t):  just a struct now, the typedef 
	  is public.  
	  (do_parse):  no longer static, but public.  
	  (svn_wc__entry_baton_t): add new fields (i.e. func ptr) for
	  looping purposes.  
	  (handle_start_tag): handle "looping" as a special case: call
	  looper callback and return when done.q 
	
	* adm_crawler.c (entry_callback):  new callback containing most of
	  the old logic from process_subdirectory.  Called by expat whenever a 
	  new entry is found, and completes recursion by calling 
	  process_subdirectory.  
	  (svn_wc__crawler_baton_t):  new beast, encapsulating all info ever 
	  needed in a call to either process_subdirectory or entry_callback.  
	  (do_dir_replaces):  take a crawler_baton now, instead of lots of 
	  args.  
	  (struct stack_object, remove_stack, append_stack): move filehash 
	  into crawler baton instead.  
	  (process_subdirectory) very gutted;  guts moved to entry_callback.  

2000-10-06 04:08   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.9, milestone-1),
	libsvn_ra_dav/fetch.c (1.14) (utags: milestone-1-beta):

	* svn_ra.h (svn_ra_checkout): don't take a dir_baton any more 
	
	* fetch.c: use editor's replace_root function; call the textdelta
	           handler with a NULL arg to close the file 
	
	* ra-dav-test.c: call the close_edit function; flesh out a bit with
	                 some comments/questions; don't worry about a dir_baton 

2000-10-06 03:19   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* ac-helpers/svn-apache.m4 (1.5):

	svn-apache.m4: as Greg Stein suggested, the check for a configured
	apache 2 now uses test -r.  PR: Obtained from: Submitted by: 
	Reviewed by: 

2000-10-06 00:50   Daniel Stenberg &lt;daniel@haxx.se&gt;

	* ac-helpers/svn-apache.m4 (1.4):

	* svn-apache.m4: after the apache check has found an apache 2
	directory, it now checks for the presense of apr.h to make sure that
	the apache installation has been configured. If apr.h isn't found, a
	warning message is produced. This may instead switch off the "apache
	present" variables.  PR: Obtained from: Submitted by: Reviewed by: 

2000-10-05 23:04   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.36):

	(svn_errno_t): Two new error codes: SVN_ERR_FS_NOT_OPEN and 
	SVN_ERR_FS_CORRUPT.  

2000-10-05 21:31   Greg Hudson &lt;ghudson@mit.edu&gt;

	* TASKS (1.13, milestone-1):

	The XML delta generator is done.  

2000-10-05 20:49   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.5):

	Remove description of directory entry property lists.  
	
	Describe the syntax of versions.  

2000-10-05 19:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.33), subversion/Makefile.am (1.14,
	milestone-1-beta), subversion/include/svn_client.h (1.2),
	subversion/include/svn_error.h (1.35),
	subversion/libsvn_client/checkout.c (1.2),
	subversion/tests/libsvn_delta/deltaparse-test.c (1.47),
	subversion/libsvn_subr/svn_error.c (1.39, milestone-1-beta),
	subversion/tests/libsvn_wc/checkout-test.c (1.26):

	Start basic command line client; 
	
	* client/Makefile.am: new file.  
	* client/main.c: new file.  
	* client/README: new file.  
	
	* libsvn_client/checkout.c (svn_client_checkout): ping the universe.  
	
	* configure.in (AC_OUTPUT): do client.  
	
	* svn_error.h, svn_error.c (svn_handle_error): added `fatal' flag.  
	All callers changed.  

2000-10-05 17:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.22), libsvn_subr/xml.c (1.24),
	libsvn_wc/entries.c (1.32), libsvn_wc/get_editor.c (1.74),
	libsvn_wc/log.c (1.21):

	Adjust for Greg Hudson's change of 2000-10-05 16:35, as promised: 
	
	* entries.c, get_editor.c: use svn_xml_make_tag() and friends 
	everywhere.  
	
	* log.c: note a future improvement.  
	
	* xml.c, svn_xml.h (svn_xml_write_tag_hash, svn_xml_write_tag, 
	svn_xml_write_header): removed.  
	(svn_xml_tag_type): doc fix.  

2000-10-05 16:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.32), subversion/Makefile.am (1.13),
	subversion/include/svn_client.h (1.1),
	subversion/libsvn_client/.cvsignore (1.1, milestone-1,
	milestone-1-beta), subversion/libsvn_client/Makefile.am (1.1),
	subversion/libsvn_client/checkout.c (1.1),
	subversion/libsvn_client/commit.c (1.1),
	subversion/libsvn_client/update.c (1.1):

	Skeleton of client library: 
	
	* include/svn_client.h: new file.  
	* libsvn_client/Makefile.am: new file.  
	* libsvn_client/checkout.c (svn_client_checkout): new file, new
	func.  
	* libsvn_client/update.c (svn_client_update): new file, new func.  
	* libsvn_client/commit.c (svn_client_commit): new file, new func.  
	
	* configure.in (AC_OUTPUT): do libsvn_client.  
	
	* Makefile.am (SUBDIRS): include libsvn_client.  
	(EXTRA_DIST): include some overlooked public header files, unrelated 
	to the rest of this change.  

2000-10-05 16:35   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_xml.h (1.21), libsvn_delta/xml_output.c
	(1.4), libsvn_subr/xml.c (1.23):

	Rework svn_xml output interfaces so they work on strings rather than 
	sending output to files.  
	
	(svn_xml_write_header, svn_xml_write_tag, svn_xml_write_tag_v, 
	svn_xml_write_tag_hash): Deprecated.  write_tag_v is actually gone
	since it wasn't used.  Karl should get rid of these when he fixes up
	libsvn_wc to use the new functions.  
	(svn_xml_make_header, svn_xml_make_tag, svn_xml_make_tag_v, 
	svn_xml_make_tag_hash): New functions to create strings.  
	(svn_xml_append_tag, svn_xml_append_tag_v, svn_xml_append_tag_hash): 
	New functions to append to strings..  
	* xml_output.c: Use svn_xml functions instead of knowing about XML 
	syntax.  
	(svn_delta_get_xml_editor): Allocate sufficient memory.  

2000-10-05 16:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_ra.h (1.8), include/svn_wc.h (1.29),
	libsvn_ra_dav/commit.c (1.11, milestone-1-beta),
	libsvn_wc/adm_crawler.c (1.20), libsvn_wc/adm_ops.c (1.14),
	libsvn_wc/get_editor.c (1.73):

	On Ben's advice, reverse responsibility chain for updating a working 
	copy after a commit: 
	
	(svn_ra_get_commit_editor): new arg *new_version replaces args 
	close_commit_fn_t and close_commit_baton.  
	(commit_ctx_t): store a pointer to a version number, don't store 
	cleanup func and baton.  
	(commit_close_edit): just set the new version, by reference, instead 
	of invoking a cleanup function.  
	(close_commit_baton): removed.  
	(svn_wc_close_commit): public func replaces private close_commit,
	take args explicitly instead of via baton.  
	(svn_wc_crawl_local_mods): take new token arg, don't take 
	close_commit_fn_t and close_commit_baton args.  
	(svn_wc_close_commit_fn_t): removed this typedef.  

2000-10-05 15:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.31):

	(do_parse): doc fix.  

2000-10-05 13:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.30):

	Ooops, let's change the entire entry-looper interface.  Reverting
	from 1.29     back to 1.28.  

2000-10-05 12:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.29), wc.h (1.49):

	Implement routines to "loop" over an administrative `entries' file.  
	The interface is extremely similar to apr's hash-looping.  :) 
	
	* wc.h (svn_wc__entries_index_t): defined.  
	
	* entries.c (svn_wc__entry_baton_t): two new fields (count and 
	nth_item) for looping over entries file, looking for Nth item.  
	
	(handle_start_tag):  handle looping as an independent case from the 
	normal "tag matching" logic.  When we find the Nth item, return the 
	entryname into baton (in addition to everything else).  
	
	(svn_wc__entry_get, svn_wc__entry_set, svn_wc__entry_remove):
	changed calls to do_entry() appropriately.  
	
	(do_entry): now takes **entryname_receiver arg (to return entryname
	to looper), and a boolean `looping' flag.  Sets up baton
	appropriately for looping.  
	
	(svn_wc__entries_start):  new routine to create a looper index 
	(svn_wc__entries_next):  new routine for looping 

2000-10-05 12:45   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: libsvn_delta/xml_output.c (1.3),
	tests/libsvn_delta/xml-output-test.c (1.3, milestone-1-beta):

	* xml_output.c (window_handler): Output the new data in a window, so
	that we can feed this routine fake deltas and have it spit out the
	contents of the file.  
	
	* xml-output-test.c: Feed a proper window to the window handler
	function.  

2000-10-05 12:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_ra.h (1.7), include/svn_wc.h (1.28),
	libsvn_ra_dav/commit.c (1.10), libsvn_wc/adm_crawler.c (1.19):

	Give the commit editor the ability to complete the commit: 
	
	(svn_wc_close_commit_fn_t): new typedefs.  
	(commit_baton): new struct.  
	(close_commit): new func, instance of svn_wc_close_commit_fn_t.  
	(svn_wc_crawl_local_mods): new args close_commit_fn and 
	close_commit_baton, set by reference.  
	
	* libsvn_ra_dav/commit.c (commit_ctx_t): new fields close_fn,
	close_baton.  
	(svn_ra_get_commit_editor): new args close_commit_fn, 
	close_commit_baton, new args close_commit_fn and close_commit_baton,
	return the corresponding addresses in the edit baton by reference.  
	(commit_close_edit): new func, still skeletal, but calls above
	closure function/baton to complete the commit.  
	(commit_editor): include commit_close_edit.  

2000-10-05 11:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.34):

	(svn_errno_t): new error SVN_ERR_WC_NOT_UP_TO_DATE.  

2000-10-05 10:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.112):

	trivial doc fix 

2000-10-05 01:23   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/libsvn_delta/xml-output-test.c (1.2):

	(main): editor should be a pointer to const data.  Changing
	properties on the root directory violates the DTD (possibly a bug in
	the DTD), although the output functions support it just fine. 
	Anyway, change properties on the subdir instead.  

2000-10-05 01:21   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_output.c (1.2):

	Fix some bugs noted by Bob Miller and some mistakes noted by myself.  
	(elem_prop_delta, elem_delta_pkg): Former renamed to latter; was a 
	braino.  
	(get_to_elem): text-delta-ref element should end with "/&gt;".  Close a 
	tree-delta if we are trying to get to a directory prop-delta.  Add
	an assertion to detect cases where get_to_elem doesn't get to where
	it should go.  
	(close_directory): Set eb-&gt;elem to appropriate value (previously we 
	left it at elem-dir).  Don't close a &lt;dir&gt; element for the root 
	directory, since we never opened one.  

2000-10-04 19:15   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.111), include/svn_xml.h
	(1.20), libsvn_delta/Makefile.am (1.11, milestone-1-beta),
	libsvn_delta/xml_output.c (1.1), tests/libsvn_delta/.cvsignore
	(1.7, milestone-1-beta), tests/libsvn_delta/Makefile.am (1.8,
	milestone-1-beta), libsvn_subr/xml.c (1.22),
	tests/libsvn_delta/xml-output-test.c (1.1):

	Implement the XML-outputting error.  It lives in libsvn_delta, not 
	libsvn_subr as Karl envisioned, because otherwise we'd get a
	circular depenency between libsvn_subr and libsvn_delta 
	
	* include/svn_delta.h, libsvn_delta/xml_output.c 
	(svn_delta_get_xml_editor): New function, returns an editor which
	outputs XML deltas.  
	
	* include/svn_xml.h, libsvn_subr/xml.c (svn_xml_escape_string):
	Rename escape_string and export for use by xml_output.c.  Also,
	clear out Karl's skeletal editor.  
	
	* libsvn_delta/tests/xml-output-test.c: A little program to exercise
	the XML output editor functions.  Not a real test program at the
	moment.  
	
	* libsvn_delta/Makefile.am, libsvn_delta/tests/Makefile.am, 
	libsvn_delta/tests/.cvsignore: Mention new files.  

2000-10-04 19:07   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/.cvsignore (1.5, milestone-1,
	milestone-1-beta):

	D'oh, wrong file.  Revert.  

2000-10-04 19:06   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: libsvn_delta/.cvsignore (1.4),
	tests/libsvn_delta/.cvsignore (1.6):

	We have an automated test (at least for the moment), so ignore 
	tests.log.  

2000-10-04 17:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.18), wc.h (1.48):

	Making the working copy crawler send postfix text-deltas.  
	Presumably, if the tree edit is rejected in mid-stream, one of the 
	editor functions will return an error to the crawler before it ever
	sends a single textdelta.  :) 
	
	* adm_crawler.c  (struct stack_object): add filehash 
	(append_stack):  new stack objects inherit filehash;  create case
	for initial stack creation (fixing OBO error).  
	(process_subdirectory):  no more calls to do_apply_textdelta; 
	instead, store file's full pathname and open file_baton in the 
	filehash 
	(do_postfix_text_deltas): new func to loop over the filehash and 
	send textdeltas to the open file_batons.  
	(svn_wc_crawl_local_mods): call do_postfix_text_deltas after crawler 
	returns.  
	
	
	* wc.h : add SVN_WC__ENTRIES_ATTR_DELETE 
	(svn_wc__entries_next) change prototype to `enum svn_node_kind' 

2000-10-04 17:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.118):

	Addendum to previous addendum: 
	
	(do_stack_append): appropriately increase eagerness to invalidate 
	propdeltas.  

2000-10-04 16:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.33), xml_parse.c (1.117):

	Addendum to previous commit: 
	
	(svn_propdelta_t): removed svn_propdelta_dirent from kind enum.  
	(do_begin_propdelta): removed svn_delta__XML_add and 
	svn_delta__XML_replace cases, which are only for dirent propdeltas.  
	
	[Ben, please bean me if this is wrong.] 

2000-10-04 16:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.110), include/svn_fs.h
	(1.15), libsvn_delta/xml_parse.c (1.116),
	tests/libsvn_delta/deltaparse-test.c (1.46), libsvn_fs/delta.c
	(1.9), libsvn_repos/delta.c (1.9), libsvn_ra_dav/commit.c (1.9),
	libsvn_ra_dav/fetch.c (1.13), libsvn_subr/xml.c (1.21),
	libsvn_wc/get_editor.c (1.72):

	Remove support for dirent properties: 
	
	* svn_delta.h (svn_delta_edit_fns_t): removed change_dirent_prop 
	callback.  
	
	* deltaparse_test.c (test_change_dirent_prop): removed.  
	(main): don't initialize it in editor.  
	
	* xml_parse.c (do_prop_delta_callback): don't handle 
	svn_propdelta_dirent case.  
	
	* svn_fs.h: doc fixes.  
	(svn_fs_change_dirent_prop): removed prototype.  
	
	* delta.c (change_dirent_plist): removed.  
	(delta_dirent_props): removed.  
	(delta_dirs): don't call delta_dirent_props.  
	
	* commit.c (commit_change_dirent_prop): removed.  
	
	* get_editor.c (change_dirent_prop): removed.  
	
	* fetch.c (update_change_dirent_prop): removed.  

2000-10-04 16:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.33):

	(SVN_ERR): New macro.  

2000-10-04 16:15   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.32):

	Doc fix.  

2000-10-04 16:06   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.4):

	Doc fix.  

2000-10-04 15:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.13, milestone-1-beta),
	libsvn_delta/xml_parse.c (1.115),
	tests/libsvn_delta/deltaparse-test.c (1.45), libsvn_fs/delta.c
	(1.8), libsvn_repos/delta.c (1.8), libsvn_subr/path.c (1.13,
	milestone-1-beta), libsvn_wc/adm_files.c (1.37),
	libsvn_wc/entries.c (1.28), libsvn_wc/get_editor.c (1.71),
	libsvn_wc/log.c (1.20), libsvn_wc/questions.c (1.14),
	libsvn_wc/util.c (1.10):

	(svn_path_style): new enum, values are svn_path_local_style,
	svn_path_repos_style, svn_path_url_style.  
	(SVN_PATH_LOCAL_STYLE, SVN_PATH_REPOS_STYLE, SVN_PATH_URL_STYLE): 
	these #defines removed in favor of above new enum.  
	
	Callers and callees changed.  
	
	(wc_split_path): this private func in the wc library became...  
	(svn_path_split): ...this new public func in the path library.  Now
	takes a style argument.  
	
	All callers changed.  
	
	(timestamps_equal_p): use svn_path_split.  

2000-10-04 15:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.70):

	(make_dir_baton): revert back to apr_pcalloc().  
	
	[Note to Greg H: totally a matter of personal taste how you do it in 
	code you're working on, but for code I "own" -- in the loose sense
	of ownership, of course -- I'd like to stick to the pcalloc way.  In
	this case, your change was not harmless, because d-&gt;prop_changed
	would now have a garbage value, instead of the zero I was counting
	on from pcalloc.  I know you don't favor this way of doing
	initialization, but I personally find it less distracting, and would
	like to use it where I'm working.  Thanks.  -K] 

2000-10-04 15:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.13):

	(timestamps_equal_p): finish by doing directory split 

2000-10-04 13:42   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: libsvn_delta/text_delta.c (1.11),
	libsvn_wc/get_editor.c (1.69):

	Revert a few unnecessary pallocs.  

2000-10-04 13:08   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.12):

	(svn_wc__file_modified_p): move apr_stat calls into 
	filesizes_equal_p.  Also only call this routine if textbase exists.
	:) 
	
	(filesizes_equal_p): change this routine's arguments appropriately, 
	given that it stats internally now.  
	
	(timestamps_equal_p): change interface, it only needs one filename
	and needs a pool.  Actually implement this routine using Karl's time
	API.  

2000-10-04 12:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.27):

	(do_entry): don't set receiver args if they're null, as promised.  

2000-10-04 12:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.36), entries.c (1.26):

	(svn_wc__entry_remove): implemented.  (struct entry_baton): new
	field `removing'.  
	(do_entry): new arg `removing'.  All callers changed.  Also, added
	some assertions.  
	(handle_start_tag): if removing, then simply don't write the entry 
	back out.  

2000-10-04 12:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.51, milestone-1,
	milestone-1-beta), entries.c (1.25):

	(write_entry): write kind as a string.  
	(get_entry_attributes): read kind as a string.  

2000-10-04 12:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.19), libsvn_subr/xml.c (1.20),
	libsvn_wc/adm_files.c (1.35), libsvn_wc/entries.c (1.24),
	libsvn_wc/get_editor.c (1.68), libsvn_wc/wc.h (1.47):

	In the working copy library: 
	
	Removed several obsolete "kff todo" comments.  
	
	(svn_wc__write_adm_item, v_write_adm_item): removed, this is handled 
	by our xml library now.  
	(close_file): use svn_xml_write_tag instead of
	svn_wc__write_adm_item.  
	
	Supporting changes in the xml library: 
	
	(svn_xml_tag_type): name for enum.  Removed extra underscores from 
	publicly-visible values: svn_xml_open_tag replaces
	svn_xml__open_tag, svn_xml_close_tag replaces svn_xml__close_tag,
	and svn_xml_self_close_tag replaces svn_xml__self_close_tag.  All
	callers changed.  
	(svn_xml_write_tag, svn_xml_write_tag_v, svn_xml_write_tag_hash):
	take enum type explicitly, instead of int.  

2000-10-04 11:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.17):

	(do_dir_replaces, process_subdirectory): add pool argument, and
	  start using svn_wc__get_ancestry everywhere we need it.  

2000-10-04 11:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/local_changes.c (1.10, milestone-1-beta):

	(timestamp_format): note possible portability issues in comment.  

2000-10-04 11:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_types.h (1.43, milestone-1-beta),
	libsvn_wc/entries.c (1.23), libsvn_wc/local_changes.c (1.9),
	libsvn_wc/log.c (1.19), libsvn_wc/wc.h (1.46):

	Make writing new entries work, including timestamps.  Theoretically, 
	make reading timestamps work too, but that code is untested (have at 
	it, Ben): 
	
	(svn_wc__entry_get, svn_wc__entry_set): use kind argument.  
	(do_entry): new arguments kind and kind_receiver.  
	(get_entry_attributes): handle kind as well as version, and deal
	gracefully with the absence of either.  
	(write_entry): new helper func.  
	(handle_end_tag, handle_start_tag): use write_entry.  
	(SVN_WC__ENTRIES_ATTR_KIND): replaces SVN_WC__ENTRIES_ATTR_TYPE.  
	(find_matching_string): new helper func for below.  
	(timestamp_format): new shared format string.  
	(svn_wc__time_to_string, svn_wc__string_to_time): new functions.  
	(set_entry): just use above to make the timestamp string now.  
	
	(svn_wc__ensure_directory): doc fix.  
	
	* svn_types.h (enum svn_node_kind): replaces enum node_kind, for 
	namespace safety.  Initialize at 1.  

2000-10-04 10:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: tests/libsvn_delta/foo.delta (1.8,
	milestone-1-beta), libsvn_wc/questions.c (1.11), libsvn_wc/wc.h
	(1.45):

	* wc.h (svn_wc__entry_set) doc fix.  
	
	* questions.c (svn_wc_file_modified_p): use apr_stat instead of 
	  apr_getfileinfo; no need to open files.  Move apr_open calls to 
	  contents_identical_p instead.  Also, rename some vars and give
	  more informative error messages using svn_create_errorf().  
	  (contents_identical_p): Open files internally, instead receiving 
	  previous opened ones.  
	  (timestamps_equal_p):  still waiting for karl's timestamps 
	  interface;  about to rewrite this.  
	
	* foo.delta:  put a &lt;delta-pkg&gt; tag around this so we can parse it 
	  again.  

2000-10-04 07:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/local_changes.c (1.8):

	(svn_wc__file_affected_time): rewrite according to Greg Stein's
	advice about apr_stat.  

2000-10-03 18:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.22), local_changes.c (1.7),
	log.c (1.18), wc.h (1.44):

	(svn_wc__file_affected_time): new func.  
	(set_entry): set a timestamp attribute.  
	(do_parse): note to self.  

2000-10-03 18:21   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.3):

	Ooh.  Content.  

2000-10-03 17:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.5):

	Removed some items, added others.  
	
	They're not always ordered, so I guess this file shouldn't really be 
	called "stack"... but then again, they all have to be done in order 
	for a given next big step to be taken, so it's a stack if you look
	at it with low enough resolution.  

2000-10-03 16:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/delta.h (1.32),
	libsvn_delta/vcdiff_parse.c (1.17, milestone-1-beta),
	libsvn_wc/get_editor.c (1.67), tests/libsvn_wc/checkout-test.c
	(1.25):

	Checkouts working again now: 
	
	(svn_vcdiff_parse): send a terminal window when done.  
	(window_handler): use file baton's pool, not window's, in places
	where window could be null.  
	(svn_vcdiff__send_terminal_window): new func.  
	(svn_vcdiff__send_window): new name for svn_vcdiff_send_window,
	since it is only shared within the library.  
	
	* checkout-test.c (main): use svn_wc_get_checkout_editor instead of 
	svn_wc_get_update_editor.  

2000-10-03 16:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/text_delta.c (1.10),
	libsvn_delta/vcdiff_parse.c (1.16), libsvn_delta/xml_parse.c
	(1.114), tests/libsvn_delta/deltaparse-test.c (1.44),
	libsvn_subr/svn_error.c (1.38), libsvn_wc/get_editor.c (1.66),
	libsvn_wc/log.c (1.17):

	Change some calls to apr_palloc() to apr_pcalloc() instead, to get 
	zeroed memory.  Did this mainly where a structure is being allocated 
	and it wasn't clear that all the structure's fields were being 
	initialized by the caller, and in a few other places.  Obviously,
	this can't break anything, but please feel free to revert in places
	where you know you don't need zeroed memory.  
	
	Did not change the NEW(P,T) and NEWARRAY(P,T,N) macros in fs.h, but 
	wonder if that might be a good idea...? 

2000-10-03 15:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/vcdiff_parse.c (1.15),
	libsvn_wc/get_editor.c (1.65):

	(window_handler): don't try to close source file if this is a 
	checkout.  
	(free_file_baton): don't destroy the pool for now, see comment
	there.  
	
	* vcdiff_parse.c (svn_vcdiff_send_window): set window-&gt;tview_len.  
	Use apr_pcalloc to allocate windows, not apr_palloc, because we want 
	all fields to be zeroed out by default.  

2000-10-03 14:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.64):

	(apply_textdelta): don't even try to open text base if this is a 
	checkout, otherwise, try to open it and error out if unable to open.  

2000-10-03 14:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.27):

	(svn_wc_get_checkout_editor): new prototype.  Forgot to commit this 
	file yesterday.  

2000-10-03 10:25   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_delta.h (1.109):

	Add a sixth restriction for the sake of XML deltas, this time on the 
	placement of change_dir_prop calls.  This is starting to feel like
	the Spanish Inquisition sketch.  ("Our four... no... amongst our 
	restrictions...") 

2000-10-03 00:06   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_wc/get_editor.c (1.63):

	Paired with part of Karl's last change, treat a nonexistent base
	file the same as an empty base file.  This ought to get checkouts
	working.  This is probably too relaxed for updates; if we're doing
	an update and the base file is missing, we should report an error or
	go fetch the version we expected.  But we can take care of that
	later.  
	
	(read_from_file): Treat a NULL file handle as if it were an empty 
	file.  

2000-10-02 19:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.34), entries.c (1.21),
	get_editor.c (1.62), wc.h (1.43):

	(struct edit_baton): added ancestor_path, is_checkout fields.  
	(make_editor): new helper func.  
	(svn_wc_get_update_editor): don't take repos arg anymore.  Doc fixes 
	reflecting that this is only for updates now.  
	(svn_wc_get_checkout_editor): new func, what you think it is.  
	(replace_root): prep target dir only if this is a checkout.  
	
	(SVN_WC__ADM_DELTA_HERE, SVN_WC__ADM_ANCESTOR): removed.  
	(init_adm): don't create delta-here and ancestor files anymore.  
	
	(svn_wc__entry_get): check for error.  Set hash table for return.  
	
	(apply_textdelta): beginning of changes to make this work when no
	text base is present, but will ask Greg Hudson about it.  

2000-10-02 19:25   Jim Blandy &lt;jimb@redhat.com&gt;

	* configure.in (1.31), subversion/include/svn_fs.h (1.14),
	subversion/libsvn_fs/Makefile.am (1.4),
	subversion/libsvn_fs/delta.c (1.7), subversion/libsvn_fs/fs.h
	(1.5), subversion/libsvn_repos/delta.c (1.7):

	* configure.in (AC_OUTPUT): Build
	subversion/libsvn_fs/tests/Makefile.  
	* subversion/libsvn_fs/Makefile.am (SUBDIRS): Mention `tests'.  
	
	* subversion/include/svn_fs.h (svn_fs_t): The underlying structure
	for this typedef is now named `struct svn_fs_t', not `struct
	svn_fs', for consistency.  
	* subversion/libsvn_fs/fs.h (struct svn_fs_t): Renamed from `struct
	svn_fs'.  
	
	* subversion/include/svn_fs.h: Doc fixes.  
	
	* subversion/libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Remove 
	delta.c; it's incomplete.  
	* subversion/libsvn_fs/delta.c: Reintroduce syntax errors; this code 
	isn't runnable anyway, and the syntax errors ensure that I won't 
	forget the parts that are incomplete.  Since this file isn't
	mentioned in the Makefile anyway, this shouldn't cause anyone
	problems.  

2000-10-02 19:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.2):

	Some more babbling.  I'll bring this up to date once things are
	working.  

2000-10-02 19:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/convert-size.c (1.3):

	Use an explicit cast to throw away `const' qualifier.  

2000-10-02 19:10   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.108):

	Doc tweak.  

2000-10-02 18:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.20), get_editor.c (1.61),
	wc.h (1.42):

	#include svn_types.h.  
	
	(svn_wc__entry_get_ancestry): renamed `svn_wc__get_entry_ancestry'
	for consistency with rest of interface.  Fill in definition.  

2000-10-02 18:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.50):

	Doc fixes.  

2000-10-02 18:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.41):

	(svn_wc__entry_get): further doc fix.  

2000-10-02 18:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/entries.c (1.19):

	Saving work (still compiles) ;-) In the middle of rewriting
	entry_get and entry_set.  

2000-10-02 18:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.42):

	(SVN_INVALID_VERNUM): new #define.  

2000-10-02 17:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.31):

	(svn_errno_t): new error SVN_ERR_WC_ENTRY_MISSING_ANCESTRY.  

2000-10-02 17:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.40):

	(svn_wc__entry_get): doc fix.  

2000-10-02 17:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/versions.c (1.17):

	renamed to entries.c 

2000-10-02 17:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.16):

	(process_subdirectory, do_dir_replaces): correct type for version
	args.  

2000-10-02 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.26), libsvn_wc/adm_crawler.c
	(1.15), libsvn_wc/wc.h (1.39):

	adm_crawler.c : doesn't work yet, but it *compiles*.  

2000-10-02 17:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.107),
	libsvn_delta/xml_parse.c (1.113),
	tests/libsvn_delta/deltaparse-test.c (1.43), libsvn_subr/xml.c
	(1.19), libsvn_wc/entries.c (1.18), libsvn_wc/get_editor.c (1.60),
	libsvn_wc/log.c (1.16), libsvn_wc/wc.h (1.38):

	* svn_delta.h (svn_delta_edit_fns_t): finally remove ancestry 
	arguments from replace_root, because the root's ancestry is never in 
	question.  This won't change again.  Really.  
	
	Below, deal with implications of this: 
	
	* xml.c (replace_root): don't take ancestor_path nor
	ancestor_version argument.  
	
	* xml_parse.c (svn_delta_make_xml_parser): don't pass ancestry args
	to editor-&gt;replace_root.  
	
	* deltaparse-test.c (struct edit_baton): hold a root_path field.  
	(main): set up the root_path in the edit baton.  
	(test_replace_root): remove ancestry arguments.  Get the root path 
	from the edit baton instead.  
	
	* get_editor.c (replace_root): removed ancestry arguments.  Derive
	ancestry from working copy instead.  
	
	Unrelated fixes: 
	
	* entries.c, wc.h (svn_wc__get_entry_ancestry): take a pool arg. 
	Doc fix.  Made skeleton definition.  
	
	* log.c (set_entry): call svn_wc__entry_set correctly.  

2000-10-02 16:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.17), get_editor.c (1.59),
	log.c (1.15), wc.h (1.37):

	wc.h (svn_wc__entry_set, svn_wc__entry_get, svn_wc__entry_remove): 
	changed prototypes and all callers in libsvn_wc 

2000-10-02 16:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.14), wc.h (1.36):

	* wc.h (svn_wc_get_entry_ancestry):  new prototype 
	
	* adm_crawler.c : finish writing, but it still depends on a bunch of 
	  things in entries.c that don't exist yet.  Therefore it doesn't
	  yet compile. :) 

2000-10-02 14:48   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/svn_tests_main.c (1.10, milestone-1-beta):

	#include &lt;string.h&gt;, since we're using strrchr.  
	(main): Strip off leading directories from the program name.  This 
	makes test output more readable, and makes it easier to compare test 
	logs from different builds.  
	
	* svn_test_main.c (do_test_num): Simplify code.  
	
	* svn_test_main.c (do_test_num): If the test function didn't set its 
	name, print something that points out the problem --- not garbage.  

2000-10-02 13:29   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_string.h (1.35, milestone-1-beta):

	* include/svn_string.h (svn_string_ensure): New public function.  
	* libsvn_string/svn_string.c (svn_string_ensure): Renamed from 
	`ensure_block_capacity'.  
	(svn_string_appendbytes): Use new name.  

2000-10-02 13:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/libsvn_fs/.cvsignore (1.2, milestone-1,
	jimb_pre_transaction, milestone-1-beta):

	Add skel-test executable.  

2000-10-02 00:12   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_delta.h (1.106):

	Tighten up the restrictions on text delta producers so that it is 
	actually possible to streamily generate XML deltas.  The producer
	will decide whether text deltas come inline or at the end (the
	consumer can't possibly make that decision without buffering all the
	text deltas); however, the consumer can now intuit whether a text
	delta will be coming at the end by the lack of a `close_file' call
	before the next directory operation.  
	
	I feel like our edit_fns interface now has "too much rope." 
	dir_batons are now redundant (there is only one allowable value for 
	the dir_baton argument for any call which takes one), and there is
	no explicit call made when a text delta is being deferred to the end
	of the call sequence.  In general, the tree structure of an editing 
	operation is enforced through documentation rather than through the 
	interface, and it doesn't have to be that way.  However, I don't
	feel comfortable unilaterally instituting a major design change at
	the moment, so for the moment I am just documenting the restrictions
	on the call sequence.  

2000-10-01 16:52   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/text_delta.c (1.9):

	(svn_txdelta_next_window): Improve our windowing algorithm
	performance by padding the source view with half a target view's
	worth of data on each side.  This change doesn't appreciably slow
	down delta generation in my tests, even though we're passing twice
	as much source data to the vdelta engine.  
	(svn_txdelta_stream_t, svn_txdelta): Add new fields sbuf and
	sbuf_len to stash source data in between calls to
	svn_txdelta_next_window.  

2000-10-01 14:55   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/vdelta.c (1.2, milestone-1-beta):

	(svn_txdelta__vdelta): When the destination of a copy straddles the 
	source/target boundary, we were failing to output an opcode for the 
	part of the copy which wrote target data.  Bug discovered using
	random input testing and an assertion in text_delta.c's
	apply_instructions() which compared the length of the regenerated
	output against tview_len.  

2000-10-01 14:52   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/libsvn_delta/Makefile.am (1.7):

	Incorporate the test framework boilerplate and put random-test in 
	SVN_TESTS.  

2000-10-01 14:49   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/libsvn_delta/random-test.c (1.6,
	milestone-1-beta):

	Use our own PRNG instead of rand(), just in case rand() works 
	differently on some platforms.  (The code we use is equivalent to 
	rand(), which means it isn't a very good PRNG but it's very
	concise.) Run the test 30 times by default (new -n option varies
	number of iterations), which takes about ten seconds on my
	relatively spiffy laptop.  Modify the output format to be consistent
	with the test framework's requirements.  

2000-10-01 13:56   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/xml_parse.c (1.112):

	Revert rev 1.110, which was committed as a compile fix because of
	rev 1.101 of svn_delta.h, which was reverted in rev 1.102.  Now this 
	library compiles again.  

2000-10-01 13:43   Greg Hudson &lt;ghudson@mit.edu&gt;

	* notes/txdelta_sanity (1.2, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	Update for interface changes.  

2000-10-01 12:45   Bob Miller &lt;kbob@jogger-egg.com&gt;

	* tools/cvs2svn/: CheckedClass.pm (1.2, milestone-2), README (1.2,
	milestone-2), cvs2svn.pl (1.2) (utags: milestone-1,
	milestone-1-beta, post-edit-baton-removal, pre-edit-baton-removal):

	Lots of cleanup and refactoring.  cvs2svn.pl now outputs a list of 
	which file revisions should be in which commit.  That list is not
	XML, just a text list.  
	
	Here's the comment in Commit::accepts_filerev.  
	
	    # This is the heuristic that determines whether a filerev 
	    # can be merged into a commit.  
	    # 
	    # The rules are: 
	    #	Author must match.  
	    #	Log message must match (and be nonempty).  
	    #	Time must be within DURATION seconds of another rev in the
	    commit.  #	File must not already be in commit.  
	
	Also see tools/cvs2svn/README.  
	
	tools/cvs2svn/README: updated.  
	
	tools/cvs2svn/tests/test1-create-repo.sh: minor changes to make it
		work when $CVSREAD is set.  
	
	tools/cvs2svn/CheckedClass.pm: (CheckedClass::check_new): now works
	if required args has undefined value.  
	(CheckedClass::merged_type_info): now detects where the same arg is
		listed as both required_arg and optional_arg.  
	
	tools/cvs2svn/cvs2svn.pl: (CvsTime::time_t): new routine Also,
	changed all "new ClassName" to "ClassName-&gt;new" since I'd been 
	inconsistent.  (CvsName::): new abstract base class (@CvsName::ISA):
	new.  CvsName ISA CheckedClass.  (CvsName::type_info, CvsName::name,
		CvsName::add_rev, CvsName::self_test): new methods.  (CvsAuthor::):
	now derived from CvsName:: (@CvsAuthor::ISA): Now CvsAuthor is
	derived from CheckedClass.  (CvsAuthor::type_info): deleted. 
	Replaced by CvsName::type_info.  (CvsAuthor::checked_in_rev):
	deleted.  Use CvsName::add_rev now.  (CvsAuthor::self_test): moved
	most of it to CvsName::self_test.  (CvsTag::): now derived from
	CvsName:: (@CvsTag::ISA): Now CvsTag is derived from CheckedClass.  
	(CvsTag::type_info): deleted.  Replaced by CvsName::type_info.  
	(CvsTag::tagged_rev): deleted.  Use CvsName::add_rev now.  
	(CvsTag::self_test): moved most of it to CvsName::self_test.  
	(CvsLog::): new class derived from CvsName::.  (@CvsLog::ISA): new. 
	CvsLog ISA CvsName.  (CvsLog::self_test): new method.  
	(CvsFileRev::type_info): LOG is now a required arg.  
	(CvsFileRev::get_file, CvsFileRev::get_author, CvsFileRev::get_time, 
		CvsFileRev::get_log): new methods.  (CvsFileRev::self_test): added
	tests for new methods.  (CvsDirEntry::path,
	CvsDirEntry::set_parent): new methods.  (CvsDirEntry::self_test):
	added tests for new methods.  (CvsFile::count_revs): renamed to
		CvsFile::count_filerevs.  Now calls $self-&gt;filerevs.  
	(CvsFile::filerevs): new method returns list of CvsFileRev's in
	file.  (CvsFile::self_test): much more thorough.  Had a lot of
		trouble getting filerevs and count_filerevs working.  
	(CvsDir::count_revs): renamed to CvsDir::count_filerevs.  
	(CvsDir::has_entry): new method.  (CvsDir::filerevs): new method
	returns list of CvsFileRev's in dir and subdirs.  
	(CvsDir::self_test): now tests new methods.  
	(CvsRepository::type_info): deleted member ALL_REVS_BY_TIME.  
	(CvsRepository::count_revs): renamed to
	CvsRepository::count_filerevs.  (CvsRepository::count_authors,
		CvsRepository::count_tags, CvsRepository::count_logs,
		CvsRepository::filerevs, CvsRepository::find_log): new methods.  
	(CvsRepository::self_test): added tests for new methods.  
	(CvsFileReader::read): now stores log messages as CvsLog objects 
		(hashed in the repository) instead of as strings.  Also, 
		correctly sets up back links from authors, tags and logs 
		to the filerevs that use them.  (CvsDirReader::type_info): added
	new member PARENT_DIR.  (CvsDirReader::read): changed call to 
	CvsDirReader::_read_path.  (CvsDirReader::_read_path): now handles
		the case where the same file is in the base directory and in the
		Attic by discarding the Attic file.  (Commit::): new class
	represents an SVN commit.  (@Commit::ISA): new.  Commit ISA
	CheckedClass.  (Commit::type_info, Commit::filerevs,
		Commit::accepts_filerev, Commit::add_filerev, Commit::self_test):
		new.  accepts_filerev is the interesting method; it has the
		heuristic for clumping individual filerevs into a commit.  
	(main::get_vm_size): new function.  Linux-only, it returns the
		process's virtual size in kilobytes.  Returns zero on other
	platforms.  (main::print_stats): now prints more stats: counts
		authors, tags, and log messages.  (main::build_commit_list): new
		function.  Takes a CvsRepository, returns a list of Commits in the
	order they should be applied.  
	(main): more bookkeeping, now sets stdout to unbuffered, now builds 
		and prints the commit list.  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2000-10-01 12:26   Bob Miller &lt;kbob@jogger-egg.com&gt;

	* tools/cvs2svn/tests/test1-create-repo.sh (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	Lots of cleanup and refactoring.  cvs2svn.pl now outputs a list of 
	which file revisions should be in which commit.  That list is not
	XML, just a text list.  
	
	Here's the comment in Commit::accepts_filerev.  
	
	    # This is the heuristic that determines whether a filerev 
	    # can be merged into a commit.  
	    # 
	    # The rules are: 
	    #	Author must match.  
	    #	Log message must match (and be nonempty).  
	    #	Time must be within DURATION seconds of another rev in the
	    commit.  #	File must not already be in commit.  
	
	Also see tools/cvs2svn/README.  
	
	tools/cvs2svn/README: updated.  
	
	Here's the blow by blow...  
	
	tools/cvs2svn/tests/test1-create-repo.sh: minor changes to make it
		work when $CVSREAD is set.  
	
	tools/cvs2svn/CheckedClass.pm: (CheckedClass::check_new): now works
	if required args has undefined value.  
	(CheckedClass::merged_type_info): now detects where the same arg is
		listed as both required_arg and optional_arg.  
	
	tools/cvs2svn/cvs2svn.pl: (CvsTime::time_t): new routine Also,
	changed all "new ClassName" to "ClassName-&gt;new" since I'd been 
	inconsistent.  (CvsName::): new abstract base class (@CvsName::ISA):
	new.  CvsName ISA CheckedClass.  (CvsName::type_info, CvsName::name,
		CvsName::add_rev, CvsName::self_test): new methods.  (CvsAuthor::):
	now derived from CvsName:: (@CvsAuthor::ISA): Now CvsAuthor is
	derived from CheckedClass.  (CvsAuthor::type_info): deleted. 
	Replaced by CvsName::type_info.  (CvsAuthor::checked_in_rev):
	deleted.  Use CvsName::add_rev now.  (CvsAuthor::self_test): moved
	most of it to CvsName::self_test.  (CvsTag::): now derived from
	CvsName:: (@CvsTag::ISA): Now CvsTag is derived from CheckedClass.  
	(CvsTag::type_info): deleted.  Replaced by CvsName::type_info.  
	(CvsTag::tagged_rev): deleted.  Use CvsName::add_rev now.  
	(CvsTag::self_test): moved most of it to CvsName::self_test.  
	(CvsLog::): new class derived from CvsName::.  (@CvsLog::ISA): new. 
	CvsLog ISA CvsName.  (CvsLog::self_test): new method.  
	(CvsFileRev::type_info): LOG is now a required arg.  
	(CvsFileRev::get_file, CvsFileRev::get_author, CvsFileRev::get_time, 
		CvsFileRev::get_log): new methods.  (CvsFileRev::self_test): added
	tests for new methods.  (CvsDirEntry::path,
	CvsDirEntry::set_parent): new methods.  (CvsDirEntry::self_test):
	added tests for new methods.  (CvsFile::count_revs): renamed to
		CvsFile::count_filerevs.  Now calls $self-&gt;filerevs.  
	(CvsFile::filerevs): new method returns list of CvsFileRev's in
	file.  (CvsFile::self_test): much more thorough.  Had a lot of
		trouble getting filerevs and count_filerevs working.  
	(CvsDir::count_revs): renamed to CvsDir::count_filerevs.  
	(CvsDir::has_entry): new method.  (CvsDir::filerevs): new method
	returns list of CvsFileRev's in dir and subdirs.  
	(CvsDir::self_test): now tests new methods.  
	(CvsRepository::type_info): deleted member ALL_REVS_BY_TIME.  
	(CvsRepository::count_revs): renamed to
	CvsRepository::count_filerevs.  (CvsRepository::count_authors,
		CvsRepository::count_tags, CvsRepository::count_logs,
		CvsRepository::filerevs, CvsRepository::find_log): new methods.  
	(CvsRepository::self_test): added tests for new methods.  
	(CvsFileReader::read): now stores log messages as CvsLog objects 
		(hashed in the repository) instead of as strings.  Also, 
		correctly sets up back links from authors, tags and logs 
		to the filerevs that use them.  (CvsDirReader::type_info): added
	new member PARENT_DIR.  (CvsDirReader::read): changed call to 
	CvsDirReader::_read_path.  (CvsDirReader::_read_path): now handles
		the case where the same file is in the base directory and in the
		Attic by discarding the Attic file.  (Commit::): new class
	represents an SVN commit.  (@Commit::ISA): new.  Commit ISA
	CheckedClass.  (Commit::type_info, Commit::filerevs,
		Commit::accepts_filerev, Commit::add_filerev, Commit::self_test):
		new.  accepts_filerev is the interesting method; it has the
		heuristic for clumping individual filerevs into a commit.  
	(main::get_vm_size): new function.  Linux-only, it returns the
		process's virtual size in kilobytes.  Returns zero on other
	platforms.  (main::print_stats): now prints more stats: counts
		authors, tags, and log messages.  (main::build_commit_list): new
		function.  Takes a CvsRepository, returns a list of Commits in the
	order they should be applied.  
	(main): more bookkeeping, now sets stdout to unbuffered, now builds 
		and prints the commit list.  

2000-09-30 13:36   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_delta.h (1.105):

	Er, whoops.  Should make sure things parse before checking them in.  

2000-09-30 13:34   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/svn_delta.h (1.104):

	Flip around svn_txdelta_to_vcdiff so that it can be used by an 
	edit_fns consumer.  Branko, apologies if this gets in the way of
	your work; I don't know whether you've considered the problem and
	flipped around the interface yet or not.  

2000-09-30 13:23   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.103),
	libsvn_delta/text_delta.c (1.8), libsvn_wc/get_editor.c (1.58),
	tests/libsvn_delta/random-test.c (1.5):

	Revise the text delta applicator interface.  Instead of inventing a
	new data type svn_txdelta_applicator_t and having three externally
	visible functions, have one function svn_txdelta_apply which passes
	back a window handler and baton.  
	
	(svn_txdelta_applicator_t, svn_txdelta_applicator_create, 
	svn_txdelta_apply_window, svn_txdelta_applicator_free): Old
	interface, garbage collected.  
	(svn_txdelta_apply): New function.  
	* random-test.c, get_editor.c: Adjust for new interface.  

2000-09-29 23:04   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/xml.c (1.18):

	escape_string() needs to work for attribute values as well as 
	character data, so quote "' in addition to &&lt;&gt;.  

2000-09-29 22:58   Greg Hudson &lt;ghudson@mit.edu&gt;

	* TASKS (1.12):

	Whoop, I renumbered task 5 to 3 but didn't fix the reference in 4.  

2000-09-29 22:43   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/xml.c (1.17):

	(escape_string): D'oh, got careless.  Clean up a bit.  

2000-09-29 22:21   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_subr/xml.c (1.16):

	(escape_string): Implement.  

2000-09-29 21:20   Greg Hudson &lt;ghudson@mit.edu&gt;

	* TASKS (1.11):

	The Berkeley DB stuff was done a while ago by jimb.  libsvn_wc now
	uses the delta code courtesy of sussman and myself.  

2000-09-29 19:13   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.13):

	(do_apply_textdelta): According to the comment in svn_delta.h about 
	svn_txdelta_window_handler_t, we have to call window_handler with a 
	NULL window argument after we're out of windows.  

2000-09-29 18:46   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_wc/get_editor.c (1.57):

	(apply_textdelta, window_handler): Rewrite to use 
	svn_txdelta_apply_window, so we can handle arbitrary text deltas
	now.  
	(handler_baton): New type of handler to encapsulate applicator
	state.  
	(read_from_file, write_to_file): Helper functions for applicator.  
	
	This change compiles cleanly and is fairly simple, but there is too 
	much churn in this library right now to test it.  

2000-09-29 18:19   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.102):

	(svn_delta_edit_fns_t): Revert accidental change to `replace_root' 
	prototype.  

2000-09-29 18:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: adm_crawler.c (1.12), wc.h (1.35):

	Complete rewrite of adm_crawler.c;  not yet functional, because it 
	depends on rewriting some other routines in entries.c.  
	
	Specifically, this checkin temporarily breaks the build of
	libsvn_wc.  As soon as we rewrite svn_wc__entry_get() to match the
	new declaration in wc.h, things will work again.  
	
	If you want a tree that builds right this second, try the tree as of 
	2000-09-27 16:00.  

2000-09-29 17:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/libsvn_fs/skel-test.c (1.2):

	Add tests for unparsing skeletons.  

2000-09-29 17:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/convert-size.c (1.2):

	(svn_fs__putsize): Don't forget to initialize i.  

2000-09-29 17:31   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/skel.h (1.2):

	Doc fix.  

2000-09-29 17:30   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/skel.c (1.2):

	(unparse): Don't forget the mandatory whitespace after an 
	implicit-length atom.  
	
	(unparse): Don't compute the list length; we never use it.  
	
	(unparse): Don't indent the opening paren --- the caller has done
	any necessary indentation.  
	
	(unparse): When we recurse to print list elements, don't ignore the 
	return value.  

2000-09-29 16:03   Bob Miller &lt;kbob@jogger-egg.com&gt;

	* subversion/: libsvn_fs/delta.c (1.6), libsvn_repos/delta.c (1.6):

	(svn_fs_dir_delta): removed extraneous args to
	editor-&gt;replace_root().  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2000-09-29 15:14   Bob Miller &lt;kbob@jogger-egg.com&gt;

	* tools/cvs2svn/: CheckedClass.pm (1.1), cvs2svn.pl (1.1),
	design-notes.txt (1.1, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta),
	tests/test1-create-repo.sh (1.1), tests/test1.sh (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	Initial checkin of cvs2svn.pl.  
	
	At this point, it reads a CVS repository and builds an internal data 
	structure, but doesn't output anything significant.  

2000-09-29 15:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.34):

	Yet another note for Ben (doh).  

2000-09-29 15:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.33):

	Another note for Ben.  

2000-09-29 15:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.32):

	Committing internal interface changes discussed with Ben on the 
	phone.  Ben, search for "Ben".  

2000-09-29 14:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* .cvsignore (1.4, milestone-1):

	Ignore *.orig, *.rej, TAGS.  

2000-09-28 19:08   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/: convert-size.c (1.1), convert-size.h
	(1.1), skel.c (1.1), skel.h (1.1):

	First cut at skeleton parsing code 

2000-09-28 19:07   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/libsvn_fs/.cvsignore (1.1):

	[no log message] 

2000-09-28 19:05   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/libsvn_fs/: Makefile.am (1.1, milestone-1-beta),
	run-fs-tests.sh (1.1, milestone-1, jimb_pre_transaction,
	milestone-1-beta), skel-test.c (1.1):

	some skeleton parsing tests 

2000-09-28 10:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_xml.h (1.18), libsvn_delta/xml_parse.c
	(1.111), libsvn_subr/xml.c (1.15):

	Fixing silly compile-o's 

2000-09-27 19:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/README (1.3):

	Doc fix.  

2000-09-27 16:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.101):

	Doc fixes.  

2000-09-27 16:33   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/tests/README (1.2):

	Doc fix.  

2000-09-27 16:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/xml.c (1.14):

	doc fix 

2000-09-27 16:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.10):

	Add xml outputter to task list.  

2000-09-27 16:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.17), libsvn_subr/xml.c (1.13):

	Skeleton of an xml output interface: 
	
	(svn_xml_get_editor): new public func.  
	
	(replace_root, delete, add_directory, replace_directory, 
	change_dir_prop, change_dirent_prop, close_directory, add_file, 
	replace_file, apply_textdelta, change_file_prop, close_file, 
	close_edit): new static funcs, comprising the editor.  
	
	(tree_editor): new struct, holding above.  

2000-09-27 15:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.49):

	Eliminate `delta-here' file -- we don't need it anymore.  

2000-09-27 15:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile.am (1.20, milestone-1-beta),
	README (1.48), adm_files.c (1.33), entries.c (1.16), get_editor.c
	(1.56), log.c (1.14), versions.c (1.16), wc.h (1.31):

	Use an `entries' file instead of `versions', now, because it will 
	record every directory entry.  This is a lot more conceptually 
	consistent, and (not coincidentally) makes implementing some things 
	easier.  
	
	* README: doc fixes.  
	* entries.c: new file, inherits versions.c's history.  
	* versions.c: removed.  
	* Makefile.am: adjust.  
	
	(svn_wc__entries_init): replaces svn_wc__versions_init.  
	(svn_wc__entry_set, svn_wc__entry_get, svn_wc__entry_remove):
	replace svn_wc__set_versions_entry, svn_wc__get_versions_entry, and 
	svn_wc__remove_versions_entry, respectively.  All callers changed.  
	(do_entry): replace do_versions_entry.  All callers changed.  
	
	(SVN_WC__ADM_ENTRIES): replaces SVN_WC__ADM_VERSIONS, all uses 
	changed.  
	
	(SVN_WC__ENTRIES_ATTR_NAME, SVN_WC__ENTRIES_ATTR_VERSION, 
	SVN_WC__ENTRIES_ATTR_TYPE, SVN_WC__ENTRIES_ATTR_TIMESTAMP, 
	SVN_WC__ENTRIES_ATTR_CHECKSUM, SVN_WC__ENTRIES_ATTR_NEW, 
	SVN_WC__ENTRIES_ATTR_ANCESTOR): new #defines, use them in place of 
	literals where appropriate.  
	
	(SVN_WC__LOG_SET_ENTRY): replaces SVN_WC__LOG_SET_VERSION.  All uses 
	changed.  
	
	(SVN_WC__ENTRIES_START, SVN_WC__ENTRIES_ENTRY, SVN_WC__ENTRIES_END): 
	replace SVN_WC__VERSIONS_START, SVN_WC__VERSIONS_ENTRY and 
	SVN_WC__VERSIONS_END, respectively.  All uses changed.  
	
	(svn_wc__write_adm_item, v_write_adm_item): replace 
	svn_wc__write_adm_entry, v_write_adm_entry.  All callers changed.  

2000-09-27 12:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.4):

	Added a buncha stuff to my stack.  

2000-09-27 12:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* autogen.sh (1.19):

	There's no need to copy the configure script and check for changes
	if there's no config.cache file.  Don't print an error message if 
	`configure' doesn't exist for us to copy.  Don't assume that `if' 
	implements `!'; use `||' instead.  

2000-09-26 17:53   Branko Cibej &lt;brane@xbc.nu&gt;

	* www/project_members.html (1.9, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	Added Joe Orton and Bob Miller to the project members list.  This
	list is now in sync with the AUTHORS file.  

2000-09-26 17:43   Branko Cibej &lt;brane@xbc.nu&gt;

	* www/project_members.html (1.8):

	Changed my mail address.  

2000-09-26 16:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.30), libsvn_subr/svn_error.c
	(1.37), libsvn_wc/get_editor.c (1.55),
	tests/libsvn_wc/checkout-test.sh (1.7):

	Take care of reference counting within baton constructors and 
	destructors, as much as possible: 
	
	(make_dir_baton, make_file_baton): bump parent dir baton's ref
	count.  
	(free_file_baton): new func.  
	(add_directory, add_file): don't bump ref counts.  
	(close_file): call free_file_baton when done.  
	
	Note: above has either caused or (I suspect) revealed an allocation 
	bug.  See the comment in free_file_baton.  Suggestions welcome...
	I've spent all day trying to figure out how freeing a file baton's
	subpool can affect its parent dir baton chain, which is apparently
	what's happening.  Anyone want to play Captain Obvious? :-) 
	
	(debug_dir_baton): new temporary func.  
	(svn_pool_create): use apr_make_sub_pool().  
	
	* checkout-test.sh: just make one tree, for easier debugging.  

2000-09-26 12:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.18):

	Toss config.cache only if configure itself has changed.  

2000-09-26 01:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.15), get_editor.c (1.54),
	versions.c (1.15):

	(handle_start_tag): avoid strcmp() on null.  
	(free_dir_baton): decrement parent's ref count too.  Bump the dir to
	the new version before freeing.  Dang, that feels good.  

2000-09-26 00:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.14), versions.c (1.14):

	(do_parse): use do-while, not while, to avoid the usual initial 
	condition bug.  
	(handle_end_tag): get rid of test output.  

2000-09-26 00:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.16), libsvn_subr/xml.c (1.12),
	libsvn_wc/entries.c (1.13), libsvn_wc/versions.c (1.13):

	Fix bugs in version setting: 
	
	(do_versions_entry): new helper func, abstracts common code from 
	below.  
	(svn_wc__set_versions_entry, svn_wc__set_versions_entry): implement
	by calling do_versions_entry.  
	(get_entry_attributes): rewrite to use a hash.  
	
	Support for above: 
	
	* xml.c, svn_xml.h (svn_xml_hash_atts_preserving, 
	svn_xml_hash_atts_overlaying, svn_xml_ap_to_hash): new funcs.  
	(svn_xml_make_hash_att_overlaying): removed.  
	(amalgamate): new helper func, engine for all att&lt;-&gt;hash code.  
	(svn_xml_make_att_hash): implementing by calling amalgamate.  
	(svn_xml_write_tag_v): use svn_xml_ap_to_hash now.  

2000-09-25 23:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.12), versions.c (1.12):

	(svn_wc__set_versions_entry, svn_wc__get_versions_entry): actually, 
	just use baton-&gt;ap in place.  

2000-09-25 23:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.11), versions.c (1.11):

	(svn_wc__set_versions_entry, svn_wc__get_versions_entry): don't set 
	baton's va_list ap until after va_start call.  I'm amazed that this 
	makes a difference, but it does.  

2000-09-25 22:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.3), TASKS (1.9):

	Added a bunch of tasks.  Cleaned up stack.  

2000-09-25 22:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.15), libsvn_subr/xml.c (1.11),
	libsvn_wc/entries.c (1.10), libsvn_wc/log.c (1.13),
	libsvn_wc/versions.c (1.10), libsvn_wc/wc.h (1.30):

	Changes to make updating the SVN/versions file actually work: 
	
	* versions.c (svn_wc__versions_init): open tmp file with APR_EXCL,
	as a secondary locking check.  Rewrite in accord with below.  
	(svn_wc__version_baton_t): new boolean field `found_it'.  Use plain
	svn_vernum_t for version field.  Eliminate unused default_version
	field.  Doc fixes.  
	(get_entry_attributes): rewritten.  New calling discipline, caller
	changed.  
	(set_entry_attributes): removed.  
	(svn_wc__set_versions_entry): open tmp file with APR_EXCL, as a 
	secondary locking check.  Doc fixes, cosmetic fixes.  
	(svn_wc__get_versions_entry): doc fixes, cosmetic fixes.  
	(handle_start_tag, handle_end_tag): new names for xml_handle_start
	and xml_handle_end respectively, to avoid debugger namespace
	conflicts with similar functions in xml_parse.c.  
	
	* log.c (set_version): doc and formatting fixes.  
	
	* xml.c (valist_to_hash, escape_string): new helper funcs.  
	(svn_xml_write_tag_hash): new public func.  
	(svn_xml_write_tag_list): removed in favor of above.  
	(svn_xml_write_tag_v): implement by calling svn_xml_write_tag_hash.  
	(svn_xml_make_att_hash, svn_xml_make_att_hash_overlaying): new
	funcs.  
	
	* wc.h, svn_xml.h: adjust accordingly.  

2000-09-25 20:51   Branko Cibej &lt;brane@xbc.nu&gt;

	* AUTHORS (1.5):

	* AUTHORS: Removed coding-system escapes from name and changed
	mailing address.  

2000-09-25 19:07   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/tests/libsvn_delta/random-test.c (1.4):

	I noticed that the windows of diffs between purely psuedo-random
	data files tend to contain only one opcode (a copy from the new
	data).  That's not a very good test.  Taking a suggestion from my
	wife, I decided to make the data less random by generating shortish 
	pseudo-random subsequences using a limited range of seeds.  This way 
	we get around 300 opcodes per window on average.  Most of those tend 
	to be source copies, but a few of them are target copies or copies 
	from new data.  

2000-09-25 17:22   Jim Blandy &lt;jimb@redhat.com&gt;

	* autogen.sh (1.17):

	Remove Karl's note about configuring for Berkeley DB.  These
	problems should be fixed now.  PR: Obtained from: Submitted by: 
	Reviewed by: 

2000-09-25 17:15   Jim Blandy &lt;jimb@redhat.com&gt;

	* configure.in (1.30), subversion/Makefile.am (1.12),
	ac-helpers/berkeley-db.m4 (1.2, milestone-1-beta):

	Get better at finding Berkeley DB.  
	
	* configure.in: Use new macro SVN_LIB_BERKELEY_DB.  If we can't find 
	it, then just don't build the filesystem library.  We should also
	make this turn off mod_dav_svn, but I'll leave that to Greg.  
	* subversion/Makefile.am (SUBDIRS): Build in libsvn_fs only if the
	configure script says we should.  
	* ac-helpers/berkeley-db.m4 (SVN_CHECK_BERKELEY_DB): Replaced by: 
	(SVN_LIB_BERKELEY_DB): New macro.  Check --with-berkeley-db flag. 
	If the user doesn't explicitly tell us where to look, search for
	Berkeley DB in a number of standard places.  Cache results in a way
	that works accurately even when the user tells us to look in a
	different place, or not to look for Berkeley DB at all.  

2000-09-25 15:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.16):

	Add a note about how to deal with configure lossage relating to 
	Berkeley DB.  This has bitten a few people, and Jim is working on a 
	real fix right now, but in the meantime these new instructions may 
	save some headache.  

2000-09-25 12:10   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/text_delta.c (1.7):

	(svn_txdelta_stream_t): Style police.  

2000-09-25 12:08   Greg Hudson &lt;ghudson@mit.edu&gt;

	* TASKS (1.8):

	Binary diffing is pretty much done, although we still need to fill
	in the functions to convert text deltas to vcdiff format and back.  
	Branko has that subtask.  

2000-09-25 12:04   Jim Blandy &lt;jimb@redhat.com&gt;

	* configure.in (1.29):

	Abort the configuration process if we can't find a sufficiently new 
	version of Berkeley DB.  
	
	Ideally, this should just disable compilation of the filesystem 
	library, and let the rest of the system build.  But I haven't
	figured out how to fix that yet, and this is better than nothing.  

2000-09-25 11:59   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/include/: svn_delta.h (1.100), svn_error.h (1.29),
	svn_parse.h (1.6, milestone-1, milestone-1-beta), svn_svr.h (1.33,
	milestone-1, milestone-1-beta):

	Eliminate "extern" from function prototypes where it was used.  (It
	doesn't do anything, it consumes horizontal space, and we weren't
	using it in most places anyway.) 

2000-09-25 11:54   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/libsvn_delta/text_delta.c (1.6):

	(svn_txdelta): Allocate stream descriptor in subpool, or it won't
	get freed up when we call svn_txdelta_free().  

2000-09-25 11:52   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.99),
	libsvn_delta/text_delta.c (1.5), tests/libsvn_delta/random-test.c
	(1.3):

	Rework delta applicator interface so that it can be used with an 
	edit_fns callback.  (Previously a delta could only be applied as it
	was being created, which wasn't very useful.) 
	
	* include/svn_delta.h, libsvn_delta/text_delta.c: 
	(svn_txdelta_apply): Remove.  
	(svn_txdelta_applicator_t, svn_txdelta_applicator_create, 
	svn_txdelta_apply_window, svn_txdelta_applicator_free): New type and 
	functions to do the same job window by window.  
	(apply_window, apply_instructions): Rename helper function for
	clarity.  
	
	* libsvn_delta/tests/random_test.c: Fix up for new interface.  

2000-09-25 11:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_subr/xml.c (1.10), libsvn_wc/entries.c (1.9),
	libsvn_wc/versions.c (1.9):

	`versions.c' completed.  Time to debug.  :) 
	
	* xml.c (svn_xml_write_tag_list): finish definition.  
	
	* versions.c (set_entry_attributes):  finish definition.  
	  (xml_handle_start): rename input arg to `tagname', so we don't 
	  overload the term `name'.  also re-do calls to
	  svn_xml_write_tag_list.  

2000-09-25 09:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.28):

	Remove pointless check for db.h.  This should be part of 
	SVN_CHECK_BERKELEY_DB() 

2000-09-24 21:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_xml.h (1.14), libsvn_wc/entries.c (1.8),
	libsvn_wc/versions.c (1.8):

	Almost finished with versions.c.  Karl, would you like to finish 
	set_entry_attributes() and xml.c:svn_xml_write_tag_list() ?  :) 
	
	* svn_xml.h (svn_xml_write_tag_list) new func declaration, not yet 
	  written in libsvn_subr/xml.c.  
	
	* versions.c (svn_wc__version_baton_t):  new userdata structure 
	  (set_entry_attributes, get_entry_atttributes, do_parse):  new 
	  routines, almost finished.  
	  (svn_wc__get_versions_entry, svn_wc__get_versions_entry, 
	  xml_handle_start, xml_handle_end): fully fleshed out.  

2000-09-23 12:37   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/fs.c (1.8):

	#include "db.h".  

2000-09-23 12:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.98):

	Doc fix.  

2000-09-23 11:44   Jim Blandy &lt;jimb@redhat.com&gt;

	* TASKS (1.7):

	Revise Ben's comments about Berkeley DB.  

2000-09-23 08:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/txdelta_sanity (1.1):

	Ben's notes on how txdelta interfaces work.  Mainly as a personal
	reminder. :) 

2000-09-22 18:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.13), libsvn_subr/xml.c (1.9):

	note need for XML quoting.  

2000-09-22 17:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.12), libsvn_subr/xml.c (1.8),
	libsvn_wc/Makefile.am (1.19), libsvn_wc/adm_files.c (1.32),
	libsvn_wc/adm_parse.c (1.13), libsvn_wc/entries.c (1.7),
	libsvn_wc/versions.c (1.7), libsvn_wc/wc.h (1.29):

	Changes to do all working copy xml creation via the new svn xml 
	interface: 
	
	(svn_wc__versions_init): replaces `svn_wc__versions_init_contents', 
	moved to here from adm_parse.c.  Use the new xml-writing routines to 
	produce the initial versions file.  
	(init_adm): use above to initialize versions file.  
	
	(SVN_WC__VERSIONS_START, SVN_WC__VERSIONS_END, 
	SVN_WC__VERSIONS_ENTRY): new #defines.  
	
	* adm_parse.c: removed this file.  
	
	Added the following to support above changes: 
	
	* xml.c, svn_xml.h: doc fixes, and...  
	(svn_xml_write_header): new func.  
	(svn_xml_write_tag_v): new func.  
	(svn_xml_write_tag): implement using svn_xml_write_tag_v.  
	(SVN_XML_NAMESPACE): new #define.  

2000-09-22 16:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.12):

	(svn_wc__run_log): shut down the parser correctly.  

2000-09-22 15:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.6), log.c (1.11), versions.c
	(1.6):

	Silly compilation warning fixes.  

2000-09-22 15:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/delta.h (1.31),
	libsvn_delta/xml_parse.c (1.110), libsvn_subr/xml.c (1.7):

	Finish factorizing xml parsing code! 
	
	* delta.h: include svn_xml.h instead of xmlparse.h 
	  (svn_delta_xml_parser_t): now includes a svn_xml_parser_t instead
	  of an expat parser.  
	
	* xml.c: include apr_pools.h 
	  (svn_xml_make_parser, svn_xml_free_parser, svn_xml_parse, 
	  svn_xml_signal_bailout):  finish defining all of these factorized
	  routines.  
	
	* xml_parse.c:  many, many changes to use all of the factorized
	routines.  

2000-09-22 15:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.10):

	(log_runner): no more error field, we get it for free in 
	svn_xml_parser_t now.  
	(svn_wc__run_log): don't check for an error in the log_runner.  Use
	svn_xml_parser_t and svn_xml_parse, instead of invoking expat 
	directly.  Don't initialize `err'.  
	(signal_error): replaces set_error, invokes svn_xml_signal_bailout.  
	All callers changed.  
	(start_handler): fix up error handling.  

2000-09-22 15:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_xml.h (1.11):

	(svn_xml_parse): doc fix.  

2000-09-22 15:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.5), versions.c (1.5):

	resolve doc conflicts.  

2000-09-22 15:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_xml.h (1.10):

	Use correct name.  

2000-09-22 15:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_xml.h (1.9):

	Typo!  Remove `static' keyword.  

2000-09-22 15:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_xml.h (1.8):

	Passing latest header file back to Karl.  :-) 

2000-09-22 14:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.7), libsvn_subr/xml.c (1.6):

	(svn_xml_parse): started, hand off to Ben.  

2000-09-22 14:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_xml.h (1.6), libsvn_subr/xml.c (1.5),
	libsvn_wc/entries.c (1.4), libsvn_wc/versions.c (1.4):

	
	* svn_xml.h :  #include "svn_error.h" to make compilation work
	right.  
	
	* libsvn_subr/xml.c :  new routine svn_xml_write_tag() 

2000-09-22 13:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_xml.h (1.5):

	(svn_xml_parser_t):  new generalized xml parser object 
	(svn_xml_make_parser):  prototype for how this routine will look 
	(svn_xml_write_tag):  new routine coming soon 

2000-09-22 12:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: log.c (1.9), wc.h (1.28):

	(replace_text_base): fix typo.  
	(svn_wc__remove_adm_file): fix formatting.  

2000-09-22 12:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-test.c (1.24):

	(main): correct format args to fprintf.  

2000-09-22 12:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_delta/random-test.c (1.2):

	(main): don't include getpid () when seeding the random number 
	generator, it's not portable outside of Unix.  

2000-09-22 12:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/text_delta.c (1.4):

	#include &lt;string.h&gt;, for memmove.  

2000-09-21 18:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile.am (1.18), adm_files.c (1.31),
	entries.c (1.3), local_changes.c (1.6), log.c (1.8), versions.c
	(1.3), wc.h (1.27):

	More changes to make log handling behave correctly.  These compile
	but seg fault when run.  
	
	(svn_wc__file_exists_p): new func.  
	(svn_wc__merge_local_changes, replace_text_base): handle absences,
	so that log recovery is as well-behaved as initial log execution.  
	(set_version): use svn_wc__set_versions_entry, even though it's not 
	fully implemented yet.  
	(merge_text): make return scheme consistent.  
	
	(svn_wc__remove_versions_entry, svn_wc__get_versions_entry, 
	svn_wc__set_versions_entry): make skeleton definitions.  
	
	* wc.h: document log file properties some more.  
	(svn_wc__get_versions_entry): fix prototype.  
	
	* Makefile.am (libsvn_wc_la_SOURCES): add versions.c 

2000-09-21 18:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.2), versions.c (1.2):

	load svn-dev.el 

2000-09-21 18:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.28), include/svn_wc.h (1.25),
	libsvn_subr/svn_error.c (1.36), libsvn_wc/adm_files.c (1.30),
	libsvn_wc/get_editor.c (1.53), libsvn_wc/local_changes.c (1.5),
	libsvn_wc/log.c (1.7), libsvn_wc/wc.h (1.26):

	Changes to make files update by "running" the adm log: 
	
	(merge_text, replace_text_base, set_version): take a pool argument.  
	(start_handler): pass pool to above.  
	(close_file): let svn_wc__run_log do everything.  
	
	(svn_wc__gnudiff_differ, svn_wc__gnudiff_patcher): replace 
	svn_wc__generic_differ and svn_wc__generic_patcher, respectively.  
	Take pool args, use svn_error_createf where appropriate.  
	(svn_wc__get_local_changes, svn_wc__merge_local_changes): adjust
	calls.  
	(svn_wc__text_base_path): take `tmp' flag.  
	(v_extend_with_adm_name): ignore empty components.  
	
	* wc.h: doc fixes.  
	
	* svn_error.c, svn_error.h (svn_error_free): rename svn_free_error.  
	
	* svn_wc.h (svn_wc_patch_fn_t, svn_wc_diff_fn_t): take pool args.  

2000-09-21 17:39   Greg Hudson &lt;ghudson@mit.edu&gt;

	* subversion/: include/svn_delta.h (1.97), include/svn_io.h (1.4,
	milestone-1-beta), libsvn_delta/text_delta.c (1.3),
	tests/libsvn_delta/.cvsignore (1.5), tests/libsvn_delta/Makefile.am
	(1.6), tests/libsvn_delta/random-test.c (1.1):

	Reviewed by:	brane 
	
	Add delta applicator function.  Unfortunately, I don't think it has 
	the right interface to fit into the edit_fns framework, but it can
	be munged appropriately once I get that issue hammered out on the
	list.  
	
	* include/svn_delta.h (svn_txdelta_window_t, svn_txdelta_apply): Add 
	sview_offset, sview_len, tview_len to window structure; prototype
	new function to apply delta stream.  
	
	* include/svn_io.h (svn_read_fn_t, svn_write_fn_t): Tighten up 
	contract and extend for writing as well as reading.  
	
	* libsvn_delta/text_delta.c: 
	(svn_txdelta_stream_t, svn_txdelta__init_window, 
	svn_txdelta_next_window): Adjust for new window fields.  
	(size_buffer, apply_window, svn_txdelta_apply): new function and 
	helpers to apply a delta stream.  May need to be rewritten as a
	window handling function.  
	
	* libsvn_delta/test/.cvsignore, libsvn_delta/tests/Makefile.am, 
	libsvn_delta/tests/random_test.c: New program, random-test, to test 
	svn_txdelta and svn_txdelta_apply with random data.  

2000-09-21 17:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_tests_main.c (1.9):

	(get_array_size): add `void' non-argument to prototype, to pacify
	compiler.  

2000-09-21 17:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.42):

	Mark static functions, fix printf() long int formats.  

2000-09-21 17:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_tests_main.c (1.8):

	#include &lt;stdlib.h&gt;, for atoi().  

2000-09-21 16:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/: entries.c (1.1), versions.c (1.1):

	* version.c:  new file -- for editing versions file 

2000-09-21 16:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* AUTHORS (1.4):

	(ghudson, kbob): added.  

2000-09-21 16:09   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/wc.h (1.25):

	* wc.h : add definitions for manipulating the wc `versions' file.  

2000-09-21 15:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/lock.c (1.15, milestone-1-beta):

	(svn_wc__lock): use svn_error_createf for formatting.  

2000-09-21 15:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/lock.c (1.14):

	(svn_wc__lock): don't initialize error, that's not necessary.  

2000-09-21 15:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/lock.c (1.13):

	(svn_wc__lock): free error if innocuous.  

2000-09-21 15:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.109):

	* xml_parse.c (svn_delta_make_xml_parser): use svn_xml_make_parser.  

2000-09-21 15:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.10, milestone-1):

	Describe tools/ subdir.  

2000-09-21 15:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.6):

	Note that Bob Miller has begun working on a conversion program.  

2000-09-21 15:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* tools/cvs2svn/README (1.1):

	Note that Bob Miller has begun working on this.  

2000-09-21 13:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.29), lock.c (1.12), log.c
	(1.6), wc.h (1.24):

	(svn_wc__remove_adm_file): replaces svn_wc__remove_adm_thing, now 
	variadic.  
	(svn_wc__unlock, svn_wc__run_log): accommodate above.  

2000-09-21 12:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/: libsvn_delta/Makefile.am (1.5),
	libsvn_subr/Makefile.am (1.7, milestone-1-beta),
	libsvn_wc/Makefile.am (1.8), Makefile.am (1.4, milestone-1-beta):

	Don't clobber autoconf's CFLAGS.  

2000-09-21 12:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.41):

	Fix single-baton handling: 
	
	(test_replace_root): set edit_baton in dir_baton.  
	(add_or_replace_dir): abstract out common guts of test_add_directory 
	and test_replace_directory.  
	(test_add_directory, test_replace_directory): use above.  
	(dec_spaces, inc_spaces): take an edit_baton.  All callers changed.  
	(test_close_file): use file_baton correctly.  
	(main): pass edit_baton correctly.  

2000-09-21 12:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.27):

	* configure.in:  add check for "db.h" 

2000-09-21 11:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.28):

	Tightenings: 
	
	(wc_split_path): new func.  
	(svn_wc__open_text_base, svn_wc__close_text_base, 
	svn_wc__sync_text_base, svn_wc__text_base_path): use wc_split_path.  
	(sync_adm_file, close_adm_file): use svn_error_createf for
	formatting.  
	(sync_adm_file): formatting fix.  

2000-09-21 11:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* TASKS (1.5):

	* TASKS:  extra comment 

2000-09-21 11:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* TASKS (1.4):

	* TASKS:  Add berkeley db autoconf issue.  

2000-09-21 10:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.5), libsvn_repos/delta.c (1.5):

	(dir_from_scratch, add): correct return value.  

2000-09-21 10:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.4), libsvn_repos/delta.c (1.4):

	(svn_fs_dir_delta): fix type of second arg to editor-&gt;replace_root.  

2000-09-21 10:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.c (1.7):

	#include &lt;string.h&gt;, for memset.  

2000-09-21 10:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_fs/delta.c (1.3), libsvn_repos/delta.c (1.3):

	(svn_fs_dir_delta): pass correct number of args to
	editor-&gt;replace_root.  
	(add, dir_from_scratch): comment out non-compiling ellipses.  
	Patched by Bob Miller &lt;kbob@jogger-egg.com&gt;.  

2000-09-21 10:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_fs.h (1.13):

	(svn_fs_t): typedef forwards to struct svn_fs, not struct svn_fs_t.  
	Patched by Bob Miller &lt;kbob@jogger-egg.com&gt;.  

2000-09-21 09:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.27):

	Doc fix.  

2000-09-21 09:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_error.h (1.26):

	* svn_error.h : add SVN_ERR_WC_BAD_ADM_LOG.  (Karl forgot to add?) 

2000-09-19 20:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.5):

	(log_runner): added pool, path, and error fields.  
	(set_error, merge_text, replace_text_base, set_version): new funcs.  
	(start_handler): do error checking and invoke above new funcs.  

2000-09-19 20:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/log.c (1.4):

	(start_handler): print element and attribute list.  
	(end_handler): removed -- don't actually need this.  
	(svn_wc__run_log): parse the log file visibly.  

2000-09-19 19:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.2):

	update short-term tasks 

2000-09-19 19:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.96), libsvn_delta/xml_parse.c
	(1.108), tests/libsvn_delta/deltaparse-test.c (1.40),
	libsvn_ra_dav/commit.c (1.8), libsvn_ra_dav/fetch.c (1.12),
	libsvn_wc/get_editor.c (1.52):

	Move to a single-baton scheme.  
	
	* svn_delta.h: change callbacks in svn_delta_edit_fns_t to use their 
	most specific baton: 
	(add_directory, replace_directory, add_file, replace_file, 
	change_dir_prop, change_dirent_prop, close_directory, close_file): 
	removed edit_baton arg.  
	(apply_textdelta, change_file_prop): remove edit_baton and 
	parent_baton args.  
	
	* deltaparse_test.c: change callback invocations appropriately.  
	(edit_baton, dir_baton, file_baton): new structs, use them 
	everywhere.  
	
	* xml_parse.c: change callback invocations appropriately.  
	
	* get_editor.c, fetch.c, commit.c: change callback implementations 
	appropriately.  

2000-09-19 18:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-1.delta (1.11):

	Restore to valid syntax.  

2000-09-19 18:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.25),
	libsvn_delta/vcdiff_parse.c (1.14), libsvn_delta/xml_parse.c
	(1.107), tests/libsvn_delta/deltaparse-test.c (1.39),
	libsvn_fs/err.c (1.6), libsvn_fs/fs.c (1.6), libsvn_ra_dav/fetch.c
	(1.11), libsvn_ra_dav/session.c (1.4), libsvn_subr/svn_error.c
	(1.35), libsvn_subr/svn_parse.c (1.38, milestone-1-beta),
	libsvn_wc/adm_crawler.c (1.11), libsvn_wc/adm_files.c (1.27),
	libsvn_wc/adm_parse.c (1.12), libsvn_wc/get_editor.c (1.51),
	libsvn_wc/local_changes.c (1.4), libsvn_wc/lock.c (1.11),
	libsvn_wc/questions.c (1.10), libsvn_wc/util.c (1.9),
	tests/libsvn_wc/checkout-test.c (1.23):

	Namespace fix: 
	
	(svn_error_create, svn_error_createf, svn_error_quick_wrap): new
	names for svn_create_error, svn_create_errorf, and
	svn_quick_wrap_error.  All callers changed.  

2000-09-19 18:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.24),
	libsvn_delta/text_delta.c (1.2), libsvn_delta/vcdiff_parse.c
	(1.13), libsvn_delta/xml_parse.c (1.106),
	tests/libsvn_delta/deltaparse-test.c (1.38), libsvn_fs/delta.c
	(1.2), libsvn_fs/fs.c (1.5), libsvn_repos/delta.c (1.2),
	libsvn_subr/svn_error.c (1.34), libsvn_subr/svn_parse.c (1.37),
	libsvn_wc/get_editor.c (1.50), tests/libsvn_wc/checkout-1.delta
	(1.10), tests/libsvn_wc/checkout-test.c (1.22),
	tests/svn_tests_main.c (1.7):

	Fix the error lifetime problem: 
	
	(svn_pool_create): new func, wraps APR pool creation, creates or 
	inherits an error pool, depending on args.  
	(default_abort): default bailout function for above.  
	(make_error_internal): find and use the error pool.  
	(svn_errno_t): new error SVN_ERR_BAD_CONTAINING_POOL.  
	
	Throughout Subversion: callers changed to create pools using 
	svn_pool_create, instead of apr_create_pool or apr_make_sub_pool.  

2000-09-19 17:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_tests_main.c (1.6):

	fix loading of svn-dev.el 

2000-09-19 15:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/: checkout-1.delta (1.9),
	checkout-2.delta (1.2):

	Wrap in new `delta-pkg' element.  

2000-09-19 14:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_fs.h (1.12), libsvn_fs/Makefile.am
	(1.3), libsvn_fs/delta.c (1.1), libsvn_fs/err.c (1.5),
	libsvn_fs/err.h (1.3), libsvn_repos/delta.c (1.1):

	* svn_fs.h: Many changes throughout.  Make node and node version
	ID's part of the public interface.  Add delta functions.  Tweak
	semantics of svn_fs_dir_entries and property list functions.  
	
	* libsvn_fs/Makefile.am (libsvn_fs_la_SOURCES): Add delta.c.  
	
	* libsvn_fs/err.c (svn_fs__pool_abort): New function.  
	* libsvn_fs/err.h (svn_fs__pool_abort): New declaration.  
	
	* libsvn_fs/delta.c: New file.  

2000-09-19 13:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.33):

	(make_error_internal): previous log message had the wrong name for
	this func 

2000-09-19 13:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.23), libsvn_delta/xml_parse.c
	(1.105), tests/libsvn_delta/deltaparse-test.c (1.37),
	libsvn_fs/err.c (1.4), libsvn_fs/fs.c (1.4), libsvn_ra_dav/commit.c
	(1.7), libsvn_ra_dav/session.c (1.3), libsvn_subr/svn_error.c
	(1.32), libsvn_subr/svn_parse.c (1.36), libsvn_wc/Makefile.am
	(1.17), libsvn_wc/adm_crawler.c (1.10), libsvn_wc/adm_files.c
	(1.26), libsvn_wc/adm_parse.c (1.11), libsvn_wc/get_editor.c
	(1.49), libsvn_wc/local_changes.c (1.3), libsvn_wc/lock.c (1.10),
	libsvn_wc/log.c (1.3), libsvn_wc/questions.c (1.9),
	libsvn_wc/util.c (1.8), tests/libsvn_wc/checkout-test.c (1.21):

	NOTE: the build appears to be broken right now, although I'm not
	sure this change is what breaks it.  Committing anyway, though,
	because Ben is remote today and I want to him to be able to help
	figure out the build problem.  To see the problem, rerun autogen.sh
	and configure (with all the suggested flags), then `make clean',
	then `make'.  
	
	This change: 
	
	Cleanups to error system, preliminary to making the much-discussed
	fix regarding pool lifetimes: 
	
	(make_error): new internal helper func.  
	(svn_create_error, svn_create_errorf): allocate in a subpool of
	pool, else use child's pool.  Also, change order of arguments to 
	svn_create_error to match that of svn_create_errorf.  All callers 
	changed, whew! 
	(svn_quick_wrap_error): make sure allocation happens directly in 
	child's pool.  
	(svn_free_error): new func.  
	
	Minor compilation fixes: 
	
	* libsvn_wc/Makefile.am (libsvn_wc_la_LIBADD): mention expat-lite
	and libsvn_subr, nothing else.  
	* libsvn_ra_dav/commit.c (commit_editor): align correctly for latest 
	svn_delta_edit_fns_t.  

2000-09-18 18:23   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_string.h (1.34):

	Doc fix.  

2000-09-18 16:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* STACK (1.1):

	short-term todo list 

2000-09-18 14:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/Makefile.am (1.16):

	
	* Makefile.am : too many ".." in link line?? 

2000-09-18 12:50   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_path.h (1.12):

	Doc fixes.  

2000-09-18 12:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.95), include/svn_wc.h (1.24),
	include/svn_xml.h (1.4), libsvn_delta/delta.h (1.30),
	libsvn_delta/xml_parse.c (1.104),
	tests/libsvn_delta/deltaparse-test.c (1.36),
	libsvn_subr/Makefile.am (1.7, milestone-1-beta), libsvn_subr/xml.c
	(1.4), libsvn_wc/Makefile.am (1.15), libsvn_wc/adm_crawler.c (1.9),
	libsvn_wc/log.c (1.2), tests/libsvn_wc/checkout-test.c (1.20):

	Abstractions to make building XML parsers more convenient: 
	
	* xml.c (svn_xml_make_parser): new func.  
	
	* log.c: #include "svn_xml.h".  
	(start_handler, end_handler): new funcs.  
	(svn_wc__run_log): make and free a parser, using above.  
	
	* libsvn_subr/Makefile.am (INCLUDES): include expat-lite.  
	
	* libsvn_wc/Makefile.am (libsvn_wc_la_LIBADD): new dependency,
	include expat-lite and others.  
	
	Namespace changes to old XML delta parsing code, to avoid
	interference with above new abstractions: 
	
	* svn_delta.h, etc: (svn_delta_xml_parser_t, 
	svn_delta_make_xml_parser, svn_delta_free_xml_parser, 
	svn_delta_xml_parsebytes, svn_delta_xml_auto_parse): more accurate 
	names for `svn_xml_parser_t', `svn_delta_make_xml_parser', 
	`svn_delta_free_xml_parser', `svn_xml_parsebytes', and 
	`svn_delta_xml_auto_parse', respectively.  All callers changed.  

2000-09-15 17:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/delta.h (1.29),
	libsvn_delta/xml_parse.c (1.103),
	tests/libsvn_delta/deltaparse-test.c (1.35),
	tests/libsvn_delta/postfix.delta (1.1, milestone-1-beta),
	tests/libsvn_delta/simple.delta (1.1):

	MAJOR changes to the xml parser, so that it can handle postfix 
	text-deltas!  After all, we need to test libsvn_wc's ability to
	handle these, and this is currently our only driver.  :) 
	
	* simple.delta: new file, example of "in-line" text-deltas.  
	
	* postfix.delta:  new file, example of "postfix" text-deltas.  
	
	* delta.h (svn_delta__xml_t):  add two new tags, &lt;delta-pkg&gt; and 
	&lt;text-delta-ref&gt; 
	(svn_xml__digger_t):  add hashtable for looking up postfix text
	references 
	(svn_xml__stackframe_t):  add `ref_id' field for postfix text-delta 
	frames; add `hashed' to note if file_baton is stored in postfix
	hash.  
	
	* xml_parse.c (svn_delta__tagmap): add two tags to match
	svn_delta__xml_t 
	(xml_handle_start):  set `ref_id' field in frame if attribute
	exists; new condition to handle &lt;text-delta-ref&gt; tag.  
	(do_begin_textdelta): depending on whether its a in-line or postfix 
	text-delta, 1) error-check for (non)existence of ref_id, 2) fetch 
	appropriate file_baton (either from hashtable or parent file-frame) 
	Also, check for error when calling apply_textdelta (duh).  
	(lookup_file_baton):  new function to retrieve file_baton from hash 
	(xml_handle_end):  when parsing &lt;/text-delta&gt;, if postfix then close 
	file_baton manually.  
	(svn_xml_make_parser): initialize digger's postfix hashtable 
	(do_begin_textdeltaref):  new function -- stores id/file_baton in
	hash.  
	(do_close_file):  call editor-&gt;close_file ONLY IF file_baton isn't 
	stored in a hash somewhere.  
	(do_stack_append):  add new validation rules for &lt;delta-pkg&gt; tag 
	
	* deltaparse-test.c:  cleaned up some printing.  

2000-09-15 16:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile.am (1.14), adm_files.c (1.25),
	get_editor.c (1.48), local_changes.c (1.2), log.c (1.1), wc.h
	(1.23):

	Changes to write out log files and process them.  The processing is 
	still skeletal.  
	
	(file_baton): new fields `name' and `pool', and remove const from
	`path'.  
	(make_file_baton): set name, pool, which is a new subpool.  Change
	all users to use file baton's own pool, not parent's.  
	(svn_wc__write_adm_entry): new func, variadic.  
	(v_write_adm_entry): guts for above, taking va_list.  
	(close_file): write log entries according to baton.  
	
	* log.c (svn_wc__run_log): new file, new func.  
	
	* wc.h: adjust for above new funcs.  Also: 
	
	(SVN_WC__ADM_LOG, SVN_WC__LOG_MERGE_TEXT, 
	SVN_WC__LOG_REPLACE_TEXT_BASE, SVN_WC__LOG_MERGE_PROPS, 
	SVN_WC__LOG_REPLACE_PROP_BASE, SVN_WC__LOG_SET_VERSION, 
	SVN_WC__LOG_ATTR_NAME, SVN_WC__LOG_ATTR_VERSION, 
	SVN_WC__LOG_ATTR_SAVED_MODS): new #defines.  
	
	(SVN_WC__ADM_DOING, SVN_WC__ADM_DOING_ACTION,
	SVN_WC__ADM_DOING_FILES, SVN_WC__ADM_DOING_STARTED,
	SVN_WC__ADM_DOING_FINISHED): removed these obsolete #defines.  
	
	* local_changes.c: minor fix -- load svn-dev.el.  

2000-09-15 13:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.47):

	(close_file): document diff/log/merge/update sequence.  

2000-09-15 12:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_ra_dav/fetch.c (1.10),
	libsvn_wc/adm_crawler.c (1.8):

	Fix compilation warnings by bringing callers up to date: 
	
	* fetch.c (update_editor): add null placeholders for 
	update_replace_root and update_close_edit.  
	
	* ra-dav-test.c (svn_wc_get_update_editor): don't pass dir_baton arg 
	anymore.  
	
	* adm_crawler.c (svn_wc_crawl_local_mods): call svn_make_xml_parser 
	correctly.  

2000-09-15 01:15   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/tests/libsvn_delta/.cvsignore (1.4):

		* .cvsignore : Add vdelta-test to the ignore list.  

2000-09-15 01:08   Branko Cibej &lt;brane@xbc.nu&gt;

	* subversion/: libsvn_delta/Makefile.am (1.10),
	libsvn_delta/delta.h (1.28), libsvn_delta/text_delta.c (1.1),
	libsvn_delta/vdelta.c (1.1), include/svn_delta.h (1.94),
	tests/libsvn_delta/Makefile.am (1.4),
	tests/libsvn_delta/vdelta-test.c (1.1, milestone-1,
	milestone-1-beta), tests/libsvn_delta/vdelta_1.txt (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta):

	    Implemented vdelta generator and test driver: 
	
		* include/svn_delta.h (svn_txdelta_window_t): New member ops_size.  
	
		* libsvn_delta/text_delta.c, libsvn_delta/vdelta.c: New files.  
		* libsvn_delta/Makefile.am: Add them to libsvn_delta_la_SOURCES.  
		* libsvn_delta/delta.h: Declare private interfaces for text deltas.  
	
		* libsvn_delta/tests/vdelta-test.c: New file.  
		* libsvn_delta/tests/Makefile.am: Add bits to build vdelta-test.  
		* libsvn_delta/tests/vdelta_1.txt: New testcase for vdelta-test.  

2000-09-14 19:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.23), libsvn_wc/Makefile.am
	(1.13), libsvn_wc/adm_files.c (1.24), libsvn_wc/get_editor.c
	(1.46), libsvn_wc/local_changes.c (1.1), libsvn_wc/lock.c (1.9),
	libsvn_wc/wc.h (1.22), tests/libsvn_wc/checkout-test.sh (1.6):

	Make files appear in text-base first, then in working dir,
	pretending to merge local mods (but not really).  
	
	* svn_wc.h (svn_wc_diff_fn_t, svn_wc_patch_fn_t): new typedefs.  
	
	* local_changes.c: new file.  
	(svn_wc__generic_differ, svn_wc__generic_patcher): new functions 
	implementing the above typedefs.  
	(svn_wc__get_local_changes, svn_wc__merge_local_changes): wrappers
	for above.  
	
	* adm_files.c (apr_copy_file): no longer static, export for 
	intra-library use.  
	(svn_wc__text_base_path): new func.  
	
	* get_editor.c (close_file): allegedly save and restore local mods.  
	
	* wc.h: #include "svn_wc.h".  New prototypes as needed.  
	
	* checkout-test.sh: print command line before running it.  

2000-09-14 18:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_ops.c (1.13), wc.h (1.21):

	(svn_wc__push_unwind, svn_wc__pop_unwind, svn_wc__unwind_all, 
	svn_wc__unwind_empty_p): removed.  We'll be doing things in a loggy 
	way, not a stacky way.  

2000-09-14 18:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.23), get_editor.c (1.45):

	(dir_baton): new field prop_changed.  
	(change_dir_prop): set dir_baton-&gt;prop_changed.  
	(file_baton): new fields text_changed, prop_changed.  
	(change_file_prop): set file_baton-&gt;prop_changed.  
	(window_handler): set file_baton-&gt;text_changed.  
	(close_file): if text_changed, then sync up the file.  
	(svn_wc__sync_text_base): pass null final arg to sync_adm_file (see 
	joe's change of 2000-09-14 16:51).  

2000-09-14 17:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.22), get_editor.c (1.44),
	wc.h (1.20):

	* adm_files.c (apr_copy_file): init apr_file_t's to null, to satisfy 
	apr_open's weird calling discipline.  Let me just say that this is 
	only the three thousand and seventy-seventh time this has bitten me.  
	(maybe_copy_file): replaces `copy_file', and just creates dst if src 
	does not exist, for the initial checkout into text-base, etc.  
	
	* get_editor.c (window_handler): use svn_wc__open_text_base() and 
	svn_wc__close_text_base() now.  
	
	* wc.h (svn_wc__close_text_base): arg's name is `sync', not `write'.  
	Added Joe and Branko.  

2000-09-14 16:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* AUTHORS (1.3):

	Added Joe and Branko.  

2000-09-14 16:51   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_wc/adm_files.c (1.21):

	* adm_files.c (v_extend_with_adm_name, extend_with_adm_name, 
	sync_adm_file, open_adm_file, close_adm_file): Modified to accept a 
	NULL-terminated argument list, rather than using an extra argument
	to indicate the length of the list. (all callers changed) 

2000-09-14 16:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/: checkout-2.delta (1.1),
	checkout-test.sh (1.5):

	* checkout-2.delta: new test delta 
	* checkout-test.sh: do new delta too.  

2000-09-14 16:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.102):

	
	 DON'T TOUCH maybe_derive_ancestry();  it works perfectly.  The
	 trick is to *guarantee* that there's always a "root" frame on the
	 parser stack which represents the nameless root directory.  This
	 frame *always* has the `base' src-path and src-version, so that 
	 maybe_derive_ancestry can correctly fall back on it.  It works now! 
	
	 * xml_parse.c 
	
	   (maybe_derive_ancestry): revert change -- leave it alone.  
	
	   (svn_make_xml_parser): call replace_root to fetch root_baton, and 
	   start our digger out with a `root' stackframe containing both 
	   root_baton and our `base' ancestry.  
	
	   (do_stack_append):  check for "root" frame by testing (previous ==
	   NULL) 
	
	   (do_stack_check_remove): 
	                       check for "root" frame by testing (previous
	                       == NULL) 
	
	
	   (xml_handle_end): if root frame is last remaining frame, call 
	   close_directory on the root_baton.  

2000-09-14 16:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/adm_files.c (1.20), libsvn_wc/adm_ops.c
	(1.12), libsvn_wc/get_editor.c (1.43), libsvn_wc/wc.h (1.19),
	tests/libsvn_wc/checkout-test.c (1.19):

	(replace_root): new callback.  
	(callbacks): add replace_root().  
	(svn_wc_get_update_editor): don't set dir baton here, it's done in 
	replace_root now.  
	(prep_directory): new helper func, abstracts common code for 
	replace_root(), replace_directory(), and add_directory().  
	(dir_baton): hold parent's dir_baton.  
	(make_dir_baton): take parent_baton arg and set it in the new 
	dir_baton.  Also, fixed path handling.  
	
	(svn_wc__ensure_wc, svn_wc__ensure_adm, check_adm_exists): take 
	ancestor_path and ancestor_version args.  All callers changed.  
	(init_adm): take ancestor_path arg, init ancestor file.  
	(SVN_WC__ADM_ANCESTOR): new #define.  
	
	(sync_adm_file): replaces svn_wc__sync_adm_file, confined to static 
	now.  This will be the guts for other functions.  
	(svn_wc__sync_text_base): use above as guts.  
	(svn_wc__file_modified_p): prototype.  
	
	(make_file_baton): make path the right way.  
	
	* checkout-test.c (apply_delta): call xml parser the right way.  

2000-09-14 16:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-1.txt (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	Mention top-level `iota' file.  

2000-09-14 15:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.22):

	(svn_wc_get_update_editor): don't take dir_baton arg anymore.  

2000-09-14 15:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.101):

	(svn_xml_parsebytes): pass only edit_baton to close_edit.  

2000-09-14 15:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.93):

	(svn_delta_fns_t): close_edit no longer takes a dir_baton.  

2000-09-14 14:38   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.92):

	Doc fixes.  

2000-09-14 13:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/xml_parse.c (1.100),
	tests/libsvn_delta/deltaparse-test.c (1.34):

	
	 * xml_parse.c 
	   (maybe_derive_ancestry):  take a digger argument, and default to 
	   `base' path and version when all else fails.  Not working right 
	   yet; checking it in so things compile right.  
	
	 * deltaparse-test.c 
	   (main):  call svn_xml_auto_parse in the new way, and register 
	            test_replace_root inside our editor.  
	   (test_replace_root):  new func, copies `base_path' and returns it 
	                         as `root_baton' to the caller.  :) 

2000-09-14 13:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.15):

	Give various example configure lines in a way convenient for cutting 
	and pasting.  

2000-09-14 12:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/README.xmlparse (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	
	  * README.xmlparse :  new file, describes how to use XML parsing
	  interface.  

2000-09-14 12:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.91), libsvn_delta/xml_parse.c
	(1.99):

	
	 * xml_parse.c :  replace all "finish_*" calls with "close_*" calls 
	
	   (svn_xml_make_parser): 
	     - return value is now (svn_error_t *).  
	     - parser is now passed back through an argument.  
	     - no longer takes dir_baton as an argument; instead, it calls
	       the brand new editor-&gt;replace_root() to fetch the
	rootdir_baton.  
	
	   (svn_xml_auto_parse): 
	     - call svn_xml_make_parser in the new way.  
	     - no longer requires dir_baton argument.  
	
	  * svn_delta.h : update prototypes of svn_xml_make_parser and 
	                  svn_xml_auto_parse 
	
	
	  * README.xmlparse :  new file, describes how to use XML parsing
	  interface.  

2000-09-14 12:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.90),
	tests/libsvn_delta/deltaparse-test.c (1.33), libsvn_ra_dav/commit.c
	(1.6), libsvn_ra_dav/fetch.c (1.9):

	In svn_delta_edit_fns_t: 
	
	(close_directory, close_file, close_edit): new names for 
	`finish_directory', `finish_file', and `finish_edit'.  All callers
	changed, except in xml_parse.c, which Ben is taking care of, and
	get_editor.c, which has other uncommitted changes right now.  

2000-09-14 12:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.89):

	(svn_delta_edit_fns_t): removed `add_root', leaving just 
	`replace_root'.  Because there is always a root directory, though it 
	might need an arbitrary amount of preparation, depending on whose 
	editor this is.  

2000-09-14 11:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.88):

	(add_root, replace_root): take `edit_baton' arg.  

2000-09-14 11:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.87):

	(svn_delta_edit_fns_t): further doc fix.  

2000-09-14 11:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.86):

	(svn_delta_edit_fns_t): doc fix.  

2000-09-14 11:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/: libsvn_subr/hashdump-test.c (1.12,
	milestone-1, milestone-1-beta), svn_tests_main.c (1.5):

	All test functions now take a char **msg pointer, which they set to
	a message describing this test.  
	
	(descriptions): no more need for this array; the messages are set 
	inside the functions themselves.  
	(do_test_num): print test number with a minimum field width, so 
	columns of results line up nicely.  

2000-09-14 11:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_tests_main.c (1.4):

	(do_test_num): revert previous change -- this is a lot more involved 
	than just changing that one %d.  

2000-09-14 11:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/svn_tests_main.c (1.3):

	(do_test_num): print test number using a minimum field width, so a
	column of results lines up all pretty like.  

2000-09-14 10:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.22), include/svn_string.h
	(1.33), libsvn_wc/adm_crawler.c (1.7):

	
	 * svn_string.h:  declaration of `svn_string_appendcstr' 
	
	 * svn_string.c:  new wrapper: `svn_string_appendcstr' 
	
	 * stringtest.c:  added test for `svn_string_appendcstr' 

2000-09-14 10:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.85):

	(svn_delta_edit_fns_t): new funcs `add_root' and `replace_root'.  

2000-09-14 10:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.19):

	(svn_wc__sync_adm_file, open_adm_file, close_adm_file): Reuse 
	va_lists.  It makes logical sense that doing so is legal, despite
	the very slight implication on p. 155 of K&R (2nd edition) that
	va_lists should only be used once.  

2000-09-14 06:56   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/: include/svn_delta.h (1.84), libsvn_delta/xml_parse.c
	(1.98):

	* xml_parse.c, svn_delta.h (svn_xml_parsebytes): Add 'const' to 
	buffer argument.  

2000-09-14 05:56   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_wc/get_editor.c (1.42):

	* get_editor.c (free_dir_baton): Add return statement.  
	(add_file): Fix debugging printf.  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2000-09-13 14:44   Joe Orton &lt;joe@light.plus.com&gt;

	* subversion/libsvn_wc/questions.c (1.8):

	* questions.c: Fix compile warning by picking up apr_psprintf 
	prototype.  

2000-09-12 22:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.47), adm_files.c (1.18),
	adm_ops.c (1.11), get_editor.c (1.41), lock.c (1.8), questions.c
	(1.7), wc.h (1.18):

	More changes to handle postfix text deltas and prop deltas, and give
	more control over syncing of tmp files in the adm area: 
	
	* adm_ops.c, adm_files.c: 
	(svn_wc__ensure_wc): replaces `svn_wc__ensure_prepare_wc'.  Don't
	ask about prior existence, and don't leave the adm area locked.  
	(svn_wc__ensure_adm): checking adm area's existence is a purely 
	internal matter now, don't reveal anything to caller.  
	(v_extend_with_adm_name): new func, extends path by using a va_list.  
	(extend_with_adm_name): replaces `extend_with_adm_name'.  Now
	variadic, by v_extend_with_admin_name().  All callers changed.  
	(chop_admin_name): replaces `chop_admin_thing', better name.  
	(svn_wc__make_adm_thing): take `tmp' arg.  All callers changed.  
	(init_adm): make directories before files, so the tmp dir is present 
	by the time we need it.  
	(svn_wc__open_adm_file): open temporary files in tmp/.  
	(svn_wc__sync_adm_file): new func, all syncing of tmp file with real 
	file happens here.  
	(svn_wc__close_adm_file): `sync' arg replaces old `write' arg.  
	Document that it is optional, and call above to actually do the
	sync.  
	(svn_wc__open_text_base, svn_wc__close_text_base, 
	svn_wc__sync_text_base): new funcs.  
	(SVN_WC__TMP_EXTENSION): removed, no longer used.  
	
	* get_editor.c (edit_baton): replaces struct `e_baton'.  
	(dir_baton, file_baton): new structs.  
	(make_file_baton): new func, creates a file baton in the parent
	dir's subpool.  
	(make_dir_baton, free_dir_baton): create and destroy dir batons,
	where "destroy" implies various cleanups on the directory.  
	(decrement_ref_count): decrement ref count and conditionally free a 
	dir baton.  
	(maybe_prepend_dest): removed, no longer needed.  All callers
	changed.  
	
	* questions.c (svn_wc__check_wc): replaces `svn_wc__working_copy_p', 
	just returns error to flag that arg is not a working copy, because a 
	"no" answer is usually best fatal anyway.  
	
	* README: document SVN/tmp/ better.  
	
	Various cleanups: 
	(svn_wc__open_adm_file): set *handle to null, to guarantee APR's 
	satisfaction.  
	(apr_copy_file): use BUFSIZ, not hardcoded 1024.  
	(svn_wc__make_adm_thing): doc fix.  
	(init_adm_file): doc fix.  
	(svn_wc__file_modified_p): pass pool arg to apr_psprintf().  

2000-09-12 16:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.6):

	
	 * questions.c :  fix typos (compile-o's?) :) 

2000-09-12 16:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/questions.c (1.5):

	
	 * questions.c 
	   (svn_wc__file_modified_p)  new routine to check if a file has 
	                              changed.  also added many static
	                              helper funcs.  

2000-09-11 20:41   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.8):

	[ patch from Joe Orton ] 
	
	(validate_element): refine the logic used to validate elements. the
	    previous logic was just flat out wrong. (doc updates in Neon
	    forthcoming to clarify how to do this stuff) 
	
	Msg-id: &lt;20000909183709.F321@light.plus.com&gt; on
	dev@subversion.tigris.org 

2000-09-11 19:05   Jim Blandy &lt;jimb@redhat.com&gt;

	* configure.in (1.26), ac-helpers/berkeley-db.m4 (1.1):

	* ac-helpers/berkeley-db.m4: New file.  
	
	* configure.in: Call SVN_CHECK_BERKELEY_DB, to make sure we are 
	linking against the right version of Berkeley DB.  

2000-09-11 12:35   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.11):

	Doc fix.  

2000-09-11 06:01   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: dav_svn.h (1.2), mod_dav_svn.c (1.4),
	repos.c (1.2):

	mod_dav changed how repository providers are registered and found: 
	- tossed the get_resource hook 
	- added call to dav_register_repository() 

2000-09-11 05:54   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/: libsvn_subr/.cvsignore (1.3, milestone-1),
	libsvn_wc/.cvsignore (1.4) (utags: milestone-1-beta):

	[ patch from Joe Orton ] 
	
	additional files/dirs to ignore 

2000-09-11 05:50   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/: adm_files.c (1.17), wc.h (1.17):

	adm_files.c: 
	    (adm_subdir): Joe Orton noted this function was unsafe. Removed 
	        the pool argument and changed the return type to a const
	        char *.  
	
	wc.h, adm_files.c: added "const" to several function param types 

2000-09-11 05:46   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/get_editor.c (1.40):

	clean out an unused variable 

2000-09-11 05:42   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_delta/xml_parse.c (1.97):

	mark svn_delta__tagmap as a constant 

2000-09-11 04:46   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.6):

	(get_next_child_subdir): remove "done" variable -- unused.  

2000-09-11 04:21   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: libsvn_delta/Makefile.am (1.9),
	tests/libsvn_delta/Makefile.am (1.3), libsvn_fs/Makefile.am (1.2),
	libsvn_ra_dav/Makefile.am (1.4, milestone-1, milestone-1-beta),
	libsvn_subr/Makefile.am (1.6), libsvn_wc/Makefile.am (1.12),
	tests/libsvn_subr/Makefile.am (1.6), tests/libsvn_wc/Makefile.am
	(1.7), mod_dav_svn/Makefile.am (1.4), tests/Makefile.am (1.3):

	[ patch concept from Joe Orton ] 
	
	*/Makefile.am: tell libtool to be a bit more quiet when working 

2000-09-11 04:13   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_delta/xml_parse.c (1.96):

	[ patch from Joe Orton ] 
	
	(xml_validation_error): renamed from XML_validation_error. the XML_
	    is Expat's prefix... stay away.  

2000-09-11 04:08   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_string.h (1.32):

	[ patch from Joe Orton ] 
	
	svn_string.[ch]: Change size_t types to apr_size_t.  

2000-09-11 04:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_path.h (1.11), libsvn_subr/path.c
	(1.12):

	[ patch from Joe Orton ] 
	
	(svn_path_add_component_nts, svn_path_add_component,
	    svn_path_isempty): add const to some of the parameters 

2000-09-11 03:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/adm_crawler.c (1.5):

	(get_next_child_subdir): changed an = to an ==. patch from Joe
	Orton.  

2000-09-09 12:17   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/mod_dav_svn/: Makefile.am (1.3), dav_svn.h (1.1),
	deadprops.c (1.1), liveprops.c (1.1), mod_dav_svn.c (1.3), repos.c
	(1.1), version.c (1.1):

	more framework 

2000-09-09 11:19   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.25), subversion/mod_dav_svn/Makefile.am (1.2),
	subversion/mod_dav_svn/mod_dav_svn.c (1.2),
	ac-helpers/svn-apache.m4 (1.3):

	* configure.in: also enable AP_DEBUG or we get warnings 
	* svn-apache.m4: export APACHE_INCLUDES for makefile usage 
	* Makefile.am: use APACHE_INCLUDES; drop our private APR reference 
	* mod_dav_svn.c: add basic module framework 

2000-09-09 11:11   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_delta.h (1.83), include/svn_io.h (1.3),
	include/svn_string.h (1.31), libsvn_delta/vcdiff_parse.c (1.12),
	libsvn_delta/xml_parse.c (1.95), libsvn_subr/path.c (1.11),
	libsvn_wc/adm_parse.c (1.10), tests/libsvn_delta/deltaparse-test.c
	(1.32), tests/libsvn_wc/checkout-test.c (1.18):

	Use apr_size_t to describe the size of things in memory, not 
	apr_off_t.  apr_off_t is intended for file offsets.  

2000-09-09 06:17   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/commit.c (1.5):

	checkpoint (and prevent conflicts)...  
	
	just some notes about the operation, plus some initial structures.  

2000-09-09 06:13   Greg Stein &lt;gstein@lyra.org&gt;

	* ac-helpers/svn-apache.m4 (1.2):

	beat it into shape 

2000-09-09 06:01   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.24), ac-helpers/svn-apache.m4 (1.1),
	subversion/Makefile.am (1.11):

	begin some work on trying to find Apache and to determine how the 
	mod_dav_svn module will be built (static vs shared) 

2000-09-09 05:07   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.23), subversion/mod_dav_svn/.cvsignore (1.1,
	milestone-1, milestone-1-beta), subversion/mod_dav_svn/Makefile.am
	(1.1), subversion/mod_dav_svn/mod_dav_svn.c (1.1):

	set up the basic framework for the mod_dav_svn Apache module 

2000-09-08 21:58   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/adm_files.c (1.16):

	(apr_copy_file): just pass NULL to apr_full_write's fourth arg 
	(copy_file): the error string construction was just too painful to
	             see. I put it out of its misery.  

2000-09-08 21:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/adm_crawler.c (1.4), libsvn_wc/adm_files.c
	(1.15), libsvn_wc/adm_ops.c (1.10), libsvn_wc/adm_parse.c (1.9),
	libsvn_wc/get_editor.c (1.39), libsvn_wc/lock.c (1.7),
	libsvn_wc/questions.c (1.4), libsvn_wc/wc.h (1.16),
	tests/libsvn_wc/checkout-test.c (1.17):

	Started getting batonning/locking/logging stuff into shape.  It's in
	a non-working state right now: compiles, but gets an svn_error early
	on when you run it.  
	
	* adm_files.c (apr_copy_file): new func.  Greg, it's not well-tested 
	yet; feel free to grab it or to wait until I've exercised it some 
	more.  
	(copy_file): wrapper for apr_copy_file().  
	(svn_wc__open_adm_file): if opening for write, open a tmp file 
	instead, and if appending too, then copy original file to tmp first.  
	(svn_wc__close_adm_file): take new `write' arg, rename tmp file to 
	orig after closing if non-zero.  All callers changed.  
	(svn_wc__make_admin_thing): fix error message.  
	(init_adm_file): replaces `init_contents_thing', creates the file
	now.  
	(init_adm): rewrite to use new init_adm_file().  Don't take version
	arg anymore, just init to version 0.  Unlock the dir when done, as
	locking is a shorter-term thing now.  
	(svn_wc__ensure_adm): don't take or pass along version anymore.  
	Callers changed.  
	(svn_wc__ensure_prepare_wc): don't take or pass along version
	anymore.  Callers changed.  
	
	* adm_parse.c: leftovers -- svn_xml_get_attr_value replaces 
	svn_get_xml_attr_value.  
	(svn_wc__versions_init_contents): fix xml string.  
	
	* adm_crawler.c (svn_wc_crawl_local_mods): pass correct number of
	args to svn_wc_crawl_local_mods().  
	
	* lock.c (svn_wc__lock): better error message.  
	
	* questions.c (svn_wc__working_copy_p): check for `README', like the 
	documentation says, not `repository'.  
	
	* get_update.c: started fixing up locking and baton conventions.  
	Changes incomplete, and tentative.  
	
	* wc.h: adjust for all of above changes.  
	
	* checkout-test.c: place `editor' correctly in args.  

2000-09-08 20:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.21):

	(svn_wc_crawl_local_mods): fix prototype.  

2000-09-08 19:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/xml_parse.c (1.94):

	(maybe_derive_ancestry): revert Ben's tentative change of just now, 
	he's gone home and it segfaults under certain circumstances.  
	
	Caller changed.  
	
	Ben, let's talk about ancestry soon; I'm not sure 
	maybe_derive_ancestry() needs the digger information -- the delta 
	should always have the ancestry somewhere before the top, I think.  

2000-09-08 19:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.3), libsvn_delta/xml_parse.c
	(1.93), libsvn_subr/xml.c (1.3):

	(svn_xml_get_attr_value): replaces `svn_get_xml_attr_value'.  If
	it's in the svn_xml header file, it should be in the svn_xml_
	namespace.  
	
	All callers changed.  

2000-09-08 19:24   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_xml.h (1.2), libsvn_delta/xml_parse.c
	(1.92), libsvn_subr/xml.c (1.2), libsvn_wc/adm_parse.c (1.8):

	(svn_get_xml_attr_value): renamed from get_attribute_value for
	    namespace protection. added "const" to the "name" argument.  xml.c:
	added include of "svn_xml.h" to pick up the prototype 

2000-09-08 18:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/structure (1.1):

	Notes on the structure of the filesystem.  

2000-09-08 18:14   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/fs.h (1.4):

	Delete discussion of node id's.  This isn't the right place for it.  

2000-09-08 18:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/err.c (1.3):

	#include "svn_fs.h" directly, even though "fs.h" does too.  Every
	file should directly #include everything it directly uses; it
	shouldn't rely on other headers to bring the right things in, unless
	that's their purpose.  

2000-09-08 18:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/libsvn_fs/fs.c (1.3):

	Random changes, but they compile.  
	
	#include "svn_fs.h" directly, even though "fs.h" does too.  Every
	file should directly #include everything it directly uses; it
	shouldn't rely on other headers to bring the right things in, unless
	that's their purpose.  
	
	(check_already_open, allocate_env): New functions.  
	(svn_fs_newfs): Call check_already_open and allocate_env.  
	
	(open_table, svn_fs_open): New functions.  
	
	(cleanup_fs_apr): Return SVN_ERR_FS_CLEANUP when the cleanup fails.  
	
	(create_table): Tweaks.  

2000-09-08 18:08   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.10):

	Doc fix.  

2000-09-08 18:08   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.9):

	Doc fixes.  
	
	(svn_fs_dir_subpool, svn_fs_file_subpool): Renamed from 
	svn_dir_subpool, svn_file_subpool.  
	
	(svn_fs_begin_txn): Let the caller specify a pool for TXN to live
	in.  
	(svn_fs_txn_subpool): New function.  
	
	(svn_fs_add_dir, svn_fs_replace_dir, svn_fs_add_file, 
	svn_fs_replace_file): New POOL argument.  
	
	Add persistent transaction interface.  

2000-09-08 17:40   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.21):

	(SVN_ERR_FS_CLEANUP, SVN_ERR_FS_ALREADY_OPEN): New error codes.  

2000-09-08 17:39   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_io.h (1.2):

	Protect this file against multiple #inclusion.  

2000-09-08 17:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-test.c (1.16):

	(apply_delta): pass dest and version to svn_xml_auto_parse().  

2000-09-08 17:02   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/xml_parse.c (1.91),
	tests/libsvn_delta/deltaparse-test.c (1.31):

	Saving state, toying with xml_parse.c (maybe_derive_ancestry).  

2000-09-08 16:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.27), xml_parse.c (1.90):

	
	 * delta.h 
	   (svn_xml__digger_t):  add rootdir_baton field, to preserve
	   original `top level' directory baton 
	
	 * xml_parse.c 
	   (svn_xml_parsebytes):  when finished, call editor's `finish_edit'
	   callback 

2000-09-08 16:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.46):

	Mention ref-counting during updates.  

2000-09-08 16:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/: libsvn_delta/.cvsignore (1.3),
	libsvn_wc/.cvsignore (1.3):

	Update ignores (patch from Joe Orton &lt;joe@light.plus.com&gt;).  

2000-09-08 15:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.82), libsvn_delta/delta.h
	(1.26), libsvn_delta/xml_parse.c (1.89), libsvn_wc/adm_crawler.c
	(1.3), tests/libsvn_delta/deltaparse-test.c (1.30):

	
	 Refining xml parsing interface to take "contextual" arguments when 
	 evaluating tree-deltas.  
	
	 * delta.h 
	   (svn_delta__digger_t):  now contains context variables 
	   "base_version" and "base_path" for deriving ancestry in 
	   tree-deltas.  
	   (svn_xml_parser_t):  added "my_pool" argument.  
	
	 * svn_delta.h, xml_parse.c 
	   (svn_make_xml_parser): 
	     - now requires the two new context variables 
	       mentioned above;  these become a permanent part of the 
	       svn_xml_parser_t.  
	     - Also, everything is created in a *subpool*, so the entire 
	       parser can be freed later.  
	   (svn_free_xml_parser):  new function, self-explanatory.  
	   (svn_xml_auto_parse): 
	     - requires two new context variables (to create internal xml
	     parser) 
	- free internal xml parser when finished.  
	
	 * deltparse-test.c 
	   (main) invoke svn_xml_auto_parse correctly, using new arguments.  

2000-09-08 15:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: adm_files.c (1.14), adm_ops.c (1.9), wc.h
	(1.15):

	Got rid of `initial_unwind' argument(s) when ensuring a working
	copy.  Instead: 
	
	(init_adm): create dir in a locked state.  
	(svn_wc__ensure_adm): take int *exists_already arg, set according to 
	result of check_adm_exists().  
	(svn_wc__ensure_prepare_wc): if working copy already existed, then 
	just lock it, else create it locked.  

2000-09-08 15:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.45):

	Document log file, which replaces the unwind stack.  
	
	Doing things in a loggy way, rather than a stacky way, removes the 
	restriction that all tree delta events must happen in a perfectly 
	nesty way.  

2000-09-08 14:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/Makefile.am (1.11):

	(libsvn_wc_la_SOURCES): `get_editor' replaces `make_walker'.  

2000-09-08 14:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/get_editor.c (1.38):

	Oops -- changes referred to in previous commit are actually in this 
	one.  
	
	Also: 
	(e_baton): replaces w_baton, and `eb' replaces `wb' in local vars 
	throughout the file.  

2000-09-08 14:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_io.h (1.1):

	DOH... Forgot to add this file earlier.  

2000-09-08 14:14   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_ra.h (1.6):

	a duplicate definition for svn_ra_get_commit_editor() ended up here
	somehow.  

2000-09-08 13:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.81), include/svn_ra.h (1.5),
	include/svn_wc.h (1.20), libsvn_delta/delta.h (1.25),
	libsvn_delta/xml_parse.c (1.88),
	tests/libsvn_delta/deltaparse-test.c (1.29), libsvn_ra_dav/commit.c
	(1.4), libsvn_ra_dav/fetch.c (1.7), libsvn_wc/adm_parse.c (1.7),
	libsvn_wc/make_walker.c (1.38), tests/libsvn_wc/checkout-test.c
	(1.15):

	(svn_delta_edit_fns_t): replaces `svn_delta_walk_t'.  
	
	References throughout Subversion changed accordingly, including 
	comments and parameter names.  Also: 
	
	* get_editor.c: replaces make_walker.c.  
	(svn_wc_get_update_editor): replaces `svn_wc_get_change_walker'.  

2000-09-08 10:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.80), include/svn_fs.h (1.8),
	libsvn_delta/xml_parse.c (1.87), libsvn_wc/adm_parse.c (1.6),
	tests/libsvn_wc/checkout-test.c (1.14):

	
	 Rename "svn_delta_read_fn_t" to "svn_read_fn_t" everywhere.  
	
	 Place svn_read_fn_t into new file `svn_io.h', and #include this file 
	 where necessary.  
	
	 * svn_io.h :  new header 
	 * svn_delta.h, svn_fs.h:  #include "svn_io.h" 
	 * apply_delta.c 
	   (apply_delta): rename svn_delta_read_fn_t to svn_read_fn_t 
	 * xml_parse.c 
	   (svn_xml_auto_parse): rename svn_delta_read_fn_t to svn_read_fn_t 
	 * adm_parse.c 
	   (svn__wc_parse_versions): rename svn_delta_read_fn_t to
	   svn_read_fn_t 

2000-09-08 05:43   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_ra.h (1.4):

	oops. missed a previous commit. found by Daniel Stenberg.  
	
	*) fix two prototypes 

2000-09-07 18:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.14, milestone-1):

	Document ChangeLog generation better.  

2000-09-07 18:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.20), include/svn_wc.h (1.19),
	libsvn_delta/xml_parse.c (1.86), libsvn_wc/README (1.44),
	libsvn_wc/adm_crawler.c (1.2), libsvn_wc/adm_files.c (1.13),
	libsvn_wc/adm_ops.c (1.8), libsvn_wc/adm_parse.c (1.5),
	libsvn_wc/get_editor.c (1.37), libsvn_wc/lock.c (1.6),
	libsvn_wc/make_walker.c (1.37), libsvn_wc/wc.h (1.14):

	Started implementing an unwind stack and cleanup code for working
	copy operations: 
	
	* svn_error.h (SVN_ERR_WC_UNWIND_MISMATCH, SVN_ERR_WC_UNWIND_EMPTY, 
	SVN_ERR_WC_UNWIND_NOT_EMPTY): new errors.  
	(SVN_ERR_WC_LOCKED): replaces SVN_ERR_ENCOUNTERED_LOCK.  
	
	* adm_files.c (extend_admin_name, chop_admin_name): return and
	accept the number of components, respectively.  All callers changed.  
	(svn_wc__open_adm_thing): started special handling for write case,
	but #ifdef'd out until working.  
	(svn_wc__ensure_adm, init_adm): take and pass along new 
	`initial_unwind' arg, use it to make sure the directory is created
	in a pre-wound-up state.  
	
	* adm_ops.c (svn_wc__pop_unwind, svn_wc__push_unwind, 
	svn_wc__unwind_all, svn_wc__unwind_empty_p): new functions.  
	(svn_wc__ensure_wc_prepared): take and pass along new 
	`initial_unwind' arg.  All callers changed.  
	(svn_wc__working_name): removed, we won't be needing this.  
	
	* make_walker.c (add_directory, add_file, finish_directory): push
	and pop the unwind stack as appropriate.  
	(finish_walk): new func -- unlocks, unwinds, and frees the pool.  
	(change_walker): add `finish_walk'.  
	(svn_wc_get_change_walker): make a subpool immediately, use it for 
	everything and store it in the walk baton.  
	
	* svn_delta.h (svn_delta_walk_t): new `finish_walk' callback.  Note 
	that this change was accidentally included added in my previous
	commit to this file, revision 1.79.  
	
	* adm_parse (svn_wc__parse_versions): started, but still skeletal.  
	
	* lock.c (svn_wc__lock): fix logic.  
	
	* wc.h: adjust for all of above.  
	(SVN_WC__UNWIND_UPDATE, SVN_WC__UNWIND_MV, SVN_WC__UNWIND_MERGE):
	new #defines.  
	
	Also, these minor tweaks: 
	
	* (SVN_ERR_UNFRUITFUL_DESCENT): comma.  
	* svn_wc.h (svn_wc_crawl_local_mods): semicolon after prototype.  
	* xml_parse.c (xml_handle_end): grammaro.  
	* README: `unwind' file replaces `pending', more documentation.  
	* adm_crawler.c: #include a bunch of needed stuff.  
	(do_crawl): fix semicolon, and build a proper svn_error_t for
	return.  

2000-09-07 17:53   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.7):

	Remove `extern' keyword from function declarations.  They're 
	unnecessary (old habit), and inconsistent with the rest of the code 
	base.  

2000-09-07 17:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.79):

	(svn_delta_add, svn_delta_delete, svn_delta_replace): removed these
	enums.  

2000-09-07 16:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/lock.c (1.5):

	revert previous change, i.e., revert to 1.3 

2000-09-07 16:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/lock.c (1.4):

	Temporarily check in locking code that's conscious of the unwind
	file.  (I don't think this will be how things go later, but want to
	preserve the start of this path just in case.) 

2000-09-07 15:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_wc.h (1.18), libsvn_client/adm_crawler.c
	(1.6), libsvn_wc/Makefile.am (1.10), libsvn_wc/adm_crawler.c (1.1):

	
	 * Move adm_crawler.c from libsvn_client to libsvn_wc 
	
	 * wc.h  (svn_wc_crawl_local_mods):  new public routine 
	 * Makefile.am :  added adm_crawler.c 

2000-09-07 12:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.6):

	Reasonably complete first cut at filesystem interface.  Includes 
	reading and writing, with transactions.  Not included yet: delta 
	computation, non-historical properties.  

2000-09-07 11:43   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.5):

	Doc fixes.  

2000-09-07 08:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.19),
	libsvn_client/adm_crawler.c (1.5):

	
	 Algorithm still has some pseudocode, but much smarter now.  Using
	 new return value SVN_ERR_UNFRUITFUL_DESCENT to insure that only
	 tree-branches that *actually* contain local mods are returned! 

2000-09-06 23:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/adm_crawler.c (1.4):

	Fleshing out depth-first search;  still mostly pseudocode.  

2000-09-06 20:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-test.c (1.13):

	
	 * checkout-test.c 
	   (apply_delta):  call svn_xml_auto_parse, not svn_xml_parse.  

2000-09-06 19:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/adm_crawler.c (1.3):

	Clarify comments, begin work.  

2000-09-06 18:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.78),
	libsvn_client/adm_crawler.c (1.2), libsvn_delta/delta.h (1.24),
	libsvn_delta/xml_parse.c (1.85),
	tests/libsvn_delta/deltaparse-test.c (1.28):

	
	 Factorize svn_xml_parse into *two* routines, and add a new opaque 
	 type and public constructor: 
	
	 * svn_delta.h: 
	   (svn_xml_parser_t):  declaration of new public parser type
	   (opaque) 
	(svn_make_xml_parser):  new public routine to create an
	   svn_xml_parser_t 
	(svn_xml_parsebytes):  new public routine that *pushes* bytes at an 
	   svn_xml_parser_t 
	   (svn_xml_auto_parse):  new name of svn_xml_parse ("auto" because
	   it does everything internally, including the creation of an 
	   svn_xml_parser_t, and because it "pulls" data from a source 
	   automatically until the stream runs dry.) 
	
	 * delta.h: 
	   (svn_xml_parser_t):  concrete declaration of type (in private
	   space) 
	
	 * xml_parse.c 
	   (svn_make_xml_parser):  new routine, returns an svn_xml_parser.  
	   (svn_xml_parsebytes):  new routine -- see description above.  
	   (svn_xml_auto_parse):  now a *wrapper* around svn_xml_parsebytes! 
	   -- see above.  
	
	 * deltaparse-test.c: 
	   (main):  renamed "svn_xml_parse" to "svn_xml_auto_parse".  

2000-09-06 18:49   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_fs.h (1.4):

	First cut at filesystem interface.  Incomplete.  

2000-09-06 16:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.43):

	note to self 

2000-09-06 16:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.42):

	Clarify usage of `SVN/tmp'.  

2000-09-06 15:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_client/adm_crawler.c (1.1):

	Adding new file.  

2000-09-06 15:05   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.27):

	Check for NULLs in sample walker callbacks.  

2000-09-06 13:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.41):

	Discuss generalization of `pending' file algorithm.  

2000-09-06 13:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.40):

	grammaro 

2000-09-06 13:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.39):

	Specify crash-recovery technique more precisely, using a single 
	`pending' file instead of the `doing/' directory.  

2000-09-06 12:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: get_editor.c (1.36), make_walker.c (1.36):

	(add_directory): comment -- note need to drop a marker, and undrop 
	later.  

2000-09-05 20:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/xml_parse.c (1.84),
	libsvn_wc/adm_parse.c (1.4):

	#include svn_xml.h.  

2000-09-05 19:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_parse.c (1.3):

	Doc fix.  

2000-09-05 19:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.77):

	Previous revision (1.76) should have said: 
	
	(svn_delta_add, svn_delta_delete, svn_delta_replace): new enum
	values.  

2000-09-05 19:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.76), libsvn_wc/adm_parse.c
	(1.2), libsvn_wc/wc.h (1.13):

	Initial code for wc adm xml parsing (still in morph stage).  

2000-09-05 19:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_xml.h (1.1), libsvn_delta/xml_parse.c
	(1.83), libsvn_subr/Makefile.am (1.5), libsvn_subr/xml.c (1.1):

	* svn_xml.h: new file, declares `get_attribute_value'.  
	* xml.c: new file, part of libsvn_subr.  
	(get_attribute_value): moved to here from xml_parse.c, in
	anticipation of use in the working copy library.  Also, switched
	order of arguments (all callers changed).  

2000-09-05 18:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.12):

	(init_adm): correct URL (duh).  

2000-09-05 18:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile.am (1.9), adm_files.c (1.11),
	adm_parse.c (1.1), wc.h (1.12):

	* adm_parse.c (svn_wc__versions_init_contents): new file, new func.  
	* adm_files.c (init_adm): use it.  

2000-09-05 18:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/xml_parse.c (1.82),
	libsvn_wc/get_editor.c (1.35), libsvn_wc/make_walker.c (1.35):

	Make summary comments at tops of these files match the files' names.  

2000-09-05 18:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile.am (1.8), apply_delta.c (1.35):

	* make_walker.c: renamed from `apply_delta.c'.  

2000-09-05 15:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.23), xml_parse.c (1.81):

	
	 * xml_parse.c, delta.h  : 
	       rename svn_delta__digger_t --&gt; svn_xml__digger_t 
	       rename svn_delta__stackframe_t --&gt; svn_xml__stackframe_t 

2000-09-05 15:16   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.22), xml_parse.c (1.80):

	 Check for namespace collisions when adding/replacing entries within
	 a tree-delta.  (This is done by storing names within hashes within 
	tree-delta stackframes.)  I think this is the last bit of XML 
	validation we need to worry about for now.  
	
	 * delta.h 
	   (svn_delta__stackframe_t): added `namespace' hash 
	
	 * xml_parse.c 
	   (check_dirent_namespace):  added 
	   (do_stack_append):  call check_dirent_namespace() before
	   appending.  
	(xml_handle_start):  when creating new tree-delta frame, initialize
	hash.  

2000-09-05 13:15   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.75):

	Doc fixes.  
	
	I've replaced the little `push interface' divider in the page of 
	VCDIFF handling functions with what I think are clearer comments. 
	It should easier to see which functions do what now.  

2000-09-05 12:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/Makefile.am (1.8):

	(libsvn_delta_la_SOURCES): compile xml_parse.c now, not
	delta_parse.c.  

2000-09-05 12:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/delta_parse.c (1.80):

	renamed to xml_parse.c 

2000-09-05 10:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* autogen.sh (1.14):

	autogen.sh:  Because helpers/ was renamed to ac-helpers/, we need to 
	include ac-helpers/ when running aclocal, right?  :) 

2000-09-04 20:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.13):

	Mention `--fsf' flag to cvs2cl.  

2000-09-04 17:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.22):

	dir is ac-helpers now, not helpers 

2000-09-04 15:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.17), libsvn_wc/apply_delta.c
	(1.34), libsvn_wc/get_editor.c (1.34), libsvn_wc/make_walker.c
	(1.34), tests/libsvn_wc/checkout-test.c (1.12):

	(svn_wc_apply_delta): removed from public interface, as 
	svn_wc_get_change_walker() is the way to do this now.  
	
	* checkout-test.c (apply_delta): new func in test suite, hooks up an 
	XML delta with a walker to do the checkout.  

2000-09-02 05:39   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.3), fetch.c (1.6):

	(svn_ra_checkout): don't pass pool; use the one in "ras" 
	(svn_ra_get_commit_walker): add 'ras' param and drop the TBD thing 

2000-09-02 05:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_wc.h (1.16), libsvn_wc/apply_delta.c
	(1.33), libsvn_wc/get_editor.c (1.33), libsvn_wc/make_walker.c
	(1.33):

	(svn_wc_apply_delta): use svn_wc_get_change_walker() to create
	    walker and batons for the XML parse step 
	(svn_wc_get_change_walker): add repos and version parameters. store
	    them into the walk_baton structure.  

2000-09-02 05:00   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/: commit.c (1.2), fetch.c (1.5):

	tweak: update to new walker callback interfaces 

2000-09-02 03:48   Greg Stein &lt;gstein@lyra.org&gt;

	* .cvsignore (1.3), autogen.sh (1.13), configure.in (1.21),
	ac-helpers/.cvsignore (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta),
	ac-helpers/svn-macros.m4 (1.1, milestone-1-beta):

	create the helpers/ directory to contain autoconf stuff add
	helpers/svn-macros.m4: holds macros for autoconf use pass -I helpers
	to the aclocal program to pick up helpers/*.m4 add SVN_CONFIG_NICE
	    autoconf macro: creates a config.nice file which runs configure from
	    scratch with the same options as the previous run (config.status
	only regenerates the output) adjust .cvsignore files as necessary 

2000-09-01 23:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.15):

	(svn_wc_apply_delta): new `version' parameter.  

2000-09-01 23:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/adm_files.c (1.10), libsvn_wc/adm_ops.c
	(1.7), libsvn_wc/apply_delta.c (1.32), libsvn_wc/get_editor.c
	(1.32), libsvn_wc/make_walker.c (1.32), libsvn_wc/wc.h (1.11),
	tests/libsvn_wc/checkout-test.c (1.11):

	Include version number as part of the "context" of a delta
	application: 
	
	(w_baton): new version field.  
	(svn_wc_apply_delta): take version arg, stuff it into walk baton.  
	(add_directory, add_file): get version, pass it along.  
	(svn_wc__ensure_adm, svn_wc__ensure_wc_prepared): accept and pass
	along new version arg.  
	(init_adm): take version, use it during file initialization.  

2000-09-01 23:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: apply_delta.c (1.31), get_editor.c (1.31),
	make_walker.c (1.31):

	(svn_wc_get_change_walker): minor formatting fix.  

2000-09-01 23:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.38), adm_files.c (1.9),
	adm_ops.c (1.6), apply_delta.c (1.30), get_editor.c (1.30),
	make_walker.c (1.30), wc.h (1.10):

	Rewritten.  

2000-09-01 23:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.41):

	(svn_dir_kind): replaces svn_directory_kind, enough keystrokes
	already.  

2000-09-01 17:38   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.74):

	Doc fixes.  

2000-09-01 17:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.28, milestone-1, milestone-1-beta):

	XML tagname "add" replaces "new".  

2000-09-01 17:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/delta.h (1.21),
	libsvn_delta/delta_parse.c (1.79), libsvn_delta/xml_parse.c (1.79),
	tests/libsvn_delta/foo.delta (1.7),
	tests/libsvn_wc/checkout-1.delta (1.8):

	Use "add" as the tagname everywhere, instead of "new".  All sample
	deltas updated, and: 
	
	(svn_delta__tagmap): "add" replaces "new".  
	(svn_delta__XML_t): svn_delta__XML_add replaces svn_delta__XML_new.  

2000-09-01 17:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.26):

	
	 * deltaparse-test.c:  (print_spaces, inc_spaces, dec_spaces) added.  
	   (all other routines): above calls added, for pretty spacing of
	   output.  

2000-09-01 16:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/adm_files.c (1.8):

	(chop_admin_thing): replaces `chop_admin_name'.  
	(svn_wc__make_adm_thing): special case making an empty thing, i.e., 
	making the parent directory.  

2000-09-01 16:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.78), xml_parse.c
	(1.78):

	(do_file_callback): oops, clean up a leftover from previous change.  

2000-09-01 16:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.77), xml_parse.c
	(1.77):

	(do_directory_callback): avoid initialization issues by eliminating 
	local var `child_baton' in favor of
	`&(youngest_frame-&gt;child_baton)'.  
	(do_file_callback): same as above, but for `file_baton'.  

2000-09-01 16:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.76), xml_parse.c
	(1.76):

	(do_begin_textdelta): init window_consumer to NULL, so it's safe
	even if the walker callback never sets it.  

2000-09-01 16:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.73),
	libsvn_delta/delta_parse.c (1.75), libsvn_delta/xml_parse.c (1.75),
	tests/libsvn_delta/deltaparse-test.c (1.25):

	
	 Adding walk_baton to the only two walker callbacks that didn't 
	 already receive it.  
	
	 * svn_delta.h (svn_delta_walk_t): add walk_baton to finish_directory 
	   and finish_file.  
	 * delta_parse.c (do_finish_file, do_finish_directory): add
	   walk_baton to callback invocations.  
	 * deltaparse-test.c (test_finish_file, test_finish_directory): add 
	   walk_baton argument.  

2000-09-01 16:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.72),
	libsvn_delta/delta_parse.c (1.74), libsvn_delta/xml_parse.c (1.74),
	tests/libsvn_delta/deltaparse-test.c (1.24):

	
	 As Karl suggests, change XML to xml in all symbols.  
	
	 * svn_delta.h (svn_XML_parse) renamed to svn_xml_parse 
	 * delta_parse.c  (svn_XML_parse) renamed to svn_xml_parse 
	 * deltaparse-test.c (svn_XML_parse) renamed to svn_xml_parse 

2000-09-01 16:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.71):

	Revert recent `local-variables' change.  

2000-09-01 16:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.12):

	Revert advice about `local-variables' for Emacs.  It seems Emacs
	wants to see a consistent prefix, and putting it on the first line
	of the comment interferes with this.  

2000-09-01 16:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.10),
	libsvn_delta/delta_parse.c (1.73), libsvn_delta/xml_parse.c (1.73),
	libsvn_subr/path.c (1.10), libsvn_wc/adm_files.c (1.7),
	libsvn_wc/apply_delta.c (1.29), libsvn_wc/get_editor.c (1.29),
	libsvn_wc/make_walker.c (1.29), libsvn_wc/util.c (1.7):

	Partially revert my change of 2000-08-31 15:29.  The svn_path
	library now side-effects its operands again; all callers changed to
	account for this, but not always exactly as they worked before.  
	
	* path.c, path.h (add_component_internal): revert to 1.7 behavior,
	but also canonicalize result.  
	(svn_path_add_component_nts, svn_path_add_component): revert to 1.7 
	behavior.  
	(svn_path_remove_component): revert to 1.7 behavior and prototype.  
	
	* delta_parse.c (maybe_derive_ancestry): dup a new path and add name 
	to it as a component, to get ancestor.  
	
	* adm_files.c: revert to 1.5: 
	(extend_with_adm_name): back to this name instead of
	`make_adm_path', callers changed accordingly.  
	(chop_admin_name): restored, calls restored as well.  
	
	* util.c (svn_wc__ensure_directory): dup a new path, then shorten
	it, when recursing.  
	
	* apply_delta.c (maybe_prepend_dest, add_directory, add_file, 
	finish_file): dup a new path, then operate on that.  
	
	Also, changes to accommodate new names: 
	
	* apply_delta.c (svn_wc_apply_delta): it's `svn_XML_parse' now, not 
	`svn_delta_parse'.  

2000-09-01 11:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.70),
	libsvn_delta/delta_parse.c (1.72), libsvn_delta/xml_parse.c (1.72),
	tests/libsvn_delta/deltaparse-test.c (1.23):

	
	 MAJOR RENAME:  svn_delta_parse() is now renamed svn_XML_parse() ! 
	
	 * svn_delta.h:  (svn_delta_parse): renamed to svn_XML_parse 
	 * delta_parse.c:  (svn_delta_parse): renamed to svn_XML_parse 
	 * deltaparse-test.c: (main):  call svn_XML_parse 

2000-08-31 22:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/delta_parse.c (1.71),
	libsvn_delta/xml_parse.c (1.71), tests/libsvn_delta/foo.delta
	(1.6):

	
	 Fixed property-parsing buglets.  The trick was that xml_handle_end 
	 shouldn't remove a stackframe right at the outset;  instead it
	 should first *validate* that the removal is ok, *then* call walker 
	 callbacks, *then* remove the stackframe.  I had implemented this 
	 correctly earlier, but I hadn't updated property-handling to
	 reflect this change! 
	
	 * foo.delta:  added more prop-deltas to experiement.  
	
	 * delta_parse.c: 
	   (do_begin_propdelta): set current_propdelta fields to empty 
	   strings, not NULL.  
	   (do_propdelta_callback): if value is empty string, send NULL to 
	   callback.  Set name/value to empty (not null) when done.  
	   (xml_handle_end): check parent frame's tag for property
	   deletions, duh.  

2000-08-31 22:22   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.12):

	add a comment. suggest the user of --with-maintainer-mode 

2000-08-31 22:22   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.20):

	additional config work: 
	
	*) remove AC_PROG_MAKE_SET and AC_PROG_INSTALL invocations because 
	   AM_INIT_AUTOMAKE calls these 
	
	*) run the subdir configs if --enable-subdir-config is passed 
	
	*) remove the automatic GCC flag munging: depend on cmdline switches 
	
	*) add --with-debug for USERS. sets some basic debug options.  
	
	*) add --with-maintainer-mode for DEVELOPERS. sets stricter compile
	   options and defines SVN_DEBUG. the latter symbol allows us to insert
	   additional assertions or other debug code that should never be
	   present in user installations.  
	
	*) define the SVN_VERSION symbol based on AM_INIT_AUTOMAKE's version
	arg 

2000-08-31 17:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.69):

	Fix up one page title.  

2000-08-31 17:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.68):

	Follow conventions for titles after page breaks.  

2000-08-31 17:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.11):

	Document page break conventions, and adhere to them.  

2000-08-31 16:22   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.67):

	Doc fixes.  

2000-08-31 16:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/delta.h (1.20),
	libsvn_delta/delta_parse.c (1.70), libsvn_delta/xml_parse.c (1.70),
	tests/libsvn_delta/deltaparse-test.c (1.22):

	
	 Working out bugs in new libsvn_delta organization.  Still a couple
	 of buglets to go, but we're no longer crashing.  (knock, knock).  
	
	 * deltaparse_test.c: 
	   (test_add_directory, test_replace_directory):  set *child_baton
	   to new directory's name.  
	   (test_change_file_prop, test_change_dir_prop, 
	   test_change_dirent_prop):  added new test functions.  
	   (general):  add nicer indentation in my own callbacks.  
	
	 * delta.h: 
	   (svn_propdelta_t): add new entry_name field to hold name of
	   object being patched -- (needed by walker's change_dirent_prop).  
	
	 * delta_parse.c: 
	   (do_begin_prop delta): copy parent stackframe's 'name' field into 
	   current_propdelta-&gt;entity_name.  
	   (do_prop_delta_callback):  pass this entity_name to
	   change_dirent_prop.  
	(do_finish_file):  drop batons *after* calling walker callback.  
	   (do_finish_directory): drop batons *after* calling walker
	   callback.  
	(do_stack_remove):  only validates the stackframe removal now, 
	   renamed to do_stack_check_remove.  
	   (xml_handle_end): do the stackframe removal at the *end* of this
	   routine.  

2000-08-31 15:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/path.c (1.9):

	(add_component_internal): fix braino.  

2000-08-31 15:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.9), libsvn_delta/delta_parse.c
	(1.69), libsvn_delta/xml_parse.c (1.69), libsvn_subr/path.c (1.8),
	libsvn_wc/adm_files.c (1.6), libsvn_wc/apply_delta.c (1.28),
	libsvn_wc/get_editor.c (1.28), libsvn_wc/make_walker.c (1.28),
	libsvn_wc/util.c (1.6):

	Change path library to always return non-shared results, instead of 
	side-effecting its arguments (part of making libsvn_wc insensitive
	to whether delta traversal happens depth-first vs breadth-first): 
	
	* path.c (add_component_internal): make and return a new string, 
	canonicalizing it before returning.  
	(svn_path_add_component_nts, svn_path_add_component): return a new 
	string.  
	(svn_path_remove_component): return a new string, and take a new
	pool arg therefore.  
	
	* delta_parse.c (maybe_derive_ancestry): use new svn_path semantics; 
	tighten up code and comments.  
	
	* adm_files.c (make_adm_path): replaces extend_with_adm_name(), no 
	longer requires the caller to "unmake" the name later.  Callers
	changed accordingly.  
	(chop_admin_name): removed, no longer necessary.  
	
	* util.c (svn_wc__ensure_directory): use new svn_path semantics, 
	improve comments.  
	
	* apply_delta.c (maybe_prepend_dest, add_directory, add_file, 
	finish_file): use new svn_path semantics.  
	
	Also, changes to accommodate new names: 
	
	* apply_delta.c (window_handler): it's "txdelta", not "delta".  

2000-08-31 12:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.66), libsvn_delta/delta.h
	(1.19), libsvn_delta/delta_parse.c (1.68), libsvn_delta/xml_parse.c
	(1.68):

	(svn_delta_parse): make walker argument `const'.  
	(svn_delta__digger_t): make walker field `const'.  

2000-08-31 12:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.11):

	Test for presence of neon/ subdir, exit with error message if none.  

2000-08-31 12:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.65),
	libsvn_delta/delta_parse.c (1.67), libsvn_delta/xml_parse.c (1.67),
	tests/libsvn_delta/deltaparse-test.c (1.21),
	tests/libsvn_delta/foo.delta (1.5):

	 Adopted deltaparse-test program to new walker interface.  (It works 
	 now.) Again, `delta_window' is renamed to `txdelta_window' 
	 everywhere.  
	
	 * deltaparse-test.c: 
	   (main):  take a filename as a command-line argument.  
	   (test_begin_textdelta): renamed to `test_apply_textdelta'.  
	   (test_begin_propdelta): removed, different prop-delta system now.  
	   (test_change_file_prop, test_change_dir_prop, 
	   test_change_dirent_prop): added.  
	   (my_fileprop_handler, my_dirprop_handler, my_direntprop_handler): 
	   deleted.  
	   (test_add_file, test_replace_file, test_apply_textdelta):  deal 
	   with new file_baton.  
	
	 * delta_parse.c: (xml_handle_end):  after &lt;/text-delta&gt;, be sure to 
	   call svn_vcdiff_parse() with len=0.  
	   (do_delete_prop): check for initial existence of
	   current_propdelta.  
	(do_prop_delta_callback): DUH, check for walker callbacks before 
	   trying to call them.  :) 
	
	 * svn_delta.h: (svn_vcdiff_parse): len is not a pointer.  

2000-08-31 10:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/prop_parse.c (1.8):

	prop_parse.c no longer needed; much simpler model now.  

2000-08-31 10:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.66), vcdiff_parse.c
	(1.11), xml_parse.c (1.66):

	 Still adopting libsvn_delta to new walker interface.  
	
	 * vcdiff_parse.c:  (svn_vcdiff_parse): fix `len' argument, it's not
	   a pointer;  better comments;  if (len == 0), flush what's left in
	   buffer.  
	(svn_vcdiff_send_window): better comments.  
	
	 * delta_parse.c:  (xml_handle_data): fix `len' argument, it's not a
	   pointer.  
	(svn_finish_textdelta): deleted;  svn_vcdiff_parse flushes buffer
	instead.  

2000-08-31 09:18   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.19):

	remove a goof that I put in.  

2000-08-31 09:17   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_ra_dav/fetch.c (1.4):

	while I'm thinking about it...  

2000-08-31 08:52   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.3), libsvn_ra_dav/Makefile.am
	(1.3), libsvn_ra_dav/commit.c (1.1), libsvn_ra_dav/fetch.c (1.3):

	continued development.  fetch.c: 
	  - added my_basename() to get the basename of a char* into an
	  svn_string 
	- added fetch_file() to grab files from the server 
	  - added logic to call walker callbacks to create the working copy 
	  - fetch_data is history: it becomes svn_ra_checkout() 
	  - svn_ra_update() is gone. the algorithm will use a walker
	    returned by svn_ra_get_update_walker() 
	  - added svn_ra_get_update_walker() and associated functions
	  (unused) commit.c: 
	  - added svn_ra_get_commit_walker() and associated functions
	  (unused) ra-dav-test.c: 
	  - can't use svn_wc_get_change_walker(), so we add a temporary,
	    internal debug walker to use.  Makefile.am: 
	  - build commit.c and tests subdir svn_ra.h: 
	  - bring up to date with new design 

2000-08-31 08:44   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_wc.h (1.14), libsvn_wc/apply_delta.c
	(1.27), libsvn_wc/get_editor.c (1.27), libsvn_wc/make_walker.c
	(1.27):

	(svn_wc_get_change_walker): ADDED. provides a walker structure for
	    effecting change against the working copy.  
	
	(svn_wc_apply_delta): don't use manual assignments to a walker
	    structure; just use a static, constant structure. added
	"change_walker" struct.  

2000-08-31 08:40   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_path.h (1.8):

	add a new "component style" (for paths) for the URL separator ('/') 

2000-08-30 17:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.64), libsvn_delta/Makefile.am
	(1.7), libsvn_delta/delta.h (1.18), libsvn_delta/delta_parse.c
	(1.65), libsvn_delta/vcdiff_parse.c (1.10),
	libsvn_delta/xml_parse.c (1.65):

	Adopting code in libsvn_delta to use newly revised svn_delta_walk_t 
	interface.  Test program in tests/ DOES NOT YET WORK.pp 
	
	In general, rename all "svn_delta_window_t" references to 
	"svn_txdelta_window_t", and rename "svn_delta_window_handler_t" to 
	"svn_txdelta_window_handler_t".  Rename "svn_delta_op_t" to 
	"svn_txdelta_op_t". Also rename "svn_delta__vcdiff_parser_t" to 
	"svn_vcdiff_parser_t" when moving from private to public header
	file, as well as changing "svn_delta__vcdiff_parse" to
	"svn_vcdiff_parse".  
	
	(Remove all references to pdelta_handler_t, pdelta_parser_t.) 
	* delta.h: (svn_delta__digger_t):  added file_baton and
	  current_propdelta.  
	(svn_delta__stackframe_t): added file_baton.  
	  (svn_vcdiff_parser_t): moved from private to public header.  
	  (svn_make_vcdiff_parser): removed, already declared in public 
	  header.  
	  (svn_vcdiff_send_window): added so delta_parse can flush vcdiff 
	  buffer (temporary only, until we get a real vcdiff implementation) 
	  (svn_propdelta_t): define simpler in-memory prop-delta object.  
	
	* svn_delta.h: (svn_vcdiff_parser_t): added from private header.  
	  (svn_make_vcdiff_parser): added pool arg, to create windows from.  
	
	* delta_parse.c: (do_file_callback, do_finish_file): deal with 
	  file_baton now.  
	  (do_finish_directory): drop the current dir baton when done.  
	  (do_begin_textdelta): call apply_textdelta with new file_baton.  
	  (do_finish_textdelta): scale down to a buffer flush only, no
	  longer a walker callback for this.  
	  (do_prop_delta_callback): added -- calls appropriate walker
	  callback for property deltas.  
	  (do_finish_setprop): deleted, made irrelevant by 
	  do_prop_delta_callback.  
	  (do_begin_propdelta, do_begin_setprop, do_delete_prop): major 
	  rewrite to use new in-memory propdeltas.  
	  (do_finish_propdelta): deleted, no longer needed.  
	  (xml_handle_end): add *specific* test for &lt;/delete&gt; in the context 
	  of a &lt;prop-delta&gt; (as opposed to within a &lt;tree-delta&gt;) 
	  (xml_handle_data): buffer property values internally, no longer
	  need a "property parser" in prop_parse.c 
	
	* vcdiff_parse.c: (svn_delta__vcdiff_flush_buffer): removed, just
	  put the one line into delta_parse.c:do_finish_textdelta.  
	  (svn_vcdiff_send_window): no longer static -- called by 
	  do_finish_text_delta to flush final buffer.  
	
	* prop_parse.c: deleted, no longer needed.  xml_handle_data can
	  buffer property values as they come in from expat.  Much simpler
	now! 
	
	* Makefile.am: remove prop_parse.c 
	
	TODO:  rename svn_delta_parse to something more specific.  
	svn_XML_parse is fine, I think, because it's still a very 
	general-purpose routine;  it takes an read function and a walk_t 
	structure.  
	
	This would work for a "test" program: 
	
	     * reader function presents an XML file; 
	     * callbacks are a bunch of dorky printf's 
	
	It would also work for WC use: 
	
	     * reader function implicitly crawls the working copy, assembling 
	       an XML stream on-the-fly 
	     * callbacks generate DAV calls 
	
	It would also work for WC *internal* use: 
	
	     * reader function implicitly crawls the working copy, assembling 
	       an XML stream on-the-fly 
	     * callbacks generate *new* XML to put in WC administrative
	     files.  

2000-08-30 04:55   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.2), libsvn_ra_dav/fetch.c (1.2),
	libsvn_ra_dav/ra_session.h (1.2, milestone-1, milestone-1-beta),
	libsvn_ra_dav/session.c (1.2), libsvn_wc/apply_delta.c (1.26),
	libsvn_wc/get_editor.c (1.26), libsvn_wc/make_walker.c (1.26):

	wouldn't you know it... the file that I used as a template for the
	    new RA/DAV files' license (it was apply_delta.c) happens to be the
	    only file with a tweak in it. of all that I could have chosen...  

2000-08-30 04:46   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/: include/svn_ra.h (1.1), libsvn_ra_dav/Makefile.am
	(1.2), libsvn_ra_dav/fetch.c (1.1), libsvn_ra_dav/ra_session.h
	(1.1), libsvn_ra_dav/session.c (1.1):

	begin implementation of the RA/DAV layer.  introduced "RA Session"
	concept: svn_ra_open, svn_ra_close.  draft prototypes for:
	svn_ra_update, svn_ra_checkout this "draft" will connect to a DAV
	    server and traverse the URL space to fetch the DAV:target property
	from each member resource.  

2000-08-30 04:39   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_delta.h (1.63):

	eek! bad hack! with these additional types, we can at least include 
	    svn_delta.h and successfully compile. these will disappear RSN.  

2000-08-30 04:37   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/include/svn_error.h (1.18):

	add a couple error codes for RA/DAV usage 

2000-08-30 01:24   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.64), xml_parse.c
	(1.64):

	(svn_delta_parse): fix leaks of Expat parsers 

2000-08-29 23:41   Greg Stein &lt;gstein@lyra.org&gt;

	* configure.in (1.18), subversion/Makefile.am (1.10),
	subversion/libsvn_ra_dav/.cvsignore (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), subversion/libsvn_ra_dav/Makefile.am (1.1):

	add config/build framework for the RA/DAV layer.  

2000-08-29 23:11   Greg Stein &lt;gstein@lyra.org&gt;

	* COPYING (1.4, milestone-1), README (1.9):

	some tweaks about directories and license 

2000-08-29 22:56   Greg Stein &lt;gstein@lyra.org&gt;

	* expat-lite/: CHANGES.svn (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), dllmain.c (1.2), xmlparse.def (1.2), xmltok.def
	(1.2):

	add CHANGES.svn to document our local changes remove
	Windows-specific files since we don't build there yet 

2000-08-29 22:17   Greg Stein &lt;gstein@lyra.org&gt;

	* autogen.sh (1.10), configure.in (1.17), expat-lite/.cvsignore
	(1.1, milestone-1, milestone-1-beta), expat-lite/Makefile (1.3),
	expat-lite/Makefile.am (1.1, milestone-1, milestone-1-beta),
	subversion/tests/libsvn_delta/Makefile.am (1.2),
	subversion/tests/libsvn_wc/Makefile.am (1.6):

	switch expat-lite over to automake (updates tests for libsvn_delta
	    and libsvn_wc to use libexpat.la now) add some initial work on
	config/build for Neon 

2000-08-29 20:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.37):

	Start twisting XML format explanations to match new
	`svn_delta_walk_t' plans.  

2000-08-29 19:36   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.62):

	Major doc fixes.  
	
	(svn_delta_read_fn_t): Moved to its own page at the top; this isn't 
	specific to text or tree deltas.  
	
	Rename text delta functions and types, to avoid confusion with tree 
	delta stuff.  
	(svn_txdelta_op_t): Renamed from svn_delta_op_t.  
	(svn_txdelta_source, svn_txdelta_target, svn_txdelta_new): Renamed
	from svn_delta_source, svn_delta_target, and svn_delta_new.  
	(svn_txdelta_window_t): Renamed from svn_delta_window_t.  
	(svn_txdelta_free_window): Renamed from svn_free_delta_window.  
	(svn_txdelta_window_handler_t): Renamed from
	svn_text_delta_window_handler_t.  
	
	Reinstate the text delta creation and vcdiff handling interfaces.  
	(svn_txdelta_stream_t): New type.  
	(svn_txdelta_next_window, svn_txdelta, svn_txdelta_free, 
	svn_txdelta_to_vcdiff, svn_make_vcdiff_parser, svn_vcdiff_parse):
	New functions.  

2000-08-29 19:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: apply_delta.c (1.25), get_editor.c (1.25),
	make_walker.c (1.25):

	Separate pages for walker callbacks vs their helpers.  
	
	Return SVN_NO_ERROR instead of 0 everywhere.  
	
	Come into line with the new svn_delta_walk_t interface: 
	(change_file_prop, change_dir_prop, change_dirent_prop, 
	apply_textdelta): new callback functions, empty skeletons for now.  
	(begin_textdelta, finish_textdelta): removed, but code preserved 
	verbatim in apply_textdelta(), #ifdef'd out.  
	(svn_wc_apply_delta): set up the new walker appropriately.  
	
	Also, unmush all walker callback function declarations, so they look 
	the same as they do in the definition of `svn_delta_walk_t'.  

2000-08-29 19:01   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/tests/.cvsignore (1.1, milestone-1, milestone-1-beta):

	"Looks like an orange on a toothpick!" 

2000-08-29 15:35   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.61):

	(svn_delta_walk_t): Clean up handling of text and property deltas: 
	Make `add_file' and `replace_file' create a baton to represent the 
	file being created / changed.  Replace `begin_textdelta' and 
	`finish_textdelta' with `apply_textdelta', which uses the file
	baton.  Replace `begin_propdelta' and `finish_propdelta' with 
	`change_dir_prop', `change_dirent_prop', and `change_file_prop'.  
	(svn_propchange_location_t, svn_propchange_t, 
	svn_propchange_handler_t): Delete.  As far as I can tell, these
	aren't any streamier than the simpler interface now in
	svn_delta_walk_t.  

2000-08-29 10:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* COPYING (1.3):

	 * COPYING:  Remove mention of glib.  

2000-08-29 10:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* README (1.8):

	* README:  Added description of subversion/tests-common/.  

2000-08-29 10:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/WritingChangeLogs.txt (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	* WritingChangeLogs.txt : Fixed typo.  

2000-08-29 10:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* HACKING (1.10):

	* HACKING: Added pointer to automated-test-suite README file.  

2000-08-28 20:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.36):

	Describe XML plans for working copy administrative files.  

2000-08-28 20:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.9):

	(Generating ChangeLogs): don't tell people how to view their
	ChangeLogs.  

2000-08-28 20:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.8):

	(Writing Log Entries): better wording.  

2000-08-28 20:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.7):

	(Writing Log Entries): fix typo.  

2000-08-28 20:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.6):

	(Generating ChangeLogs): new subsection at the end of "Writing Log 
	Entries".  

2000-08-28 19:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.5), doc/WritingChangeLogs.txt (1.1):

	log entry guidelines 

2000-08-28 18:05   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.60):

	Don't #include xmlparse.h; the parser interface is independent of
	the representation, so this is irrelevant.  

2000-08-28 15:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_hash.h (1.6, milestone-1,
	milestone-1-beta):

	Put on `svn_' prefix.  

2000-08-28 15:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.16), subversion/Makefile.am (1.9),
	subversion/tests/libsvn_subr/Makefile.am (1.5),
	subversion/tests/libsvn_subr/hashdump-test.c (1.11),
	subversion/tests/Makefile.am (1.2),
	subversion/tests/svn_tests_main.c (1.2):

	Factorized main() out of standard svn test programs.  

2000-08-28 14:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/: Makefile.am (1.1), README (1.1),
	svn_tests_main.c (1.1):

	common main() code for test-suite, not quite finished yet 

2000-08-28 11:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* COPYING (1.2), subversion/include/svn_delta.h (1.59),
	subversion/include/svn_error.h (1.17), subversion/include/svn_fs.h
	(1.3), subversion/include/svn_hash.h (1.5),
	subversion/include/svn_parse.h (1.5), subversion/include/svn_path.h
	(1.7), subversion/include/svn_string.h (1.30),
	subversion/include/svn_svr.h (1.32), subversion/include/svn_types.h
	(1.40), subversion/include/svn_wc.h (1.13), doc/svn-design.texi
	(1.14, milestone-1, milestone-1-beta),
	subversion/libsvn_delta/delta.h (1.17),
	subversion/libsvn_delta/delta_parse.c (1.63),
	subversion/libsvn_delta/prop_parse.c (1.7),
	subversion/libsvn_delta/vcdiff_parse.c (1.9),
	subversion/libsvn_delta/xml_parse.c (1.63),
	subversion/libsvn_fs/err.c (1.2), subversion/libsvn_fs/err.h (1.2),
	subversion/libsvn_fs/fs.c (1.2), subversion/libsvn_fs/fs.h (1.3),
	subversion/libsvn_subr/hashdump.c (1.11, milestone-1-beta),
	subversion/libsvn_subr/path.c (1.7),
	subversion/libsvn_subr/svn_error.c (1.31),
	subversion/libsvn_subr/svn_parse.c (1.35),
	subversion/tests/libsvn_subr/hashdump-test.c (1.10),
	subversion/libsvn_wc/adm_files.c (1.5),
	subversion/libsvn_wc/adm_ops.c (1.5),
	subversion/libsvn_wc/apply_delta.c (1.24),
	subversion/libsvn_wc/get_editor.c (1.24),
	subversion/libsvn_wc/lock.c (1.3),
	subversion/libsvn_wc/make_walker.c (1.24),
	subversion/libsvn_wc/questions.c (1.3), subversion/libsvn_wc/util.c
	(1.5), subversion/libsvn_wc/wc.h (1.9),
	subversion/tests/libsvn_wc/checkout-test.c (1.10):

	Fixed Collab.Net url, and other name change tweaks.  

2000-08-28 11:09   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_fs.h (1.2):

	typo fix.  

2000-08-28 10:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_fs/fs.h (1.2):

	speling: "propage" ==&gt; "propagate" 

2000-08-26 10:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* notes/testing_framework.txt (1.5, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	Adjust form of test output.  

2000-08-26 04:05   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.9), notes/webdav-usage.html (1.9)
	(utags: milestone-1, milestone-1-beta):

	add commentary on etags, based on feedback from Joe Orton 

2000-08-25 16:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/testing_framework.txt (1.4):

	Done with test-suite spec.  

2000-08-25 16:31   Jim Blandy &lt;jimb@redhat.com&gt;

	* configure.in (1.15), subversion/Makefile.am (1.8),
	subversion/include/svn_error.h (1.16), subversion/include/svn_fs.h
	(1.1), subversion/libsvn_fs/.cvsignore (1.1, milestone-1,
	jimb_pre_transaction, milestone-1-beta),
	subversion/libsvn_fs/Makefile.am (1.1), subversion/libsvn_fs/err.c
	(1.1), subversion/libsvn_fs/err.h (1.1), subversion/libsvn_fs/fs.c
	(1.1), subversion/libsvn_fs/fs.h (1.1):

	* configure.in: Include subversion/libsvn_fs/Makefile in the list of 
	Makefiles to produce.  
	* subversion/Makefile.am (SUBDIRS): Add libsvn_fs.  
	* subversion/include/svn_error.h (svn_errno_t): Add new error code, 
	SVN_ERR_FS_GENERAL.  
	* subversion/libsvn_fs: First inklings of filesystem implementation.  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2000-08-25 16:26   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: libsvn_delta/.cvsignore (1.3), libsvn_wc/.cvsignore
	(1.5, milestone-1, milestone-1-beta), tests/libsvn_wc/.cvsignore
	(1.2), tests/libsvn_delta/.cvsignore (1.2):

	Add .deps and .libs directories to the ignore lists.  PR: Obtained
	from: Submitted by: Reviewed by: 

2000-08-25 16:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_subr/hashdump-test.sh (1.2):

	don't need script anymore 

2000-08-25 16:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_subr/hashdump.c (1.10),
	tests/libsvn_subr/hashdump-test.c (1.9):

	Improve hashdump testing (new test) 

2000-08-25 15:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_subr/: Makefile.am (1.4), hashdump-test.c
	(1.8):

	Convert hashdump-test to new testing system 

2000-08-25 15:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.58), include/svn_error.h
	(1.15), include/svn_hash.h (1.4), include/svn_parse.h (1.4),
	include/svn_path.h (1.6), include/svn_string.h (1.29),
	include/svn_svr.h (1.31), include/svn_types.h (1.39),
	include/svn_wc.h (1.12), libsvn_delta/delta.h (1.16),
	libsvn_delta/delta_parse.c (1.62), libsvn_delta/prop_parse.c (1.6),
	libsvn_delta/vcdiff_parse.c (1.8), libsvn_delta/xml_parse.c (1.62),
	libsvn_subr/hashdump.c (1.9), libsvn_subr/path.c (1.6),
	libsvn_subr/svn_error.c (1.30), libsvn_subr/svn_parse.c (1.34),
	tests/libsvn_subr/hashdump-test.c (1.7), libsvn_wc/adm_files.c
	(1.4), libsvn_wc/adm_ops.c (1.4), libsvn_wc/apply_delta.c (1.23),
	libsvn_wc/get_editor.c (1.23), libsvn_wc/lock.c (1.2),
	libsvn_wc/make_walker.c (1.23), libsvn_wc/questions.c (1.2),
	libsvn_wc/util.c (1.4), libsvn_wc/wc.h (1.8),
	tests/libsvn_wc/checkout-test.c (1.9):

	Replace Collab.Net with CollabNet everywhere.  

2000-08-25 14:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/util.c (1.3):

	(check_existence): removed, as no longer used.  

2000-08-25 14:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.5), libsvn_subr/path.c (1.5),
	libsvn_wc/apply_delta.c (1.22), libsvn_wc/get_editor.c (1.22),
	libsvn_wc/make_walker.c (1.22), libsvn_wc/util.c (1.2),
	tests/libsvn_wc/checkout-test.sh (1.4):

	More changes for context-sensitive delta application.  
	
	Do path canonicalization.  

2000-08-25 14:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: apply_delta.c (1.21), get_editor.c (1.21),
	make_walker.c (1.21):

	(delete): call maybe_prepend_dest() here too.  

2000-08-25 14:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.4), libsvn_subr/path.c (1.4),
	libsvn_wc/apply_delta.c (1.20), libsvn_wc/get_editor.c (1.20),
	libsvn_wc/make_walker.c (1.20), tests/libsvn_wc/checkout-test.sh
	(1.3):

	Make sure dest_dir is accounted for in delta application.  
	
	(maybe_prepend_dest): new func, makes sure delta activity happens in 
	the right place.  
	
	(svn_path_isempty): new func, helper for above.  

2000-08-25 13:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.3), include/svn_string.h
	(1.28), include/svn_wc.h (1.11), libsvn_subr/path.c (1.3),
	libsvn_wc/Makefile.am (1.7), libsvn_wc/README (1.35),
	libsvn_wc/adm_files.c (1.3), libsvn_wc/adm_ops.c (1.3),
	libsvn_wc/apply_delta.c (1.19), libsvn_wc/get_editor.c (1.19),
	libsvn_wc/make_walker.c (1.19), libsvn_wc/questions.c (1.1),
	libsvn_wc/util.c (1.1), libsvn_wc/wc.h (1.7),
	tests/libsvn_wc/checkout-test.c (1.8):

	Changes to for delta application to take a destination directory: 
	
	(svn_wc_apply_delta): take `dest' and `repos' arguments.  
	
	(svn_path_last_component): new func.  
	
	(svn_string_find_char_backward): new func, helps out path library.  
	
	(svn_wc__working_copy_p): new func.  
	
	(svn_wc__ensure_directory): new func.  

2000-08-24 20:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/testing_framework.txt (1.3):

	More detail on test framework.  

2000-08-24 15:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_wc.h (1.10), libsvn_wc/README (1.34),
	libsvn_wc/adm_files.c (1.2), libsvn_wc/adm_ops.c (1.2),
	libsvn_wc/apply_delta.c (1.18), libsvn_wc/get_editor.c (1.18),
	libsvn_wc/make_walker.c (1.18), tests/libsvn_wc/checkout-1.delta
	(1.7):

	Documentation and #include fixes.  
	
	Add a top-level file to checkout-1.delta.  Grin.  

2000-08-24 15:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/testing_framework.txt (1.2):

	more detail on testing framework 

2000-08-24 14:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile.am (1.6), README (1.33),
	adm_files.c (1.1), adm_ops.c (1.1), apply_delta.c (1.17),
	get_editor.c (1.17), lock.c (1.1), make_walker.c (1.17), wc.h
	(1.6), wc_adm.c (1.12):

	Reorganize code: separate files for locking stuff, adm path/file 
	stuff, and adm operations.  
	
	Document general plan of interrupt-safe operation.  

2000-08-24 10:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/testing_framework.txt (1.1):

	some beginnning notes 

2000-08-23 21:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc_adm.c (1.11):

	Results of code review by Ben: 
	
	(svn_wc__adm_subdir): move static string inside, no reason for it to 
	be external static.  
	
	Everywhere: return SVN_NO_ERROR where formerly returned 0.  

2000-08-22 20:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc_adm.c (1.10):

	(make_adm_thing): restore path and return error correctly in all
	cases.  
	
	(svn_wc__lock): restored error-checking.  Works now, but apr_sleep() 
	appears to be broken so it's not actually retrying at the rate the 
	user specifies.  

2000-08-22 17:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc_adm.c (1.9):

	Tweak/test the locking code.  

2000-08-22 16:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.32), wc.h (1.5), wc_adm.c (1.8):

	Create more of the working copy, do real locking.  

2000-08-22 16:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.15), delta_parse.c (1.61),
	xml_parse.c (1.61):

	- svn_delta_make_xml_parser:  prefix removed, this is a static
	routine.  
	
	- svn_delta__tagmap[] added, rewrote do_stack_remove and set_tagtype 
	                             accordingly... MUCH cleaner now.  
	
	- svn_delta__digger_t:  "stack" argument now represents YOUNGEST 
	                         stackframe.  Many routines simplified
	                         because of this.  (find_stack_newest()
	removed.) 
	
	- do_stack_append: check that the first frame appended is always a 
	                   tree-delta.  

2000-08-22 15:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/wc_adm.c (1.7):

	Just use enums `svn_file_kind' and `svn_directory_kind' from 
	svn_types.h, instead of own enums.  Enough is enough already.  

2000-08-22 15:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.60), xml_parse.c
	(1.60):

	(maybe_derive_ancestry): declare p in the scope where it is used.  

2000-08-22 15:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.59), xml_parse.c
	(1.59):

	(maybe_derive_ancestry): eliminate first_frame argument; we don't
	need it anymore.  Caller changed.  

2000-08-22 14:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.2), libsvn_delta/delta_parse.c
	(1.58), libsvn_delta/xml_parse.c (1.58), libsvn_subr/path.c (1.2),
	libsvn_wc/apply_delta.c (1.16), libsvn_wc/get_editor.c (1.16),
	libsvn_wc/make_walker.c (1.16), libsvn_wc/wc_adm.c (1.6):

	(SVN_PATH_LOCAL_STYLE, SVN_PATH_REPOS_STYLE): new #defines.  
	
	(svn_path_remove_component, svn_path_add_component, 
	svn_path_add_component_nts, add_path_internal): use them.  
	
	All callers changed.  
	
	This gives an interface handling both local paths (for files) and 
	repository paths (for ancestry), though the implementation is all 
	Unix-style right now, which is the same as repository style.  

2000-08-22 12:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_path.h (1.1), libsvn_delta/delta_parse.c
	(1.57), libsvn_delta/xml_parse.c (1.57), libsvn_subr/Makefile.am
	(1.4), libsvn_subr/path.c (1.1), libsvn_wc/apply_delta.c (1.15),
	libsvn_wc/get_editor.c (1.15), libsvn_wc/make_walker.c (1.15),
	libsvn_wc/wc.h (1.4), libsvn_wc/wc_adm.c (1.5):

	Put mini-library for path manipulation into libsvn_subr.  
	
	(maybe_derive_ancestor): always set to a full ancestry path, derived 
	from both ancestors and names.  

2000-08-22 11:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/: deltaparse-test.c (1.20),
	foo.delta (1.4):

	test program correctly recognizes prop-deltas on files, dirs, and
	dirents.  

2000-08-22 11:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/delta_parse.c (1.56),
	libsvn_delta/prop_parse.c (1.5), libsvn_delta/xml_parse.c (1.56),
	libsvn_subr/svn_error.c (1.29),
	tests/libsvn_delta/deltaparse-test.c (1.19),
	tests/libsvn_delta/foo.delta (1.3):

	
	 * when printing errors, specify if svn-specific 
	 * fixed prop-delta handling routine 
	 * fixed prop-delta "delete" validation logic 
	
	Prop-deltas seem to work correctly now! 

2000-08-21 23:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.14), delta_parse.c (1.55),
	prop_parse.c (1.4), vcdiff_parse.c (1.7), xml_parse.c (1.55):

	Derive ancestry correctly: 
	
	(derive_ancestry): new function, walks up from bottom frame, looking 
	for ancestry information.  
	
	(do_stack_append): use it.  
	
	Plus, many changes for namespace protection: 
	
	(svn_delta__vcdiff_parser_t): replaces `svn_vcdiff_parser_t'.  
	(svn_delta__make_vcdiff_parser): replaces `svn_make_vcdiff_parser'.  
	(svn_delta__vcdiff_parse): replaces `svn_vcdiff_parse'.  
	(svn_delta__vcdiff_flush_buffer): replaces
	`svn_vcdiff_flush_buffer'.  
	(svn_delta__stackframe_t): replaces `svn_delta_stackframe_t'.  
	(svn_delta__digger_t): replaces `svn_delta_digger_t'.  
	(svn_delta__pdelta_parser_t): replaces `svn_pdelta_parser_t'.  
	(svn_delta__make_pdelta_parser): replaces `svn_make_pdelta_parser'.  
	(svn_delta__pdelta_parse): replaces `svn_pdelta_parse'.  
	(svn_delta__reset_parser_subpool): replaces
	`svn_reset_parser_subpool'.  
	(svn_delta__XML_t): replaces `svn_XML_t', and therefore: 
	
	   `svn_delta__XML_treedelta'  replaces   `svn_XML_treedelta' 
	   `svn_delta__XML_new'        replaces   `svn_XML_new' 
	   `svn_delta__XML_delete'     replaces   `svn_XML_delete' 
	   `svn_delta__XML_replace'    replaces   `svn_XML_replace' 
	   `svn_delta__XML_file'       replaces   `svn_XML_file' 
	   `svn_delta__XML_dir'        replaces   `svn_XML_dir' 
	   `svn_delta__XML_textdelta'  replaces   `svn_XML_textdelta' 
	   `svn_delta__XML_propdelta'  replaces   `svn_XML_propdelta' 
	   `svn_delta__XML_set'        replaces   `svn_XML_set' 

2000-08-21 19:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.31), wc.h (1.3), wc_adm.c (1.4):

	Started locking code.  

2000-08-21 19:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.14):

	(svn_errno_t): new error code `SVN_ERR_ENCOUNTERED_LOCK'.  

2000-08-21 19:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta.h (1.13), delta_parse.c (1.54),
	xml_parse.c (1.54):

	Changes to handle ancestor paths and versions correctly: 
	
	(svn_version_t): removed, use `svn_vernum_t' instead.  
	
	(svn_delta_stackframe_t): Added `ancestor_path' and
	`ancestor_version' fields.  
	
	(xml_handle_start): look for "ancestor" and "ver" attributes, set
	them in frame if present.  
	
	(do_stack_append): validate above new fields, then make them default 
	to parent's values.  
	
	(do_directory_callback): pass correct ancestry information to
	callbacks.  

2000-08-21 18:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.30), apply_delta.c (1.14),
	get_editor.c (1.14), make_walker.c (1.14), wc.h (1.2), wc_adm.c
	(1.3):

	Many changes to do with creating administrative subdirs.  

2000-08-21 17:43   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/delta_parse.c (1.53),
	libsvn_delta/xml_parse.c (1.53),
	tests/libsvn_delta/deltaparse-test.c (1.18),
	tests/libsvn_delta/foo.delta (1.2):

	save state 

2000-08-21 17:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.57), libsvn_delta/delta.h
	(1.12), libsvn_delta/delta_parse.c (1.52),
	libsvn_delta/prop_parse.c (1.3), libsvn_delta/vcdiff_parse.c (1.6),
	libsvn_delta/xml_parse.c (1.52),
	tests/libsvn_delta/deltaparse-test.c (1.17):

	Property-delta stuff at least compiles correctly now.  :) 

2000-08-21 15:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.56):

	begin_propdelta:  needs to return any of 3 propchange_handler_t 
	routines to consume an entire propchange.  

2000-08-21 14:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.28):

	(svn_create_error): copy the message to permanent storage, so don't 
	have to worry about pointer lifetimes.  

2000-08-21 14:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/.cvsignore (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	Ignore ChangeLog*.  

2000-08-21 13:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.55):

	Revert previous change, after discussion with Ben.  There are cases 
	where knowing that a text or prop delta is about to begin/end are 
	useful, and even necessary.  

2000-08-21 13:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.54):

	Partial reversion:  place "consumer" routines back in walker's 
	add_file and replace_file fields.  

2000-08-19 21:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile (1.6), apply_delta.c (1.13),
	get_editor.c (1.13), make_walker.c (1.13), wc.h (1.1), wc_adm.c
	(1.2):

	(svn_wc__set_up_new_dir, svn_wc__working_name, svn_wc__read_lock, 
	svn_wc__write_lock): new funcs, still skeletal.  
	
	(add_directory): just call `svn_wc__set_up_new_dir' now.  

2000-08-18 20:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.53),
	libsvn_delta/vcdiff_parse.c (1.5), libsvn_wc/apply_delta.c (1.12),
	libsvn_wc/get_editor.c (1.12), libsvn_wc/make_walker.c (1.12):

	Fill out the skeleton tree with files and their contents.  
	
	(svn_delta_window_t): call it `pool', not `my_pool'.  All references 
	changed.  

2000-08-18 20:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/delta.h (1.11),
	libsvn_delta/delta_parse.c (1.51), libsvn_delta/xml_parse.c (1.51),
	libsvn_wc/apply_delta.c (1.11), libsvn_wc/get_editor.c (1.11),
	libsvn_wc/make_walker.c (1.11), tests/libsvn_wc/checkout-test.c
	(1.7):

	(svn_delta_digger_t): call it `pdelta_chunk_parser' instead of 
	`chunk_parser', just to keep things straight.  
	
	Pass the new handler_baton, a.k.a. consumer_baton, as appropriate.  

2000-08-18 20:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.52), libsvn_delta/delta.h
	(1.10):

	Moved `svn_pdelta_chunk_parser_t' from public to internal.  
	
	(svn_delta_walker_t): add `handler_baton' argument to 
	finish_propdelta, finish_textdelta.  

2000-08-18 20:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.51), libsvn_delta/delta.h
	(1.9):

	Move `svn_vcdiff_parser_t' from public to internal.  

2000-08-18 19:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/apply_delta.c (1.10),
	libsvn_wc/get_editor.c (1.10), libsvn_wc/make_walker.c (1.10),
	tests/libsvn_wc/checkout-1.delta (1.6),
	tests/libsvn_wc/checkout-test.c (1.6),
	tests/libsvn_wc/checkout-test.sh (1.2):

	Test suite improvements: make script do something useful, correct
	the test delta.  

2000-08-18 19:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: apply_delta.c (1.9), get_editor.c (1.9),
	make_walker.c (1.9):

	Start building a tree.  

2000-08-18 18:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/delta_parse.c (1.50),
	libsvn_delta/xml_parse.c (1.50), libsvn_wc/apply_delta.c (1.8),
	libsvn_wc/get_editor.c (1.8), libsvn_wc/make_walker.c (1.8):

	Don't drop those batons.  

2000-08-18 17:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.50),
	libsvn_delta/delta_parse.c (1.49), libsvn_delta/xml_parse.c (1.49),
	tests/libsvn_delta/deltaparse-test.c (1.16),
	libsvn_wc/apply_delta.c (1.7), libsvn_wc/get_editor.c (1.7),
	libsvn_wc/make_walker.c (1.7):

	Use `ancestor_path' and `ancestor_version', instead of `base_path'
	and `base_version', because less likely to cause confusion.  

2000-08-18 17:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/delta.h (1.8),
	libsvn_delta/prop_parse.c (1.2), libsvn_wc/apply_delta.c (1.6),
	libsvn_wc/get_editor.c (1.6), libsvn_wc/make_walker.c (1.6):

	Use new delta walker interface.  
	
	(Fix a few minor things in the delta library, too: missing prototype 
	and missing return value.  Everything compiles now.) 

2000-08-18 17:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.49), libsvn_delta/Makefile.am
	(1.6), libsvn_delta/delta.h (1.7), libsvn_delta/delta_parse.c
	(1.48), libsvn_delta/prop_parse.c (1.1), libsvn_delta/xml_parse.c
	(1.48), tests/libsvn_delta/deltaparse-test.c (1.15):

	We made a interface change in svn_walk_t, which then required much 
	hacking on libsvn_delta.  deltaparse-test now works correctly again.  
	
	We're now ready to start filling out prop_parse.c! 

2000-08-18 17:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.48):

	(svn_pdelta_chunk_parser_t): more accurate name for 
	`svn_pdelta_chunk_parser_t'.  
	
	(svn_delta_walk_t): correct some prototypes.  

2000-08-18 17:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.47):

	(svn_pdelta_parser_t): fix typo.  

2000-08-18 16:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.46):

	Comment on usage of fully-streamy property change handlers.  

2000-08-18 16:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.45):

	Comment on usage of fully-buffering property change handlers.  
	
	(apply_dirent_propchange): fix name.  
	
	(dirent_pdelta): removed, as obsolete.  

2000-08-18 16:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.44):

	Prop delta usage note.  

2000-08-18 16:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_string.h (1.27):

	(svn_string_chop_back_to_char): prototype.  

2000-08-18 16:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.43):

	comments update 

2000-08-18 16:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.42):

	New interface for optionally streaming prop-deltas.  

2000-08-18 12:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.9):

	run /bin/sh (thanks Daniel Stenberg &lt;daniel@haxx.se&gt;) 

2000-08-18 12:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.47), xml_parse.c
	(1.47):

	Added copyright info, load svn-dev.el.  
	
	This commit is also mainly to reproduce a problem with
	commitlogging.  

2000-08-18 12:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.14):

	Ignore this commit -- only whitespace changes, done mainly to 
	reproduce a problem with commitlogging.  

2000-08-18 12:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/apply_delta.c (1.5),
	libsvn_wc/get_editor.c (1.5), libsvn_wc/make_walker.c (1.5),
	tests/libsvn_wc/checkout-test.c (1.5):

	Start baton usage.  
	
	More flexible test program.  

2000-08-18 11:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_string.h (1.26), libsvn_subr/svn_parse.c
	(1.33), tests/libsvn_delta/deltaparse-test.c (1.13):

	Remove all cases of svn_string_print().  
	
	Remove compile warning on deltaparse-test.c.  

2000-08-18 11:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_string.h (1.25),
	tests/libsvn_delta/deltaparse-test.c (1.12),
	libsvn_subr/svn_parse.c (1.32):

	(svn_string_dup2cstring, svn_string_compare_2cstring): removed, no 
	need for these funcs.  
	
	Rewrote test suite to exercise new functionality, and display
	results readably.  

2000-08-18 09:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_string.h (1.24),
	tests/libsvn_delta/deltaparse-test.c (1.11),
	libsvn_subr/svn_parse.c (1.31):

	(svn_string_dup2cstring, svn_string_ncreate, svn_string_appendbytes, 
	svn_string_chop): o-b-o-e repairs, thanks to Greg Stein 
	&lt;gstein@lyra.org&gt; for catching them early.  
	
	(svn_string_dup2cstring): new name for `svn_string_2cstring'.  

2000-08-17 20:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_string.h (1.23):

	(svn_string_chop): new func, does what you think it does.  
	
	(svn_string_setempty): just set len to 0, and null data[0] if 
	appropriate.  Leave block and blocksize alone, however, so we can 
	still call svn_string_appendstr() with all the rights, privileges,
	and honors thereunto appertaining.  
	
	(svn_string_isempty): simplify.  

2000-08-17 19:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.41), libsvn_delta/delta.h
	(1.6), libsvn_delta/delta_parse.c (1.46),
	libsvn_delta/vcdiff_parse.c (1.4), libsvn_delta/xml_parse.c (1.46),
	tests/libsvn_delta/deltaparse-test.c (1.10),
	libsvn_wc/apply_delta.c (1.4), libsvn_wc/get_editor.c (1.4),
	libsvn_wc/make_walker.c (1.4), tests/libsvn_wc/checkout-test.c
	(1.4):

	Making WC library use the new stuff in delta library: 
	
	`svn_text_delta_window_handler_t' replaces `svn_delta_handler_t', 
	because more specific.  All uses changed.  
	
	(svn_delta_op_t): call field `action_code' instead of `op'.  Having 
	two different things both called "op" was making my brain spin.  All
	uses changed.  
	
	(do_file_callback, do_directory_callback): parenthesize for
	precedence clarity.  
	
	(svn_vcdiff_parse): increment buffer offset only if ate a byte.  
	
	(svn_vcdiff_send_window): check if callback func is null before 
	calling it.  
	
	(check_existence): include APR_READ flag when testing, because 
	apr_open() always returns APR_EACCES if you fail to request at least 
	one of reading or writing.  Also, remove the file after testing.  
	
	(window_handler): new func in wc library; skeleton, everything will 
	depend on the baton.  
	
	(add_file, replace_file): store window_handler in *handler.  
	
	(checkout-test.c:main): be robuster.  
	
	(test_read_fn): interpret results of apr_full_read() correctly.  

2000-08-17 18:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.9):

	trying to print window contents now 

2000-08-17 17:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/: Makefile.am (1.1),
	deltaparse-test.c (1.8):

	oops, forgot this file 

2000-08-17 17:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/Makefile.am (1.5),
	libsvn_delta/delta_parse.c (1.45), libsvn_delta/vcdiff_parse.c
	(1.3), libsvn_delta/xml_parse.c (1.45),
	tests/libsvn_delta/deltaparse-test.c (1.7),
	tests/libsvn_delta/foo.delta (1.1):

	AHA... deltaparse-test actually WORKS.  Time for a beer.  

2000-08-17 17:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.8):

	instructions for static linking 

2000-08-17 14:39   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: Makefile.am (1.4), delta.h (1.5),
	vcdiff_parse.c (1.2):

	vcdiff_parse.c now compiles.  

2000-08-17 14:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.44), xml_parse.c
	(1.44):

	compiles now, typo.  

2000-08-17 12:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.40), libsvn_delta/delta.h
	(1.4), libsvn_delta/delta_parse.c (1.43),
	libsvn_delta/vcdiff_parse.c (1.1), libsvn_delta/xml_parse.c (1.43),
	tests/libsvn_delta/deltaparse-test.c (1.6):

	Almost ready to start compiling deltaparse-test 

2000-08-16 18:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.39), include/svn_types.h
	(1.38), include/svn_wc.h (1.9), libsvn_delta/delta_parse.c (1.42),
	libsvn_delta/xml_parse.c (1.42), libsvn_wc/Makefile.am (1.5),
	libsvn_wc/apply_delta.c (1.3), libsvn_wc/get_editor.c (1.3),
	libsvn_wc/make_walker.c (1.3), libsvn_wc/wc_adm.c (1.1),
	tests/libsvn_wc/checkout-test.c (1.3):

	(svn_delta_read_fn_t): add pool argument.  All callers changed.  
	
	(svn_vernum_t): new type.  Callers who formerly used `long int' use 
	this now.  
	
	(svn_wc_apply_delta): correct arguments.  Def and callers changed.  
	
	(svn_delta_parse): pass pool to reader function.  
	
	(test_read_fn): finished.  
	
	Tweaked #includes and Makefiles as appropriate, and defined skeleton 
	functions.  

2000-08-16 17:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.5):

	typo 

2000-08-16 17:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_delta/deltaparse-test.c (1.4):

	Mostly finished test of XML parser interface.  

2000-08-16 16:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.41), xml_parse.c
	(1.41):

	You are in a maze of twisty compilation errors, each slightly 
	different.  

2000-08-16 16:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/delta.h (1.3):

	(svn_delta_to_vcdiff): removed this hulking remnant of the bad old 
	caller-pull days.  

2000-08-16 16:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.38):

	Use `long int' instead of the non-existent `svn_version_t'.  

2000-08-16 11:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.40), xml_parse.c
	(1.40):

	(get_attribute_value): completed.  Never errors now, just returns
	the value or NULL.  
	
	All callers changed.  

2000-08-15 21:23   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.8), notes/webdav-usage.html (1.8):

	fold in some comments from Joe Orton.  clarify the correlation
	    between the delta and the DAV requests in the example commit
	section.  

2000-08-15 10:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.8):

	(svn_wc_make_skelta): restore this -- we still need skeltas for 
	updates.  

2000-08-15 04:31   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.7), notes/webdav-usage.html (1.7):

	flesh out some more stuff.  

2000-08-15 03:55   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.6), notes/webdav-usage.html (1.6):

	complete a couple more sections.  

2000-08-14 23:24   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.5), notes/webdav-usage.html (1.5):

	detail the server URL layout detail the tags and branches stuff 

2000-08-14 20:47   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.4), notes/webdav-usage.html (1.4):

	another round of changes. specifically, this includes how a "commit"
	   uses WebDAV to transmit the changes.  (still in draft form, of
	course) 

2000-08-14 18:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: apply_delta.c (1.2), get_editor.c (1.2),
	make_walker.c (1.2):

	Plug in new finish_file() callback.  

2000-08-14 18:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/Makefile.am (1.4), libsvn_wc/README
	(1.29), libsvn_wc/apply_delta.c (1.1), libsvn_wc/get_editor.c
	(1.1), libsvn_wc/make_walker.c (1.1), libsvn_wc/update.c (1.12),
	tests/libsvn_wc/checkout-test.c (1.2):

	Rewrite to use the callee-push streaming interface.  
	
	This commit is _not_ going to compile, so don't even try.  

2000-08-14 17:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.37), include/svn_error.h
	(1.13), libsvn_delta/delta.h (1.2), libsvn_delta/delta_parse.c
	(1.39), libsvn_delta/xml_parse.c (1.39):

	delta_parse.c is basically finished for now;  ready to start
	fleshing out       dummy vcdiff parser stuff.  

2000-08-14 15:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.7):

	Minor formatting/wording fix.  

2000-08-14 15:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.6):

	Reflect the new callee-push interface.  
	
	Use the (svn_error_t *) and return-by-reference conventions that we 
	have adopted everywhere else.  
	
	Got rid of non-streamable property functions.  
	
	Long comment about implementation of property reading and writing.  

2000-08-14 14:44   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.3), notes/webdav-usage.html (1.3):

	checkpoint some changes made last night [couldn't check in last
	night due to some DNS troubles] 

2000-08-14 14:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.13, milestone-1, milestone-1-beta):

	Note out-of-dateness of design docs.  

2000-08-14 14:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_members.html (1.7):

	Reword subsequent paragraph to compensate for previous change.  

2000-08-14 14:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_members.html (1.6):

	Note congenital incompleteness of list.  

2000-08-14 14:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_members.html (1.5):

	Quote angle brackets for HTML.  

2000-08-14 14:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_members.html (1.4):

	List some people.  

2000-08-14 14:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/: cvs_help.html (1.5, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal), project_source.html (1.3) (utags:
	milestone-1, milestone-1-beta):

	Update info and links (thanks to Bruce Korb &lt;bkorb@sco.COM&gt; for 
	noticing that things were out of date).  

2000-08-14 14:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.36), libsvn_delta/delta.h
	(1.1), libsvn_delta/delta_parse.c (1.38), libsvn_delta/xml_parse.c
	(1.38):

	Moved private stuff from public header to private header.  

2000-08-14 12:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/jimb-delta-parse.h (1.7),
	include/svn_delta.h (1.35), include/svn_error.h (1.12),
	libsvn_delta/delta_parse.c (1.37), libsvn_delta/xml_parse.c (1.37):

	Merged jimb's walker structure into svn_delta.h, jimb's own header
	is not (any longer) relevant.  :) 
	
	Busy filling out parser's routines to call various svn_walker_t
	callbacks.  

2000-08-11 15:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/jimb-delta-parse.h (1.6),
	include/svn_delta.h (1.34), libsvn_delta/delta_parse.c (1.36),
	libsvn_delta/xml_parse.c (1.36):

	Entire interface rewritten, in process of flushing out specific
	events now.  

2000-08-11 12:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.35), xml_parse.c
	(1.35):

	Tweak validity check.  

2000-08-11 12:13   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_error.h (1.11), libsvn_subr/svn_error.c
	(1.27):

	* svn_error.h (svn_create_errorf): Use `extern' in declaration,
	although it doesn't make any difference.  
	
	* svn_error.c: #include &lt;stdarg.h&gt; and "apr_strings.h", since we use 
	facilities they provide.  
	(svn_create_errorf): New function.  

2000-08-11 11:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.34), xml_parse.c
	(1.34):

	Split telescope_delta_stack() into two routines, for better clarity.  
	They have different validity-checking logic, and different execution 
	logic.  

2000-08-11 06:24   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.2), notes/webdav-usage.html (1.2):

	Describe basic concepts and sketch out topic areas 

2000-08-10 21:12   Greg Stein &lt;gstein@lyra.org&gt;

	* www/webdav-usage.html (1.1), notes/webdav-usage.html (1.1):

	the SVN/WebDAV design doc will initially be placed here. I don't
	    know texinfo, so I can't put this into doc/. If this gets texinfo'd,
	    then it should move there.  this is just an initial checkin noting
	    that more will be coming. expect to see this get fleshed out over
	the next few days.  

2000-08-10 20:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/jimb-delta-parse.h (1.5),
	include/svn_delta.h (1.33), libsvn_delta/delta_parse.c (1.33),
	libsvn_delta/xml_parse.c (1.33):

	Saving work... in the middle of huge rewrite, a big mess.  I'm doing
	this because of repeated power outages here at home.  (I need to buy
	a UPS *now*) 

2000-08-10 18:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.10):

	Create a typedef for enum svn_errno_t.  

2000-08-10 18:27   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_error.h (1.9):

	Use an enum instead of a series of #defines for the error codes. 
	The effect in the code is the same, but the debugger can see and use
	enum values, while it is ignorant of #defines.  

2000-08-10 17:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.32), xml_parse.c
	(1.32):

	Still rewriting parser.  

2000-08-10 16:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.31), xml_parse.c
	(1.31):

	New error-returning strategy: 
	
	If we encounter a validation error while inside an expat callback, 
	
		1.  store the error in our digger structure 
		2.  immediately set all of the expat callbacks to NULL 
	
	Item #2 causes XML_Parse() to finish its chunk rather quickly,
	whereby our main parser loop then notices the existence of #1 and
	returns.  

2000-08-10 16:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/jimb-delta-parse.h (1.4),
	include/svn_delta.h (1.32), libsvn_delta/delta_parse.c (1.30),
	libsvn_delta/xml_parse.c (1.30):

	In process of rewriting parser machinery.  

2000-08-10 09:57   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.31):

	(svn_delta_read_fn_t, svn_text_delta, svn_delta_to_vcdiff): Doc
	fixes.  
	
	Turn VCDIFF parsing interface upside-down, to use a caller-pushes 
	model.  This makes it easier to work properly with Expat.  

2000-08-10 08:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.30):

	Revert previous change, which added a not-yet-implemented interface
	to svn_delta.h.  
	
	Mea culpa.  The CVS sources should always build.  In cases where it 
	would be helpful to check in experimental code, or
	not-yet-implemented interfaces, they can be put in an uncompiled
	file until the work is completed.  

2000-08-10 08:28   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/jimb-delta-parse.h (1.3):

	Doc fixes.  
	
	(svn_delta_parse): Rename `context' arguments using `baton'.  Sounds 
	kind of weird.  

2000-08-09 16:51   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.29):

	Replace tree delta traversal interface.  The new interface does a 
	better job of insulating the consumer of the delta's data from
	details of the delta's representation.  Both the parser and the
	client should be simpler now.  
	
	(svn_next_delta_window, svn_delta_to_vcdiff, svn_vcdiff_to_delta):
	Put values returned by reference first.  
	
	Doc fixes.  

2000-08-09 12:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.28):

	Delete obsolete comment.  

2000-08-09 11:53   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/jimb-delta-parse.h (1.2):

	(svn_delta_walk_t): Add finish_directory function.  

2000-08-09 11:06   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/jimb-delta-parse.h (1.1):

	Possible new delta walking interface.  

2000-08-09 10:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/update.c (1.11):

	comments 

2000-08-09 00:00   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* README (1.7):

	Remove mention of glib.  

2000-08-08 23:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/.cvsignore (1.2):

	Ignore s'more.  

2000-08-08 23:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.29), xml_parse.c
	(1.29):

	temporarily report malformed XML errors 

2000-08-08 23:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/update.c (1.10):

	(delta_stack_to_path): fix iteration.  

2000-08-08 19:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.28), xml_parse.c
	(1.28):

	Duh, don't forget to set previous ptr after appending stackframe.  

2000-08-08 18:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svn-dev.sh (1.5, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	Use SVN_WC instead of WC, and export it.  
	
	(Change suggested by Branko &lt;branko.cibej@hermes.si&gt;).  

2000-08-08 18:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_delta/Makefile.am (1.3),
	libsvn_subr/Makefile.am (1.3), libsvn_wc/Makefile.am (1.3),
	libsvn_wc/update.c (1.9), tests/libsvn_wc/Makefile.am (1.5):

	Use static where appropriate.  
	
	Correct ordering of library dependencies; plus some accidental
	newline removals that are easier to commit than revert.  

2000-08-08 18:10   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.27), xml_parse.c
	(1.27):

	The usual strcmp() mishap.  

2000-08-08 16:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.26), xml_parse.c
	(1.26):

	Fix allocation size buglets.  

2000-08-08 15:54   Jim Blandy &lt;jimb@redhat.com&gt;

	* configure.in (1.14):

	For the moment, don't include -O2 in CFLAGS by default, as that 
	interferes with debugging.  

2000-08-08 15:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* expat-lite/Makefile (1.2):

	Clean with rm -f, so no complaints.  

2000-08-08 15:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.13):

	add some CFLAGS if gcc 

2000-08-08 14:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.25), xml_parse.c
	(1.25):

	Recurse, or, as Noah Friedman likes to say, "recur".  

2000-08-08 13:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.24), xml_parse.c
	(1.24):

	Allow null callbacks.  

2000-08-08 13:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: svn-dev.sh (1.4), tests/libsvn_subr/Makefile.am
	(1.3), tests/libsvn_wc/Makefile.am (1.4):

	Add new paths to LD_LIBRARY_PATH.  
	
	Don't install test programs in a "make install".  

2000-08-08 12:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_wc/Makefile.am (1.3):

	Added expat and libsvn_subr dependencies.  

2000-08-08 12:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/.cvsignore (1.4), libsvn_wc/Makefile.am
	(1.2), libsvn_wc/update.c (1.8), tests/libsvn_wc/Makefile.am (1.2):

	Fix various type and path buglets on way to compilation.  

2000-08-08 12:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_delta/.cvsignore (1.1):

	Ignore the usual stuff.  

2000-08-08 12:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.27), libsvn_delta/Makefile.am
	(1.2), libsvn_delta/delta_parse.c (1.23), libsvn_delta/xml_parse.c
	(1.23):

	Delta library compiles now.  

2000-08-08 12:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.3):

	list repository conversion program 

2000-08-08 12:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.26):

	(svn_delta_digger_t): uh, correct that other function pointer 
	prototype, too.  

2000-08-08 12:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.25):

	(svn_delta_digger_t): correct function pointer prototypes.  

2000-08-08 11:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/.cvsignore (1.3),
	tests/libsvn_wc/.cvsignore (1.1):

	Ignore Makefile.in, Makefile, and ChangeLog* too.  

2000-08-08 11:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/.cvsignore (1.1):

	Ignore Makefile.in, Makefile, and ChangeLog*.  

2000-08-08 11:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/Makefile.am (1.7):

	(SUBDIRS): include libsvn_wc.  

2000-08-08 11:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.12):

	(AC_OUTPUT): generate Makefiles for libsvn_delta libsvn_wc.  

2000-08-08 11:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.24):

	Clean up syntax errors -- we're compiling now.  

2000-08-08 11:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: Makefile.am (1.1), delta_parse.h (1.3):

	Don't need intra-library header, but we do need automake.  

2000-08-08 11:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.22), xml_parse.c
	(1.22):

	Make all routines static, except for one public interface: 
	svn_delta_make_xml_parser() 

2000-08-08 11:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/Makefile.am (1.1), libsvn_wc/update.c
	(1.7), tests/libsvn_wc/Makefile.am (1.1),
	tests/libsvn_wc/checkout-test.c (1.1),
	tests/libsvn_wc/checkout-test.sh (1.1):

	Print out checkout dirs.  
	
	Skeleton of a test framework; probably doesn't compile yet, more to 
	come.  

2000-08-08 11:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/Makefile.am (1.6):

	Add delta dependency 

2000-08-07 22:01   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.23):

	(svn_delta_stream_t): This shouldn't be a pointer to a struct; it's 
	just an opaque struct.  
	
	(svn_delta_read_fn_t): Provide a way to return EOF and short reads.  
	
	(svn_delta_read_fn_t): Make this a function type, not a 
	pointer-to-function type.  
	(svn_text_delta): Adjust prototype.  
	
	(svn_text_delta): Doc fixes.  

2000-08-07 21:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.22):

	(svn_delta_window_t): "ops", not "insns".  

2000-08-07 21:49   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.21):

	Rename: svn_delta_insn_t to svn_delta_op_t.  

2000-08-07 21:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.20):

	Minor comment in Jim's text delta interface.  
	
	(svn_walk_delta_stack): obsolete, removed.  

2000-08-07 19:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/update.c (1.6):

	(delta_stack_to_path): throw out hysterical raisin.  

2000-08-07 19:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/update.c (1.5):

	(delta_stack_to_path): replaces delta_to_path(), extracts file or 
	directory paths with equal alacrity.  

2000-08-07 19:34   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/: svn_delta.h (1.18), svn_delta.h (1.19):

	Doc fix.  

2000-08-07 19:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.21), xml_parse.c
	(1.21):

	Added type-checking to frame append/unpend.  

2000-08-07 19:16   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_delta.h (1.17):

	Add interface to text deltas.  

2000-08-07 18:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.20), xml_parse.c
	(1.20):

	(svn_walk_delta): gone.  No need for a generic delta walker -- it's
	so simple, it'll be clearer to write out the logic each time and
	avoid an awkward callback mechanism.  

2000-08-07 17:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.16),
	libsvn_delta/delta_parse.c (1.19), libsvn_delta/xml_parse.c (1.19):

	Finished stackframe rewrite... much cleaner.  

2000-08-07 17:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.15),
	libsvn_delta/delta_parse.c (1.18), libsvn_delta/xml_parse.c (1.18):

	in process of rewriting w/ stack frames 

2000-08-07 15:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_delta.h (1.14):

	Added delta stackframe type.  

2000-08-05 18:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.17), xml_parse.c
	(1.17):

	Filled in some constructors.  

2000-08-05 18:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.16), xml_parse.c
	(1.16):

	Finished 2nd draft (big rewrite) of: 
	
	 svn_find_delta_bottom() 
	 svn_starpend_delta() 
	 svn_xml_handle_start() 
	 svn_xml_handle_end() 

2000-08-05 17:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.13),
	libsvn_delta/delta_parse.c (1.15), libsvn_delta/xml_parse.c (1.15),
	libsvn_wc/update.c (1.4):

	Codus Interruptus, saving state: 
	
	Implementing svn_walk_delta() before implementing delta_to_path() 
	before implementing update_dir_handler().  
	
	Someone remind me to read this log entry to figure what to do next.  
	
	(svn_walk_delta): in progress.  
	
	(update_dir_handler): waiting on above and delta_to_path().  

2000-08-05 17:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.14), xml_parse.c
	(1.14):

	Factorization in progress.  

2000-08-05 17:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.12):

	Correct prototype for svn_delta_digger_t-&gt;dir_handler.  

2000-08-05 17:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_subr/hashdump-test.c (1.6):

	Correct path to find svn-dev.el in local vars section.  

2000-08-05 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.13), xml_parse.c
	(1.13):

	Fleshed out most of svn_xml_handle_end().  

2000-08-05 17:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/update.c (1.3):

	(check_existence): new func, helper for update() and later for
	callbacks.  
	
	(update): use above.  
	
	(update_data_handler, update_dir_handler): replace 
	`svn_update_data_handler' and `svn_update_data_handler'
	respectively, albeit not respectfully.  

2000-08-05 17:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.12), xml_parse.c
	(1.12):

	Finished svn_starpend_delta() -- appends object to bottom of delta,
	or deletes bottommost object in delta.  
	
	Uses new version of svn_find_delta_bottom(), which now returns both 
	the bottommost *and* penultimate objects in the delta (needed for 
	deletion.) 

2000-08-05 16:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_error.h (1.8):

	(SVN_ERR_OBSTRUCTED_UPDATE): new error.  

2000-08-05 16:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/update.c (1.2):

	(update): set up digger before passing it to the parser creator;
	this is more intuitive although not technically necessary.  

2000-08-05 16:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/update.c (1.1):

	(update): new function, entry point.  
	
	(svn_update_data_handler, svn_update_dir_handler): started helpers
	for `update()'.  

2000-08-05 16:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.7),
	libsvn_delta/delta_parse.c (1.11), libsvn_delta/xml_parse.c (1.11):

	Broke apart recursive delta cdr() logic from appending logic.  

2000-08-05 16:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/: svn_string.h (1.22), svn_types.h (1.37):

	Define svn_string_t type in svn_string.h now, using explicit structs 
	for forward references.  

2000-08-05 15:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.11),
	libsvn_delta/delta_parse.c (1.10), libsvn_delta/xml_parse.c (1.10),
	tests/libsvn_delta/deltaparse-test.c (1.3):

	(svn_delta_make_xml_parser): new constructor function (rename of 
	svn_xml_make_parser).  
	
	Use it in test program.  

2000-08-05 15:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.10):

	Include xmlparse.h.  
	
	(svn_xml_make_parser): prototype.  

2000-08-05 14:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/: svn_delta.h (1.9), svn_types.h (1.36):

	Moved all delta definitions from svn_types.h to svn_delta.h.  
	
	Namespace-protect enum values with "svn_".  

2000-08-05 12:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.9), delta_parse.h
	(1.2), xml_parse.c (1.9):

	Remove useless constructors. :) 

2000-08-05 12:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.8),
	libsvn_delta/delta_parse.c (1.8), libsvn_delta/xml_parse.c (1.8):

	Made note about possible context optimization for data handler 
	callback.  

2000-08-05 12:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_delta.h (1.7), include/svn_types.h
	(1.35), libsvn_delta/delta_parse.c (1.7), libsvn_delta/xml_parse.c
	(1.7):

	Working with Ben: 
	
	Got rid of `svn_ancestor_t' -- it was only used for one thing, so
	just hold its fields inline.  
	
	Say `this_edit_content' instead of `new_edit_content', to avoid 
	implying that the type of the edit is `new'.  
	
	Point out some remaining bookkeeping tasks in comments.  
	
	Got rid of some old debugging code.  

2000-08-05 11:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.6), xml_parse.c (1.6):

	First draft of svn_xml_startElement().  

2000-08-05 11:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-1.delta (1.5):

	&lt;new&gt; tag always requires name attribute.  

2000-08-05 11:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.30):

	Oops, a little too eager in the "FILE" ==&gt; "file" conversion.  

2000-08-05 11:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.29):

	"FILE" ==&gt; "file" 

2000-08-05 11:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.6),
	libsvn_delta/delta_parse.c (1.5), libsvn_delta/delta_parse.h (1.1),
	libsvn_delta/xml_parse.c (1.5):

	Filling out main expat callback.  

2000-08-04 22:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.5), include/svn_types.h
	(1.34), libsvn_delta/delta_parse.c (1.4), libsvn_delta/xml_parse.c
	(1.4):

	
	1. Defined new enum svn_XML_elt_t, describing different XML elts we
	   may encounter when building a delta.  
	
	2. Defined svn_append_to_delta(delta, object, svn_XML_elt_t), which 
	   traverses a delta-in-progress recursively and attaches object to
	   the tip.  
	
	3. Started filling in main expat "open paren" callback with above
	routine.  

2000-08-04 21:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_types.h (1.33):

	Removed *next field from svn_edit_t, because our in-memory delta
	will _never_ need to hold more than one edit at a time;  one edit
	will always be "closed" before the next sibiling edit begins.  Thus
	the "edit" field of our delta should be thought of us as "the
	current edit we're working on", _not_ a list of edits.  

2000-08-04 17:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_delta/: delta_parse.c (1.3), xml_parse.c (1.3):

	Start constructors for delta components; we'll need destructors,
	too.  

2000-08-04 17:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.4):

	(svn_delta_digger_t): explain how diggers are used.  

2000-08-04 16:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_delta.h (1.3):

	Hmmm, somehow missed the local eval ritual -- put it in again.  

2000-08-04 16:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/: svn_delta.h (1.2), svn_hash.h (1.3):

	Use `apr_pool_t' now, not `ap_pool_t'.  
	
	Document callbacks as caller will use them.  
	
	Added the usual local eval ritual to the end of svn_delta.h and 
	svn_hash.h.  
	
	(unknown_elt_handler): more descriptive name for `default_handler'.  

2000-08-04 16:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_delta.h (1.1), include/svn_types.h
	(1.32), libsvn_delta/delta_parse.c (1.2), libsvn_delta/xml_parse.c
	(1.2), tests/libsvn_delta/deltaparse-test.c (1.2):

	Started XML-to-Delta callback system.  

2000-08-04 15:49   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.31):

	Point out streamy construction/deconstruction of deltas w.r.t. XML 
	parser, remove note about now-obsolete method.  

2000-08-04 15:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.30):

	(svn_edit_content_t): can include a tree delta as content.  
	
	(svn_ver_t, svn_user_t): cosmetic fix: use the `_t' suffix even in
	the structure namespace, for consistency.  

2000-08-04 15:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-1.delta (1.4):

	Double quotes for readability (as per Greg Stein's email about XML 
	accepting either).  

2000-08-04 14:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_delta/delta_parse.c (1.1),
	libsvn_delta/xml_parse.c (1.1),
	tests/libsvn_delta/deltaparse-test.c (1.1), libsvn_wc/deltaparse.c
	(1.2), tests/libsvn_wc/deltaparse-test.c (1.2):

	moving files around 

2000-08-04 13:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_wc/deltaparse.c (1.1),
	tests/libsvn_wc/deltaparse-test.c (1.1):

	deltaparser started 

2000-08-04 12:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/hashdump.c (1.8):

	Null-terminate the hand-constructed strings.  

2000-08-04 12:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.29):

	(svn_edit_t): add `action_end' in enum `kind', comment explaining
	why.  

2000-08-04 11:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-1.delta (1.3):

	Quote the value of the version number attribute, too.  

2000-08-04 11:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/hashdump.c (1.7):

	Put in the standard emacs local vars trailer.  

2000-08-04 11:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.16):

	obsoleted by ../libsvn_subr/hashdump.c 

2000-08-04 11:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/checkout-1.delta (1.2):

	Single quotes, not double quotes (this is XML).  

2000-08-04 11:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_wc/: checkout-1.delta (1.1),
	checkout-1.txt (1.1):

	A test delta.  

2000-08-04 07:55   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_types.h (1.28):

	readability tweak 

2000-08-04 07:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_types.h (1.27):

	tweak 

2000-08-04 07:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_types.h (1.26):

	Heh, just tweaking Karl's data schema... almost identical to mine.
	:) 

2000-08-03 16:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.28):

	Settled skelta issues w/ Ben, able to describe rest of working copy 
	format.  

2000-08-03 15:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_subr/hashdump-test.c (1.5):

	(main): pass 0, not NULL, as arg 2 to svn_create_error().  

2000-08-03 15:03   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* autogen.sh (1.7):

	autogen.sh checks for automake &gt;= 1.4 now 

2000-08-03 14:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.2):

	clarify tentative diff interface 

2000-08-03 14:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* TASKS (1.1):

	parallelizable tasks 

2000-08-03 09:39   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.11), subversion/include/svn_error.h (1.6),
	subversion/include/svn_hash.h (1.2), subversion/include/svn_parse.h
	(1.3), subversion/include/svn_string.h (1.21),
	subversion/include/svn_svr.h (1.30), subversion/include/svn_types.h
	(1.25), subversion/include/svn_wc.h (1.5),
	subversion/libsvn_subr/hashdump.c (1.6),
	subversion/libsvn_subr/svn_error.c (1.26),
	subversion/libsvn_subr/svn_parse.c (1.28),
	subversion/tests/libsvn_subr/hashdump-test.c (1.4),
	subversion/libsvn_wc/propdump.c (1.15):

	whoa, APR has changed.  s/ap_/apr_ 

2000-08-03 07:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/README (1.27):

	Added some comments for discussion 

2000-08-02 17:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.10):

	./configure now tells apr/ to run configure; our top-level Makefile
	builds apr first now, too.  

2000-08-01 16:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_subr/.cvsignore (1.2), doc/.cvsignore
	(1.6, milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta):

	tweaking .cvsignores 

2000-08-01 16:31   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/.cvsignore (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta),
	doc/.cvsignore (1.5), subversion/libsvn_subr/.cvsignore (1.1,
	milestone-1, milestone-1-beta),
	subversion/tests/libsvn_subr/.cvsignore (1.1):

	adding .cvsignore files all around which ignore automake/autoconf
	stuff 

2000-08-01 16:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* .cvsignore (1.2), configure.in (1.9), subversion/Makefile.am
	(1.5):

	tweak 

2000-08-01 15:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: Makefile.am (1.4), tests/libsvn_subr/Makefile.am
	(1.2), tests/libsvn_subr/hashdump-test.sh (1.1):

	&lt;make check&gt; now runs automated tests in libsvn_string and
	libsvn_subr 

2000-08-01 13:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.8), subversion/Makefile.am (1.3), doc/Makefile.am
	(1.2, milestone-1, milestone-1-beta), doc/README (1.8, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	doc/ should be autoconf'd now 

2000-08-01 11:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: Makefile (1.14), Makefile.am (1.1):

	autoconfiscating doc/ 

2000-07-31 20:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.27):

	Try not to contradict ../subversion/libsvn_wc/README too much, 
	although this whole section will have to be updated in a big way 
	eventually.  

2000-07-31 20:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.26):

	Start describing concrete working copy layout and algorithms for 
	walking around in it.  

2000-07-31 20:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/Makefile.am (1.2):

	tweak 

2000-07-31 20:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.7):

	save work 

2000-07-31 20:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/tests/libsvn_subr/: Makefile (1.2), Makefile.am (1.1):

	autoconf libsvn_subr/tests/ 

2000-07-31 20:09   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/Makefile.am (1.1):

	[no log message] 

2000-07-31 20:08   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* autogen.sh (1.6), subversion/Makefile.am (1.2),
	subversion/include/svn_error.h (1.5),
	subversion/libsvn_subr/README.errors (1.3, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), subversion/libsvn_subr/svn_error.c (1.25):

	saving autoconf work 

2000-07-31 19:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* configure.in (1.6):

	still autoconfiscating... getting the hang of it. :) 

2000-07-31 15:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.25, before-big-rewrite):

	Scenario 2.  

2000-07-31 14:04   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* autogen.sh (1.5), configure.in (1.5):

	hacking on autoconfiscation 

2000-07-31 13:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.24):

	Scenario 1.  

2000-07-31 12:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.23):

	Point out the implied redundancy between Tables 2 and 3.  

2000-07-31 12:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.22):

	Quick tweak before working on scenarios.  

2000-07-31 12:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.21):

	Get rid of the "working here" tag.  Not working there anymore.  

2000-07-31 11:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.20):

	The tables don't need to show conflict foldability -- that's just an 
	optimization, not a fundamental property.  

2000-07-31 11:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.19):

	Mark working point more clearly for JimB.  

2000-07-28 11:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/hashdump.c (1.5):

	fixing casting warning 

2000-07-27 23:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/hashdump.c (1.4):

	(svn_pack_bytestring): Don't reallocate, just assemble the string by 
	hand, copying the data pointer.  

2000-07-27 16:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: libsvn_subr/hashdump.c (1.3),
	tests/libsvn_subr/hashdump-test.c (1.3):

	Test program works;  we can read/write hash tables to disk now.  

2000-07-27 16:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_hash.h (1.1), libsvn_subr/hashdump.c
	(1.2), libsvn_wc/Makefile (1.5), tests/libsvn_subr/Makefile (1.1),
	tests/libsvn_subr/hashdump-test.c (1.2):

	Header file reorganization 

2000-07-27 15:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.4), libsvn_subr/hashdump.c
	(1.1), libsvn_wc/hashdump.c (1.7),
	tests/libsvn_subr/hashdump-test.c (1.1):

	Movin' stuff around 

2000-07-27 01:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/hashdump.c (1.6):

	Document hash dump format more accurately, too.  

2000-07-27 00:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/hashdump.c (1.5):

	(read_length_line): document better.  

2000-07-27 00:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/hashdump.c (1.4):

	(hash_read): started.  
	
	(read_length_line): helper for above.  

2000-07-27 00:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/hashdump.c (1.3):

	Call return values `err', not `status', and deprolicize accordingly.  
	
	Jim was right, we don't need the SVN_NO_ERROR mnemonic.  If we just 
	use a variable named `err', then the clearest thing to do is test it 
	as a boolean directly.  

2000-07-26 23:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile (1.4), hashdump.c (1.2):

	Run in static space.  

2000-07-26 23:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.24):

	Fix format mismatch in fprintf().  

2000-07-26 23:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/: svn_string.h (1.20), svn_types.h (1.24):

	Define `svn_string_t' in svn_types.h after all, otherwise we had a 
	circular include problem.  

2000-07-26 17:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/hashdump.c (1.1):

	PR:hash_write() is now generalized, taking a helper function.  TODO:
	       hack the test program to use svn_unpack_bytestring() as the helper
	function, and print out a property hash.  

2000-07-26 16:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_wc/README (1.18):

	a few comments 

2000-07-25 18:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.17):

	Clean out a lot of cruft.  
	
	Almost at a General Theory of Change Compatibility here.  

2000-07-25 17:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.16):

	Justify the Symmetry Principle.  (As close to proof as we're going
	to get, probably.) 

2000-07-25 14:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.15):

	More expanation fill-in.  Following through examples based on a few
	of the table cells (a pain now, will be glad we did it later).  
	
	The examples are showing up a need to tweak Table 1, I think.  

2000-07-24 17:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.14):

	Explain commit algorithm in full.  

2000-07-24 11:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.13):

	Lay out third server decision table (direct changes against direct 
	changes).  
	
	Make earlier parts of text clearer.  

2000-07-22 17:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.12):

	Write up conflict tables.  

2000-07-21 19:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.11):

	Checkin so can go work at home.  

2000-07-21 17:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.10):

	More explanation (writing with Ben, wish commits could have N
	authors).  

2000-07-21 16:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.9):

	Wow.  We are going to *own* this problem by the time we're done.  
	
	In progress describing the pre-commit check and 
	update-delta-generation algorithms.  It's kind of hairy, but Ben has 
	found a theoretical framework, we are still applying it.  

2000-07-21 12:06   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.8):

	more tweaks 

2000-07-21 11:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.7):

	tweaks 

2000-07-21 11:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.6):

	Update/commit algorithm described.  Aaaah.  

2000-07-21 11:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/the_update_problem.txt (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta):

	save work 

2000-07-21 11:13   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/the_update_problem.txt (1.1):

	saving work 

2000-07-21 11:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.5):

	Update/commit algorithm half-described (good checkin point).  

2000-07-21 10:46   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/README (1.4):

	List principles involved in the update algorithm (next, describe the 
	algorithm).  

2000-07-18 16:23   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.14):

	Fix buglet noticed by JimB (that of not being handling the 
	most-negative number).  

2000-07-18 15:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.29):

	Removed policy-level permission-checking from server;  redundant
	with Apache.  

2000-07-17 17:32   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/: svn_string.h (1.19), svn_types.h (1.23):

	* svn_string.h: No need to #include &lt;svn_types.h&gt; any more.  Do
	#include &lt;apr_pools.h&gt;, however.  
	(svn_string_t): Move the definition of this type here.  
	* svn_types.h: #include &lt;svn_string.h&gt;.  
	(svn_string_t): Definition removed.  PR: Obtained from: Submitted
	by: Reviewed by: 

2000-07-17 17:19   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/include/svn_parse.h (1.2):

	New parsing API, and underlying data structure.  

2000-07-17 16:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.3), include/svn_parse.h
	(1.1), libsvn_subr/svn_error.h (1.26), libsvn_subr/svn_parse.h
	(1.9):

	moved headers to include/ 

2000-07-17 16:09   Jim Blandy &lt;jimb@redhat.com&gt;

	* subversion/: include/svn_string.h (1.18), include/svn_svr.h
	(1.28), include/svn_types.h (1.22), include/svn_wc.h (1.4),
	libsvn_subr/svn_error.h (1.25), libsvn_subr/svn_parse.h (1.8):

	Rename symbols used to protect header files from multiple #inclusion 
	so the symbols don't tread on the system C library's name space.  
	PR: Obtained from: Submitted by: Reviewed by: 

2000-07-17 14:50   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.23):

	oops, I meant vfprintf 

2000-07-17 14:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.22):

	fix default warning handler 

2000-07-17 14:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/svn-config-files (1.2, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), subversion/include/svn_svr.h (1.27),
	subversion/libsvn_subr/svn_error.c (1.21),
	subversion/libsvn_subr/svn_error.h (1.24),
	subversion/libsvn_subr/svn_parse.c (1.27):

	add warning hook to policy structure, replace warning calls
	appropriately.  

2000-07-17 13:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.h (1.23), svn_parse.c (1.26):

	tr/SVN_SUCCESS/SVN_NO_ERROR 

2000-07-17 13:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svn-dev.el (1.4, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	Get rid of annoying load-message pause.  
	
	I have no idea why I put it in there in the first place.  

2000-07-17 11:18   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/client.texi (1.26):

	Specify that the VDelta data is encoded using MIME Base64.  

2000-07-17 10:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_svr.h (1.26), include/svn_types.h
	(1.21), libsvn_subr/svn_error.h (1.22):

	Major rewrite of Subversion Server logic: instead of 15 wrappered 
	filesystem calls, we now have *one* filesystem wrapper that takes a 
	svn_fsrequest_t structure as input.  MUCH CLEANER.  

2000-07-17 09:09   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.h (1.21), svn_parse.c (1.25):

	No subversion routine calls svn_handle_error() anymore; instead, 
	warnings are created by generating & nesting a stack of errors of
	type SVN_WARNING.  At the end of the routine, the batch (stack) is 
	returned.  Applications that have their own error-handling code
	should recognized the SVN_WARNING type and realize it's non-fatal.  

2000-07-14 19:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_svr.h (1.25), libsvn_subr/svn_error.h
	(1.20):

	Fleshing out lots of server routines... much stuff.  

2000-07-14 17:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* AUTHORS (1.2):

	Added "make changelog" rule, runs cvs2cl.pl but only on certain 
	subdirs, of which apr/ is not one.  This makes ChangeLog generation 
	much faster, which is good, since 90% of the time we're looking for
	a change that happened in Subversion.  
	
	[This also means that `.' is being ignored, but that will require a 
	slightly fancy solution.  Coming soon.] 
	
	Reformat AUTHORS file for --usermap option to cvs2cl.pl.  

2000-07-14 16:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.6), autogen.sh (1.4):

	Deal with new apr/ situation.  

2000-07-14 16:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.20), svn_error.h (1.19),
	svn_parse.c (1.24):

	Added src_err field to error structure, changed calls to
	svn_create_error 

2000-07-13 19:44   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/propdump.c (1.13):

	*) there are easier ways to concatenate C strings 
	*) note: svn_wc_proplist_write() should probably take a const char * 
	*) tweaks for new error handling 

2000-07-13 19:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_svr.h (1.24), libsvn_subr/svn_parse.c
	(1.23), libsvn_subr/svn_parse.h (1.7):

	Changed the way server inits; fixed other random typos.  

2000-07-13 19:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.4):

	Okay, stringtest builds too.  

2000-07-13 18:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* configure.in (1.3):

	Got libsvn_string.so building...  

2000-07-13 17:07   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: README.errors (1.2), svn_error.h (1.18):

	Got rid of SVN_RETURN_IF_ERROR() and SVN_RETURN_WRAPPED_ERROR() 
	macros; expand to inline code everywhere they had been used.  
	
	There was a general consensus that a macro affecting control flow
	must meet three criteria: 
	
	   1. The need must be compelling (for example, it replaces very 
	      complex inline code).  
	
	   2. Its meaning must be obvious from looking at a use of the macro 
	      (without reference to its expansion).  
	
	   3. It must work in any context.  
	
	These macros probably met 2 and 3, but not 1.  

2000-07-13 14:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.19), svn_error.h (1.17),
	svn_parse.c (1.22):

	Removed FATAL flag from error structure.  

2000-07-13 10:04   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_wc/: .cvsignore (1.2), Makefile (1.3),
	propdump.c (1.12):

	compile/build fixes 

2000-07-13 10:03   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/: svn_error.c (1.18), svn_error.h (1.16):

	compilation fixes 

2000-07-13 07:05   Greg Stein &lt;gstein@lyra.org&gt;

	* subversion/libsvn_subr/svn_error.h (1.15):

	tweak the macros so they bind properly within an enclosing if/else
	construct 

2000-07-13 01:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.3):

	better msg 

2000-07-13 01:09   Jim Blandy &lt;jimb@redhat.com&gt;

	* README (1.5):

	test commit as jimb, no change.  -kff 

2000-07-13 00:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* autogen.sh (1.2), configure.in (1.2):

	more autoconfiscation work 

2000-07-13 00:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_svr.h (1.23), libsvn_subr/svn_error.c
	(1.17), libsvn_subr/svn_error.h (1.14):

	
	 * Removed ap_err and ap_description fields from error structure 
	 * svn_create_error() no longer tries to fill these fields 
	 * svn_handle_error() calls ap_canonical_error() and ap_strerror() 
	                      when printing error structure 

2000-07-13 00:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* .cvsignore (1.1), AUTHORS (1.1), COPYING (1.1), HACKING (1.4),
	NEWS (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1), autogen.sh (1.1),
	configure.in (1.1), subversion/Makefile.am (1.1):

	autoconfiscation in progress 

2000-07-12 23:13   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.16), svn_error.h (1.13):

	tweaky tweaky 

2000-07-12 22:48  dlr

	* subversion/libsvn_subr/svn_error.c (1.15):

	Corrected invalid pointer deference on assignment introduced during 
	last commit.  

2000-07-12 22:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/README.errors (1.1):

	Added instructions on exception system 

2000-07-12 22:15   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.14), svn_error.h (1.12),
	svn_parse.c (1.21):

	error system now nests exceptions 

2000-07-12 16:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_error.h (1.11):

	prefixed SVN_RETURN_IF_ERROR, and removed curly braces from it.  

2000-07-12 15:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.11):

	Correct path to svn-dev.el in emacs local vars.  

2000-07-12 15:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.20):

	Namespace-protect svn_svr_action_t, to avoid enumbiguities.  (The
	prefix is "svn_action_".  While "svn_svr_action_" would probably 
	have been preferable, it's pretty long, and even starts getting
	close to the 32-char limit, as in
	`svn_svr_action_get_dirent_propnames'.) 
	
	Use `svn_delta_action_t' instead of `svn_change_action_t', due to 
	possible noun/verb confusion.  
	
	All callers changed.  

2000-07-12 14:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svn-dev.el (1.3):

	restore old value of PAGER env var 

2000-07-12 14:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svn-dev.sh (1.3):

	wording tweak so output is less alarming 

2000-07-12 14:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: libsvn_wc/propdump.c (1.10), libsvn_subr/svn_error.c
	(1.13), libsvn_subr/svn_parse.c (1.20):

	Use suggested "" vs &lt;&gt; #include convention everywhere.  

2000-07-11 23:41   Greg Stein &lt;gstein@lyra.org&gt;

	* expat-lite/Makefile (1.1):

	get libexpat.a built. not an ideal Makefile, but that can happen
	    when SVN gets a true config/build system.  

2000-07-11 23:28   Greg Stein &lt;gstein@lyra.org&gt;

	* expat-lite/: Makefile.in (1.2), xmlparse.dsp (1.2), xmltok.dsp
	(1.2):

	oops. these should not have been imported. we have a different build 
	environment from Apache.  

2000-07-11 22:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_svr.h (1.22), include/svn_types.h
	(1.19), libsvn_subr/svn_error.h (1.10):

	saving work 

2000-07-11 21:00   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.9):

	Hmm.  Not sure if this bug isn't in apr_hash.c itself, now...  
	
	After this code 
	
	  /* Test overwriting: same key both times, but different values. */ 
	  key = svn_string_create ("twice-used property name", pool); 
	  ap_hash_set (proplist, key-&gt;data, key-&gt;len, 
	               svn_string_create ("This is the FIRST value.",
	  pool)); ap_hash_set (proplist, key-&gt;data, key-&gt;len, 
	               svn_string_create ("This is the SECOND value.",
	               pool)); 
	
	there should be no way for the "FIRST" value to still be in the hash 
	table, right?  Why is it still appearing in the dump, and not 
	"SECOND"? 

2000-07-11 20:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_svr.h (1.21), include/svn_types.h
	(1.18), include/svn_wc.h (1.3), libsvn_wc/propdump.c (1.8):

	Eliminate typedef of `svn_proplist_t' to `ap_hash_t'.  
	
	Change all references to use `ap_hash_t'.  
	
	We'll be good, GCC.  Promise.  

2000-07-11 20:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.7):

	Hash on (svn_string_t).data now.  
	
	There's still a bug, though; see the final two entries in the test 
	main() function.  

2000-07-11 20:23   Greg Stein &lt;gstein@lyra.org&gt;

	* expat-lite/README.svn (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	describe where this stuff comes from and how to update it.  

2000-07-11 20:20   Greg Stein &lt;gstein@lyra.org&gt;

	* expat-lite/: CHANGES (1.1), Makefile.in (1.1), asciitab.h (1.1),
	dllmain.c (1.1), expat.html (1.1), hashtable.c (1.1), hashtable.h
	(1.1), iasciitab.h (1.1), latin1tab.h (1.1), nametab.h (1.1),
	utf8tab.h (1.1), xmldef.h (1.1), xmlparse.c (1.1), xmlparse.def
	(1.1), xmlparse.dsp (1.1), xmlparse.h (1.1), xmlrole.c (1.1),
	xmlrole.h (1.1), xmltok.c (1.1), xmltok.def (1.1), xmltok.dsp
	(1.1), xmltok.h (1.1), xmltok_impl.c (1.1), xmltok_impl.h (1.1),
	xmltok_ns.c (1.1):

	Initial revision 

2000-07-11 20:20   Greg Stein &lt;gstein@lyra.org&gt;

	* expat-lite/: CHANGES (1.1.1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), Makefile.in (1.1.1.1), asciitab.h (1.1.1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta), dllmain.c (1.1.1.1), expat.html
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), hashtable.c
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), hashtable.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), iasciitab.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), latin1tab.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), nametab.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), utf8tab.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), xmldef.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), xmlparse.c
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta),
	xmlparse.def (1.1.1.1), xmlparse.dsp (1.1.1.1), xmlparse.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), xmlrole.c
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), xmlrole.h
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), xmltok.c
	(1.1.1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta), xmltok.def
	(1.1.1.1), xmltok.dsp (1.1.1.1), xmltok.h (1.1.1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), xmltok_impl.c (1.1.1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), xmltok_impl.h (1.1.1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), xmltok_ns.c (1.1.1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta) (utags: CVS_2_0_20000711):

	apache-2.0_20000711/src/lib/expat-lite/ 

2000-07-11 20:19   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.20):

	checking in current state, so karl can do global search/replace 

2000-07-11 19:53   Greg Stein &lt;gstein@lyra.org&gt;

	* README (1.4):

	Test commit as gstein; no change.  -kff 

2000-07-11 19:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.19):

	prefixed all non-exported routines with svn_ to avoid namespace
	conflicts.  

2000-07-11 19:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.18):

	parser stores string-&gt;data as a hash key now, not (string *), phew.  

2000-07-11 19:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.12), svn_error.h (1.9),
	svn_parse.c (1.17), svn_parse.h (1.6):

	svn_parse() now returns svn_error_t *, and takes ap_hash_t ** as an
	argument 

2000-07-11 02:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: README (1.3), propdump.c (1.6):

	Clean up some loose ends, zzzzz.  

2000-07-11 01:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: Makefile (1.2), propdump.c (1.5):

	Clean up, add "make test" rule.  

2000-07-11 01:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.4):

	Remove debugging code.  

2000-07-11 01:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.3):

	Be even more readable than that.  

2000-07-11 01:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/propdump.c (1.2):

	Be more readable in num_into_string().  

2000-07-11 01:32   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_wc/: .cvsignore (1.1), Makefile (1.1), README
	(1.2), propdump.c (1.1):

	Implemented property dumping.  

2000-07-11 01:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.11):

	Don't output that line of asterisks.  (Although we may have a server
	error prefix later, like CVS's "E ".  

2000-07-11 01:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.2):

	Minor textual tweaks.  

2000-07-11 01:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.3):

	Note presence of glib.  

2000-07-11 01:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.h (1.8), svn_parse.c (1.16):

	Define SVN_FATAL and SVN_NON_FATAL, use in all error calls.  (For
	readability).  

2000-07-11 01:29   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.17):

	Resolve some enumbiguities.  

2000-07-11 01:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svn-dev.el (1.2):

	Added `svn-perldoc' and friends.  
	
	Run "M-x svn-perldoc", using "apr/include/apr_lib.h" when it asks
	for a file, to see what it does.  

2000-07-10 20:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.19):

	saving work, working on loading plugins 

2000-07-10 17:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.10):

	nicer error printout 

2000-07-07 20:42   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_types.h (1.16):

	Added delta types (needed for libsvn_wc).  

2000-07-07 20:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.18):

	svn_svr_init() test works...  

2000-07-07 19:44   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_string.h (1.17), libsvn_subr/svn_error.h
	(1.7), libsvn_subr/svn_parse.c (1.15):

	saving lots of random work threads.  

2000-07-07 19:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svn-dev.sh (1.2):

	Fix (thanks, Ben).  

2000-07-07 17:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.25):

	Correct decimal ascii number of single forward quote (&#39, not
	&#96).  

2000-07-07 15:53   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.17):

	save work\! 

2000-07-07 15:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/svn-dev.sh (1.1):

	Set up development environment (handles LD_LIBRARY_PATH for now).  

2000-07-07 15:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: svn_parse.c (1.14), svn_parse.h (1.5):

	Revert formatting tweaks from previous commit.  
	
	Neurotic control tendencies *must be controlled*.  

2000-07-07 14:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: svn_parse.c (1.13), svn_parse.h (1.4):

	Change return conventions of slurp__to(), tweak some formatting.  

2000-07-06 23:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.12):

	Parser bug fixed.  Test program works correctly, and successfully
	pretty-prints our hash of hashes.  Sorry, Karl, I beat you to it. :) 

2000-07-06 19:45   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_string.h (1.16), libsvn_subr/svn_error.c
	(1.9), libsvn_subr/svn_parse.c (1.11), libsvn_subr/svn_parse.h
	(1.3):

	debugging parser; svn_string_print is temporarily altered 

2000-07-06 18:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_string.h (1.15), libsvn_subr/svn_parse.c
	(1.10):

	moved some convenient string routines from svn_parse.c to
	svn_string.c 

2000-07-05 23:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_string.h (1.14), libsvn_subr/svn_error.c
	(1.8), libsvn_subr/svn_error.h (1.6), libsvn_subr/svn_parse.c
	(1.9):

	bugfixes 

2000-07-05 23:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.7), svn_parse.c (1.8):

	mmm, no more compiler warnings from -Wall...  

2000-07-05 22:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.6), svn_error.h (1.5),
	svn_parse.c (1.7), svn_parse.h (1.2):

	svn_error.c and svn_parse.c actually compile now.  

2000-07-05 21:37   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.6):

	time to write a parser test program 

2000-07-05 20:06   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.5):

	almost done coding parser... heh 

2000-07-05 19:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_parse.c (1.4):

	save, save, save...  

2000-07-05 17:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: alloc.c (1.6), alloc.h (1.6),
	svn_error.c (1.5), svn_error.h (1.4), svn_parse.c (1.3):

	removing uncessary alloc files, we're using apr pools now.  

2000-07-05 14:51   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_string.h (1.13), include/svn_types.h
	(1.15), libsvn_subr/svn_parse.c (1.2):

	added svn_string_2cstring() 

2000-07-05 14:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/svn-config-files (1.1), subversion/libsvn_subr/svn_parse.c
	(1.1), subversion/libsvn_subr/svn_parse.h (1.1):

	started writing parser 

2000-07-04 15:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_svr.h (1.16), svn_types.h (1.14):

	really big checkin 

2000-07-03 22:17   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_types.h (1.13):

	fleshing out filesystem wrappers in full, ahhh.  

2000-07-03 21:30   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.15):

	adding internal, non-exported routines to server library 

2000-07-03 20:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_svr.h (1.14), libsvn_subr/svn_error.c
	(1.4), libsvn_subr/svn_error.h (1.3):

	save save save 

2000-07-03 20:12   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/svn_error.c (1.3):

	error handler 

2000-07-03 19:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/libsvn_subr/: svn_error.c (1.2), svn_error.h (1.2):

	simple error handling stuff started 

2000-07-03 18:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: include/svn_error.h (1.2), libsvn_subr/svn_error.h
	(1.1):

	Move svn_error.h from include/ to svn_subr/, because it's an
	internal interface, not an exported one.  

2000-07-03 18:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/: include/svn_error.h (1.1), libsvn_subr/svn_error.c
	(1.1):

	adding error handling files 

2000-07-03 14:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_svr.h (1.13), svn_types.h (1.12):

	Many changes; using svn_strings, ap_arrays, ap_hashes, and ap_pools
	in many new places.  

2000-06-30 20:42   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_string.h (1.12), svn_svr.h (1.12),
	svn_types.h (1.11):

	save, save, save 

2000-06-30 18:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/include/svn_wc.h (1.1):

	Oops, forgot to add this header file in the previous commit.  

2000-06-30 18:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.3), doc/README (1.7), subversion/include/svn_svr.h
	(1.11), subversion/include/svn_types.h (1.10),
	subversion/libsvn_wc/README (1.1):

	Started working copy management library.  
	
	Update other headers and docs to note some `todo' items.  

2000-06-29 15:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.11):

	peppered const's into string library.  yum.  

2000-06-23 15:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.10):

	committed changes suggested by Greg Stein 

2000-06-23 10:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.9):

	bytestrings now work correctly with ap_pool_t 

2000-06-22 18:48   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.8):

	libsvn_string now uses ap_pool_t instead of malloc;  but having LD
	problems trying to link libapr.a in, argh 

2000-06-21 13:54   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.7):

	finished bytestring library and little test program.  

2000-06-21 13:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_string.h (1.6), svn_types.h (1.9):

	adding tests 

2000-06-21 12:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.5):

	added convenience routine 

2000-06-21 12:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.4):

	fixed string routines 

2000-06-21 10:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_string.h (1.3):

	about to fix errors 

2000-06-20 19:08   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/server.texi (1.32, milestone-1, milestone-1-beta):

	Use @emph instead of @b, where appropriate.  

2000-06-20 17:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/tests/libsvn_vcdiff/: README (1.2), target0.txt (1.1)
	(utags: milestone-1, milestone-2, milestone-1-beta,
	post-edit-baton-removal, pre-edit-baton-removal):

	Added test with example text from vdelta paper.  
	
	(make_vdelta): replaces take_delta().  Describe algorithm and
	planned improvements in expository comment at top.  DTRT at end of
	sequence.  Note o-b-o-e.  
	
	(main): Allow deltas against null source, since it's just
	compression anyway.  

2000-06-20 16:10   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_string.h (1.2), svn_types.h (1.8):

	added bytestring routines 

2000-06-20 15:58   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/client.texi (1.24):

	Describe concrete form for text, property, and tree deltas.  
	
	Allow tree deltas to contain property deltas, for files,
	directories, and directory entries.  
	
	Add version numbers to tree deltas.  

2000-06-19 18:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/: tests/libsvn_vcdiff/README (1.1),
	tests/libsvn_vcdiff/source.txt (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta), tests/libsvn_vcdiff/target1.txt (1.1,
	milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta), tests/libsvn_vcdiff/target2.txt
	(1.1, milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta), tests/libsvn_vcdiff/target3.txt
	(1.1, milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta), tests/libsvn_vcdiff/target4.txt
	(1.1, milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta), tests/libsvn_vcdiff/target5.txt
	(1.1, milestone-2, post-edit-baton-removal, pre-edit-baton-removal,
	milestone-1, milestone-1-beta), libsvn_subr/alloc.c (1.5),
	libsvn_subr/alloc.h (1.5):

	Commit what I have, though further research with xdelta may make it 
	moot.  
	
	This is a working binary diff engine now, by the way, though the 
	output format is kind of bogus. :-)  Run `make', then `make test' to 
	see it in action.  (Start at the top of the output and work your way 
	down, for best comprehension, and read tests/README too.) 

2000-06-19 17:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* README (1.2):

	Note presence of APR.  

2000-06-19 16:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_string.h (1.1), svn_types.h (1.7):

	add string files 

2000-06-19 16:14   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_types.h (1.6):

	save 

2000-06-16 17:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.10):

	plugins now register themselves, rather than the server digging for
	them 

2000-06-16 17:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_svr.h (1.9), svn_types.h (1.5):

	wrote authorization_hooks glue code iterator thingie 

2000-06-16 16:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.8):

	save save save 

2000-06-16 12:33   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.7):

	saving work 

2000-06-16 11:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_svr.h (1.6), svn_types.h (1.4):

	save work 

2000-06-15 20:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: alloc.c (1.4), alloc.h (1.4):

	Call it svn_slurp_file().  
	
	(Yes, I will check out APR tomorrow. :-) ) 

2000-06-15 20:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: alloc.c (1.3), alloc.h (1.3):

	Added slurp_file(), with some reservations.  

2000-06-15 20:24   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: alloc.c (1.2), alloc.h (1.2):

	Started hash tables for use in vdelta.  

2000-06-15 19:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/libsvn_subr/: alloc.c (1.1), alloc.h (1.1):

	started subr library 

2000-06-15 17:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_svr.h (1.5), svn_types.h (1.3):

	started writing server code and a first plugin 

2000-06-15 13:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.4):

	tweak 

2000-06-15 13:25   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.31):

	Added security section, finally.  

2000-06-15 11:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/svn-design.texi (1.13):

	Move contents commands to before `Top' node.  Now we get a real
	table of contents.  

2000-06-14 17:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.3):

	added svn_getuser () 

2000-06-13 10:34   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_types.h (1.2):

	changed typedefs for common svn types 

2000-06-13 10:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/future.texi (1.7, milestone-1, milestone-1-beta):

	fixed future.texi nodes 

2000-06-10 13:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/README (1.6):

	Put Jim's texinfo notes here.  

2000-06-09 17:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.2):

	tweak 

2000-06-09 17:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/: svn_svr.h (1.2), svn_types.h (1.1):

	First stab at global types, and basic declarations of server
	library.  

2000-06-09 13:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* subversion/include/svn_svr.h (1.1):

	saving work 

2000-06-08 17:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/future.texi (1.6):

	added SMTP network layer idea to blue-sky section.  :) 

2000-06-06 12:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* HACKING (1.1), INSTALL (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	README (1.1), subversion/svn-dev.el (1.1):

	New files.  

2000-06-06 12:40   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/: .cvsignore (1.4), Makefile (1.13), client.texi (1.23),
	future.texi (1.5), goals.texi (1.9, milestone-1, milestone-1-beta),
	model.texi (1.8, milestone-1, milestone-1-beta), server.texi
	(1.30), svn-design.texi (1.12):

	* client.texi, future.texi, goals.texi, model.texi, server.texi: 
	Regenerate menus.  
	* server.texi: Make sure each section has a @node command too.  Give 
	each node a unique name.  
	* svn-design.texi: Add a @top command after the ``Top'' @node
	command.  
	
	PR: Obtained from: Submitted by: Reviewed by: 

2000-06-06 12:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/README (1.5):

	Edited README 

2000-06-06 12:24   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/Makefile (1.12):

	test commit number 3, ignore.  -kff 

2000-06-06 12:22   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/Makefile (1.11):

	test commit number 2, ignore.  -kff 

2000-06-06 12:20   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/Makefile (1.10):

	test commit, ignore.  -kff 

2000-06-06 11:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/README (1.4):

	undo previous test commit 

2000-06-06 11:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/README (1.3):

	test commit, please ignore 

2000-06-06 08:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/: .cvsignore (1.3), svn-design.texi (1.11):

	unimportant tweaks 

2000-06-05 16:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* subversion/LICENSE (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta):

	license for new source code directory 

2000-06-05 16:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: Makefile (1.7), README (1.7), diagram1.dia (1.2),
	diagram1.eps (1.2), meta-implementation.txt (1.2), outline2html.pl
	(1.10), subversion.txt (1.52):

	removed obsolete files 

2000-06-05 12:07  jrobbins

	* www/cvs_help.html (1.4, before-obolete-dir-removals):

	corrected broken link 

2000-06-03 02:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.13, before-obolete-dir-removals):

	Added other names to history.  

2000-06-03 02:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.12, before-obolete-dir-removals):

	better intro 

2000-06-03 02:18   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.11):

	fix typo 

2000-06-03 02:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/index.html (1.12):

	tweak 

2000-06-03 02:14   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.10):

	note about html 

2000-06-03 02:09   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.11):

	editing front page still 

2000-06-03 01:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.9):

	svn-design, not subversion, now 

2000-06-03 01:57   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.10):

	changed bottom again 

2000-06-03 01:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.8):

	fix typo 

2000-06-03 01:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/project_docs.html (1.7):

	point to new docs 

2000-06-03 01:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/Makefile (1.9, before-obolete-dir-removals):

	www target 

2000-06-03 01:54   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/index.html (1.9):

	updated main page 

2000-06-03 01:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/Makefile (1.8):

	Hardcode path to dvipdf.  

2000-06-03 01:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/: .cvsignore (1.2, before-obolete-dir-removals), Makefile
	(1.7), README (1.2, before-obolete-dir-removals), architecture.texi
	(1.13, milestone-1, milestone-1-beta, before-obolete-dir-removals),
	client.texi (1.22, before-obolete-dir-removals), future.texi (1.4,
	before-obolete-dir-removals), goals.texi (1.8,
	before-obolete-dir-removals), license.texi (1.2, milestone-1,
	milestone-1-beta, before-obolete-dir-removals), model.texi (1.7,
	before-obolete-dir-removals), protocol.texi (1.4, milestone-1,
	milestone-1-beta, before-obolete-dir-removals), server.texi (1.29,
	before-obolete-dir-removals), svn-design.texi (1.10,
	before-obolete-dir-removals), svn-doc.el (1.3, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta, before-obolete-dir-removals):

	No change, just driving loginfo.  

2000-06-03 01:41   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/model.texi (1.6):

	formatting fix 

2000-06-03 01:40   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/: Makefile (1.6), architecture.texi (1.12), client.texi
	(1.21), future.texi (1.3), goals.texi (1.7), model.texi (1.5),
	protocol.texi (1.3), server.texi (1.28), svn-design.texi (1.9)
	(utags: after-lifeboat-checkin):

	from lifeboat 

2000-06-02 14:20   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.27, before-lifeboat-checkin):

	preparing for bubbleup explanation 

2000-06-02 13:32   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.26):

	leetle feexes 

2000-06-02 13:10   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/client.texi (1.20, before-lifeboat-checkin):

	Fix sectioning levels.  Minor text changes.  

2000-06-02 12:40   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.25):

	Whittled away the filesystem API, point to client section.  

2000-06-02 12:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.19):

	correct some data types 

2000-06-02 12:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.18):

	Put "Requires/Provides" lists at the front of each section.  

2000-06-02 12:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.17):

	Completed merge from Ben's server API list.  

2000-06-02 12:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/: client.texi (1.16), server.texi (1.24):

	progress 

2000-06-02 10:58   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.11, before-lifeboat-checkin),
	server.texi (1.23):

	Removed all references to high-level' :) 

2000-06-02 10:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.15):

	Put working copy layout and library as subnodes of new node "Working 
	copies and the working copy library".  Still a little awkward, may 
	reorganize.  

2000-06-02 10:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/goals.texi (1.6, before-lifeboat-checkin):

	tweak 

2000-06-01 17:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.14):

	now makeable 

2000-06-01 17:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.13):

	make 

2000-06-01 17:47   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.22):

	saving work, now with Jimb suggestions (TM) applied 

2000-06-01 17:26   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.12):

	update for jim 

2000-06-01 17:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.10), server.texi (1.21):

	Rewrote a lot of architecture.texi, still rewriting server.texi 

2000-06-01 17:02   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/server.texi (1.20):

	Fix some minor typos.  

2000-06-01 16:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.11):

	commit for Ben 

2000-06-01 16:01   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.19):

	Removed entire database section.  

2000-06-01 15:39   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: Makefile (1.5, before-lifeboat-checkin), architecture.texi
	(1.9), svn-design.texi (1.8, before-lifeboat-checkin):

	Added pdf to Makefile, removed DB layer from architecture diagram,
	and fixed    order of pages in top level.  

2000-06-01 15:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.10):

	formatting fix 

2000-06-01 15:22   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/svn-design.texi (1.7):

	Re-order: client, then protocol, then server.  

2000-06-01 13:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.9):

	progress 

2000-06-01 13:27   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.18):

	bugfixes 

2000-06-01 13:19   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.8):

	whiteboard dump 

2000-06-01 13:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.17):

	Rewrote all of database and filesystem sections.  

2000-05-31 23:23   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/subversion.jpg (1.2, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta,
	before-obolete-dir-removals):

	Match #f0f0f0 background color on graphic.  

2000-05-31 23:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* www/: index.html (1.8), subversion.jpg (1.1):

	Cheesy late-night gimp graphic. :) 

2000-05-31 12:46   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.16):

	mention props 

2000-05-31 12:38   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.15):

	Sticking with Jim's recursive definition.  

2000-05-31 12:11   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.14):

	Added restrictions to schema 

2000-05-31 11:06   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/server.texi (1.13):

	Mention that version zero exists.  

2000-05-31 10:59   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.8), server.texi (1.12):

	Filesystem section seems correct now.  Need to work out svn_main
	library to finish this.  

2000-05-31 10:56   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/server.texi (1.11):

	Add property lists to directories.  

2000-05-31 09:35   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/model.texi (1.4, before-lifeboat-checkin):

	fixed some typos.  

2000-05-30 22:46   Jim Blandy &lt;jimb@redhat.com&gt;

	* doc/model.texi (1.3):

	Fill in initial sketch of the model.  

2000-05-30 17:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.7):

	minor changes 

2000-05-30 16:52   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.10):

	server.texi fleshed out mostly, except for final high-level section.  

2000-05-30 11:07   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.9):

	Finished locking section 

2000-05-29 16:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.6):

	Started explaining client design.  

2000-05-26 16:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/Makefile (1.4):

	maybe now it will become visible 

2000-05-26 16:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/: Makefile (1.3), client.texi (1.5):

	cp html file to web area after making 

2000-05-26 16:28   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.4):

	testing new loginfo 

2000-05-26 15:41   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.8):

	saving work 

2000-05-26 15:35   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/Makefile (1.6, before-obolete-dir-removals):

	revert to 1.4 

2000-05-26 15:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/Makefile (1.5):

	Build doc in ../src/doc/ 

2000-05-26 15:30   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/client.texi (1.3):

	fix typo 

2000-05-26 15:28   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.7):

	Added locking section 

2000-05-26 15:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/: client.texi (1.2), future.texi (1.2,
	before-lifeboat-checkin), goals.texi (1.5), svn-design.texi (1.6),
	svn-doc.el (1.2, after-lifeboat-checkin, before-lifeboat-checkin):

	Rearranged some existing material.  Started client material.  Added
	node maker to elisp.  

2000-05-26 12:26   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.7), server.texi (1.6), svn-design.texi
	(1.5):

	saving work.  

2000-05-26 12:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/svn-doc.el (1.1):

	elisp helpers 

2000-05-26 11:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/Makefile (1.2):

	don't validate for info right now 

2000-05-25 14:18   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.6), server.texi (1.5):

	Saving work.  Finished DB interface section, working on Filesystem
	interface.  

2000-05-25 11:09   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.5), goals.texi (1.4), protocol.texi
	(1.2, before-lifeboat-checkin), server.texi (1.4):

	saving work.  

2000-05-24 15:29   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/server.texi (1.3):

	saving work 

2000-05-24 13:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/architecture.texi (1.4):

	Changed references 

2000-05-24 12:44   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/svn-design.texi (1.4):

	Remove redundant word "version".  

2000-05-24 11:56   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.3), svn-design.texi (1.3):

	Finished architecture section for now.  

2000-05-23 17:49   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/goals.texi (1.3):

	tweak to compile right 

2000-05-23 17:36   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: architecture.texi (1.2), server.texi (1.2):

	Redid architecture diagram in ascii (instead of dia), mostly
	finished chapter.  

2000-05-23 14:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/.cvsignore (1.1, after-lifeboat-checkin,
	before-lifeboat-checkin):

	ignore the ignorable 

2000-05-23 13:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/svn-design.texi (1.2):

	Note division of labor.  

2000-05-23 13:45   Karl Fogel &lt;kfogel@collab.net&gt;

	* doc/: goals.texi (1.2), model.texi (1.2):

	Moved detailed merging discussion to model.texi, refer to improved 
	merging behavior briefly in goals though.  

2000-05-23 13:21   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* doc/: Makefile (1.1), README (1.1, after-lifeboat-checkin,
	before-lifeboat-checkin), architecture.texi (1.1), client.texi
	(1.1), future.texi (1.1), goals.texi (1.1), license.texi (1.1,
	after-lifeboat-checkin, before-lifeboat-checkin), model.texi (1.1),
	protocol.texi (1.1), server.texi (1.1), svn-design.texi (1.1):

	Started design docs.  

2000-05-22 11:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/subversion.txt (1.51, before-obolete-dir-removals):

	note obsolescence 

2000-04-30 19:30  jrobbins

	* www/project_docs.html (1.6):

	Changed link to subversion.html.  I see the intent here was to go to
	the notes directory, however the www module is actually the document
	root for virtual host subversion.tigris.org, and relative paths that
	use ".." to go above the "www" directory are not allowed.  

2000-04-30 10:24   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/meta-implementation.txt (1.1, before-obolete-dir-removals):

	Added some notes on tools 

2000-04-24 20:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/subversion.txt (1.50):

	Adjust explanations to handle multiple-parents.  

2000-04-24 18:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/subversion.txt (1.49):

	Expand on race-condition avoidance in locks; explain change caching 
	better.  

2000-04-23 13:33   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/subversion.txt (1.48):

	start discussions of lock priority and change caching 

2000-04-21 18:49  jrobbins

	* notes/: Makefile (1.4), subversion.txt (1.47):

	this time it should publish subversion.html to the web 

2000-04-21 18:46  jrobbins

	* notes/subversion.txt (1.46):

	one more time 

2000-04-21 18:44  jrobbins

	* notes/subversion.txt (1.45):

	ok, lets try that again 

2000-04-21 18:42  jrobbins

	* notes/subversion.txt (1.44):

	triavial change to force web publishing and automated 'make' 

2000-04-19 08:22   Ben Collins-Sussman &lt;sussman@collab.net&gt;

	* notes/: diagram1.dia (1.1), diagram1.eps (1.1) (utags:
	before-obolete-dir-removals):

	Added beautiful postscript diagram from the spec.  See my email
	about this.  

2000-04-19 01:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/subversion.txt (1.43):

	Tightening up, plus touch on a few new topics people have mentioned.  

2000-04-19 01:08   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: outline2html.pl (1.9, before-obolete-dir-removals),
	subversion.txt (1.42):

	Removed the Jason-comments section, now that everything in it has
	been addressed somewhere in the document.  
	
	Note about cryptographic signing of changes in wish-list section.  
	
	Change occurrences of "inv" to "svn".  
	
	Clarifications and consistentizations.  
	
	Make outline2html turn URLs into real links.  

2000-04-19 00:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/index.html (1.7):

	Fix typo.  

2000-04-18 23:53   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/subversion.txt (1.41):

	hand-bumping version number to where it was for inversion.txt 

2000-04-18 23:51   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/Makefile (1.3), notes/README (1.6,
	before-obolete-dir-removals), notes/inversion.txt (1.42),
	notes/subversion.txt (1.1), www/cvs_help.html (1.3), www/index.html
	(1.6), www/project_admin.html (1.5, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1, milestone-1-beta,
	before-obolete-dir-removals), www/project_bugs.html (1.3,
	milestone-1, milestone-1-beta, before-obolete-dir-removals),
	www/project_docs.html (1.5), www/project_mail.html (1.5,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1,
	milestone-1-beta, before-obolete-dir-removals):

	Replace "inversion" with "subversion" and "ivn" with "svn"
	everywhere.  

2000-04-18 20:05  jrobbins

	* www/: cvs_help.html (1.2), project_admin.html (1.4),
	project_bugs.html (1.2), project_docs.html (1.4), project_mail.html
	(1.4), project_members.html (1.3, before-obolete-dir-removals),
	project_source.html (1.2, before-obolete-dir-removals):

	changed project name 

2000-04-16 15:11  jrobbins

	* www/project_mail.html (1.3):

	documented members-only posting rule 

2000-04-07 11:56   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.41), www/index.html (1.5):

	Discuss multisite vs local repository issues.  Discuss working copy
	administrative areas.  Describe file resurrection algorithm and the
	subtleties therein.  
	
	Front page: more descriptive feature list; update status.  

2000-04-05 14:31   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: Makefile (1.2), inversion.txt (1.40):

	Just run `make' from the top level now to generate an up-to-date
	spec in HTML format.  
	
	Use the term "clone" not "copy" in the draft; less confusing, tastes 
	great, four out of five dentists recommend.  

2000-04-05 14:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/: index.html (1.4), project_admin.html (1.3),
	project_docs.html (1.3):

	Content for public consumption.  

2000-04-03 14:27   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.39):

	Tweak again.  

2000-04-03 14:25   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.38):

	Tweak log message behavior spec.  

2000-04-03 14:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/README (1.5):

	Briefer and to the pointer.  

2000-04-03 14:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.37):

	Clarifications.  

2000-04-03 03:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.36):

	Utterly meaningless tweak.  
	
	Time to go to bed...  

2000-04-03 03:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.35):

	Explain shallow and deep copies, and why we need to support them.  

2000-04-03 02:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.34):

	Explain branching, line-of-ancestry copying, and cross-project 
	references (still in progress).  
	
	More explanation of the text vs binary issue and how we handle it.  
	
	Clarification and proposals for UTF-* handling.  
	
	Clarification of conflict-resolution plans.  
	
	Various and sundreye tweaks.  

2000-04-03 01:20   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/outline2html.pl (1.8):

	Handle C comments and running-text asterisks distinctly.  

2000-04-02 19:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.33):

	Describe keyword substitution and line-end conversion strategies.  
	
	Mark with XXXXXXX's where Ben and I will work tonight.  

2000-04-01 21:53  jrobbins

	* www/: project_members.html (1.2), project_mail.html (1.2),
	project_docs.html (1.2), project_admin.html (1.2):

	removed " at " anti-spam measure for subscribe and unsubscribe 
	removed "post" mailto links rather than explain or protect them 

2000-03-31 19:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.32):

	Tweak explanation of "negative locks".  

2000-03-31 19:34   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.31):

	Describe the need for unique identifiers.  

2000-03-28 19:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.30):

	Remove parent pointers from node structure -- we now know that they 
	are not necessary.  

2000-03-28 18:59   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.29):

	Clarify and expand on locking, note minor variation of scheme.  File
	removal.  

2000-03-27 23:36   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.28):

	Okay, locking formalized.  

2000-03-27 23:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.27):

	Yet another probably bad presentation of locking.  I know how to 
	present it now, though -- the next commit is really it.  

2000-03-27 22:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.26):

	Describe locking sequence (whew, I suspect Jim will have some
	comments to make on this!).  
	
	Not yet integrated into node creation plan; that's the next checkin.  

2000-03-26 13:16  jrobbins

	* www/: project_footer.html (1.1, milestone-2,
	post-edit-baton-removal, pre-edit-baton-removal, milestone-1),
	project_header.html (1.1, milestone-2, post-edit-baton-removal,
	pre-edit-baton-removal, milestone-1), project_nav.html (1.1)
	(utags: before-obolete-dir-removals, milestone-1-beta):

	added project header and footer files and updated project nav to use
	css rollovers 

2000-03-25 13:12   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.25):

	Sketch out the `node' data structure formally.  

2000-03-25 01:21   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.24):

	Tweak.  

2000-03-25 01:16   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.23):

	Clarification in locking discussion.  

2000-03-25 01:11   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.22):

	Discuss crash-proof repository mutation, and how it relates to 
	locking.  

2000-03-25 00:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.21):

	Fix grammaro.  

2000-03-25 00:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.20):

	Tersificate.  

2000-03-24 23:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.19):

	Trivial tweaks.  

2000-03-24 23:50   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.18):

	Describe how meta-data is stored.  
	
	Describe branching principles.  
	
	Miscellaneous tweaks and clarifications.  

2000-03-24 17:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.17):

	Add caveat about Jason's comments being partially out of date yet;
	but leave all the comments there, as some probably still apply.  

2000-03-24 17:05   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.16):

	Clarify time-flow in diagrams.  

2000-03-24 17:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.15):

	Fix up a few things.  
	
	Credit Jim for the basic design.  
	
	Note about how branches work.  

2000-03-24 16:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.14):

	Discuss what happens when new files or directories are created.  

2000-03-24 15:48   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: inversion.txt (1.13), outline2html.pl (1.7):

	Writing up results of the discussion Ben and I had at Golden Nugget 
	last night.  New design, incorporates Jim's "bubble-up" property,
	but with the cross-link optimization to prevent unnecessary
	duplication of nodes.  
	
	SQL tables and related material temporarily removed, as it does not 
	yet reflect these changes.  
	
	Made outline2html.pl able to deal with ASCII diagrams.  

2000-03-23 18:39   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.12):

	small tweaks, going to talk with Ben now 

2000-03-23 12:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.11):

	Grammaro.  

2000-03-23 12:38   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.10):

	Oops, fix starro.  

2000-03-23 12:37   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.9):

	Started adding scenarios.  

2000-03-22 18:54   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.8):

	Correct/expand I18N section (I mean I2N, I mean I1N...) 

2000-03-08 14:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/outline2html.pl (1.6):

	Only translate line of hyphens to &lt;hr&gt; if not yet seen first
	heading.  

2000-03-07 15:43   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.7):

	Word the part about commit locking better.  

2000-03-07 15:04   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/outline2html.pl (1.5):

	Handle preamble text correctly.  
	
	I just can't quit, stop me before I code again...  

2000-03-07 13:17   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/outline2html.pl (1.4):

	Removed note about not being a general purpose converter.  It is,
	now.  
	
	Correct handling of stdin-&gt;stdout case.  

2000-03-07 13:15   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/outline2html.pl (1.3):

	Add extension note.  

2000-03-07 13:13   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/outline2html.pl (1.2):

	Handle italicization right.  
	
	(Heh, I know this isn't our highest priority, but I've wanted such a 
	script for so long that these tweaks are worth it -- we only have to 
	do it once, anyway).  

2000-03-07 13:03   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: Makefile (1.1), README (1.4), outline2html.pl (1.1):

	outline2html replaces htmlize.pl as a more generalized
	outline-to-HTML converter.  Handle all indented text in &lt;pre&gt;&lt;/pre&gt;
	tags, so the tables get correctly formatted without any dependency
	on heading level.  
	
	Use "make html" to convert inversion.txt to inversion.html; document 
	this in README.  

2000-03-06 14:54  jrobbins

	* www/index.html (1.3):

	trivial change to test logaccum modification 

2000-03-06 01:57   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.6):

	tweak 

2000-03-06 01:55   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.5):

	responses to Jason 

2000-03-06 00:52   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/README (1.3):

	note usage of htmlize.pl 

2000-03-06 00:47   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.4):

	automatic htmlification of inversion.txt 

2000-03-03 00:09   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: README (1.2), inversion.txt (1.3):

	Added Jason's comments (no responses yet, just dumped them in for 
	now).  

2000-03-03 00:02   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/inversion.txt (1.2):

	recast to plaintext (outline) format 

2000-03-03 00:01   Karl Fogel &lt;kfogel@collab.net&gt;

	* notes/: README (1.1), inversion.txt (1.1):

	Some notes (see the README).  
	
	I'm commiting `inversion.txt' as HTML first, but in a moment I'll 
	commit its second revision in text (outline) format, for easier 
	editing.  The content will be the same, just text instead of html.  

2000-03-02 22:58   Karl Fogel &lt;kfogel@collab.net&gt;

	* www/index.html (1.2):

	Fix a few typos (hey, maybe it's not the most constructive thing I 
	could do right now, but it had to get done eventually).  

2000-03-01 03:34  jrobbins

	* www/: cvs_help.html (1.1), index.html (1.1), project_admin.html
	(1.1), project_bugs.html (1.1), project_docs.html (1.1),
	project_mail.html (1.1), project_members.html (1.1),
	project_source.html (1.1):

	initial checkin 
</pre>

<p>

</td>
</tr>
</TABLE>
<BR>
