Commits

Author Commit Message Labels Comments Date
Patrick Mézard
test_fetch_mappings: reduce copy/paste
Patrick Mézard
test_rebuildmeta: fix src/dest typo
Patrick Mézard
stupid: do not close branch upon branch-wide revert Reverting a branch with a remove followed by a copy results in a branch replacement. By default, branch replacements are handled by closing the replaced branch and committing the new branch on top of it. But we do not really want that when reverting a branch, we only want a linear history with a changeset capturing the revert.
Patrick Mézard
editor: add a small changectx cache Reverts including a lot of files create many actions like: R bar (from trunk/bar:4343) For each of these files, an open_file() call is made and the parent mercurial revision is loaded to detect copies in issamefile(). This results in a big slowdown, easily reduced by caching the changectx.
Patrick Mézard
editor: relax copyfrom dir checks to avoid extra missing entries When renaming a branch you get something like: D /branch/bar A /branch/foo (from /branch/foo:42) Unfortunately, the branch layout for the revision being converted is computed before starting to convert it. It means the copyfrom path supplied in the add_directory() for /branch/foo will be be considered invalid, be added to missing and fetched the slow way despite being in the repository histo…
Patrick Mézard
editor: add addmissing() and test config to make it fail Missing files should be the exception not the norm. Right now, a lot of these are caused by incorrect handling of branch updates. The hgsubversion.failonmissing configuration entry will help chase them.
Patrick Mézard
editor: use SimpleStringIO in apply_text() The design is a little ugly as the data stored in _openfiles will be a string or a SimpleStringIO depending on the file having been edited or not but this is a simple way to avoid allocating large blocks of data. This is also a bet the output stream passed to apply_text() is only being written and never seeked or read.
Patrick Mézard
editor: do not reread all data upon branching Branch creation is a special case of add_directory(). Until now, it was handled by enumerating branch parent files and creating svncopy records which were later converted into open files or pushed into the RevisionData. By default, there is no reason to record anything, the files are the same than in the parent changeset. The tricky part is to correctly check the source is the parent revision. Thi…
Patrick Mézard
push: reset encoding before the final update Before a9f315eae67c, all the rebase sequence including the update was executed with the encoding reset to the native one. After the change, the final update was left out and ran with UTF-8, which fails for some badly shaped repository. Reset the correct encoding context.
Patrick Mézard
editor: add a pop() method to RevisionMeta to reduce resource usage The commit pass only has to read files once, removing the related data after the read helps not keeping large temporary files around after they have been stored
Patrick Mézard
pull: add hgsubversion.filestoresize to control memory consumption The configuration entry defines the size of the replay or stupid edited file store, that is the maximum amount of edited files data in megabytes which can be kept in memory before falling back to storing it in a temporary directory. Default to 200 (megabytes), use -1 to disable.
Patrick Mézard
editor: move RevisionData on the filesystem over a given threshold The implementation is similar to the one in mercurial.patch except the mode and copy information are currently kept outside. It minimizes changes to RevisionData and helps with files which properties are modified but not their contents, which filestore was not designed to handle. Besides, CopiedFile pushed from the editor may later be handled separately to resolve them at commit time, in which cas…
Patrick Mézard
editor: do not touch RevisionData copies from the editor Copy source can be passed when adding the file to the revision data.
Patrick Mézard
editor: handle deleted files in editor Handling deleted files in the editor let us decouple the temporary state from the final one stored in RevisionData.
Patrick Mézard
editor: resolve files copied by directory copy on-demand Before this change, the data of files brought by directory copies was resolved immediately and stored for the duration of the run. Now, only references are stored and are resolved either when opening the files or when closing the editor. It means RevisionData file data is only set once per file and only when the file has been handled. The next step is to turn RevisionData into a data store backed…
Patrick Mézard
editor: add close_file(), enforce file batons semantics Supporting close_file() is a big step toward reducing memory consumption as now know which files are still to be edited and which are done already.
Patrick Mézard
editor: start separating svn copies from open files The separation is not complete as we still have to update the RevisionData deleted set when registering svn copies. This will be cleaned up once open files are themselves separated from RevisionData. Copied symlinks are also being prefixed with 'link '.
Patrick Mézard
editor: implement file batons The concept of current.file is incorrect, svn_delta.h documents open file lifetime as: * 5. When the producer calls @c open_file or @c add_file, either: * * (a) The producer must follow with any changes to the file * (@c change_file_prop and/or @c apply_textdelta, as applicable), * followed by a @c close_file call, before issuing any other file * or directory calls, or * * …
Patrick Mézard
subvertpy_wrapper: move methods in the relevant editors Files and directories can only be opened/deleted/closed from a DirectoryEditor, and deltas can only be applied on a FileEditor. Invariants could be made stronger by adding a third RevisionEditor class containing set_target_revision() and open_root() but this will probably not give interesting results.
Patrick Mézard
subvertpy_wrapper: fix files and directories batons handling The subvertpy wrapper was not recording and passing back the batons returned by calls such as open_file() or open_directory(). Instead, it was relying on knowledge about the HgEditor class and was passing the path argument. Its behaviour was therefore not exactly the same as the swig one because HgEditor sometimes tests the input baton and skips None ones, usually generated for ignored entries. A…
Patrick Mézard
editor: remove unused 'base' attribute from RevisionData
David Schleimer
push: use native rebase instead of our rebase wrapper Our rebase wrapper doesn't quite do the right thing with repect to a just-pushed revision. In particular, it will try to rebase the just-pushed revision on top of the version of that revision we just pulled down from svn. This will sometimes result in a local revision with an identical commit message as the revision from svn, but no file changes. This changes the rebase portion of the push comm…
Tim Delaney
stupid: Fail over to full revision when a PatchError is thrown (issue294) Also give an enhanced exception message when an AssertionError is thrown out of subvertpy. Can't test this as throwing an exception from the appropriate place leaves file handles open in the SVN repository, resulting in a failure to clean up in tearDown().
Arne Babenhauserheide
closed now obsolete fix.
Patrick Mézard
svnwrap: use custom StringIO class in get_file() The wrappers were calling ra.get_file() with a cStringIO object. Empirically, svn 1.7.5 is writing 16kB blocks to the stream object, and cStringIO reallocates its internal buffer and doubles its size whenever it is filled. With large committed files this requires two large memory blocks at the same time. SimpleStringIO implements the mimimum StringIO interface used by ra.get_file() but instead st…
Patrick Mézard
Fix more peer breakage with old hg versions
Patrick Mézard
pushmod: keep the root svn dir when emptying the hg repo (issue359)
Patrick Mézard
wrappers: do not change encoding when pushing This causes problems on platforms where the encoding is actually different, if the manifest contains a path which no longer matches the checkout, a following bailifchanged() actually fails. This happens on Windows with a repository containing UTF-8 encoded filenames checked out on a cp1252 environment.
Patrick Mézard
wrappers: ensure all pull() code path reset the encoding This patch only extends an existing try/finally block upward, and make sure the progress bar is reset only if the relevant variables are available.
Patrick Mézard
wrappers: properly reset encoding when leaving push() This patch just wraps the function body into a try/finally, everything else is indentation and long lines folding changes.
  1. Prev
  2. Next