Henner Zeller <hzeller@google.com>

r23350, r23346, r23342, r23340

r23350 | lundblad | 2007-02-05 05:31:48 -0600 (Mon, 05 Feb 2007)

Avoid renaming a file twice when installing working files.
Especially on remote filesystems, rename can be a very expensive operation.

Suggested by: Henner Zeller <hzeller@google.com>

* subversion/libsvn_wc/log.c
  (file_xfer_under_path): When translating a file to expanded form, don't
  go via a temporary file, since svn_subst_copy_and_translate3 already
  guarantees atomicity.

r23346 | lundblad | 2007-02-05 02:19:44 -0600 (Mon, 05 Feb 2007)

Remove unnecessary file removes when installing properties.

Suggested by: Henner Zeller <hzeller@google.com>

* subversion/libsvn_wc/props.c
  (svn_wc__install_props): Only remove the props files they weren't there
  before according to the entry of the path.

r23342 | lundblad | 2007-02-04 14:09:32 -0600 (Sun, 04 Feb 2007)

For checkout/update etc., avoid creating one working copy 'log' file per
versioned file by accumulating log entries in memory, flushing it
when closing the directory and before going into subdirectories.

For large working copies, this saves a lot of creation/reading/removing small
files, which turns out to be rather expensive, especially on remote

Suggested by: Henner Zeller <hzeller@google.com>

* subversion/libsvn_wc/update_editor.c
  (struct dir_baton): Add log_accum field.
  (make_dir_baton): Initialize the log_accum field.
  (flush_log): New function.
  (cleanup_dir_baton): Flush the current log before running logs.
  (open_directory, add_directory): Flush parent directory's log before
  opening the new directory.
  (close_directory): Write to the accumulated log of the dir baton instead
  of a local strinbuf.  Flush the accumulated log before running the logs.
  (close_file): Write to the accumulated log of the parent directory instead
  of creating our own log file.

r23340 | lundblad | 2007-02-04 05:31:06 -0600 (Sun, 04 Feb 2007)

When copying files, avoid an extra close/open pair of the temporary file.
This actually makes a difference when working with remote file systems.

Suggested by: Henner Zeller <hzeller@google.com>

* subversion/libsvn_subr/io.c
  (copy_contents): New function, mostly extracted from the old
  copy_file and enabled for all platforms.
  (svn_io_copy_file): Use the new copy_content on all platforms.
  Move opening the files and error clean-up here.