********************************************************************************
*                            Subversive Change Log                             *
*                                                                              *
* Subversive - a brand new Eclipse Client for Subversion (SVN)                 *
* See details at http://www.eclipse.org/subversive                             *
********************************************************************************

Now the Subversive project was moved to Eclipse.org and new version numbers was introduced. 
Change Log's for older versions still present in this file.

Version 4.0.1.I20160719-1700 [19 July 2016]

Fixes:
 * Accessing SVN Info page leads to error message (bug 497364)
   + special thanks for the contribution to Gan Ming
 * Excessive synchronization in SVNUtility class (bug 498026)
 * SVNMergeHelper does not restore a proper ISVNConnector's state [ID-LHNBB] (bug 497687)
 * Performance overhead in SVNLightweightDecorator (bug 497139)
 * SVNLightweightDecorator.isMappedToSVN could fail to recognize if project is connected to SVN (bug 497138)
 * "ResourceException: Resource 'xyz' is not open" error in decorator (bug 497061)
   + special thanks for the contribution to Andrey Loskutov
 * Possible NPE in compare (bug 495959)
   + special thanks for the contribution to Florent Angebault
 
--------------------------------------------------------------------------------

Version 4.0.0.I20160604-1700 [04 June 2016]

Fixes:
 * Resource label is not refreshed in compare panel (bug 493253)
   + special thanks to Florent Angebault
 * Reusing compare editor does not refresh changes (bug 495202)
   + special thanks to Florent Angebault
 * Not enough debug info when the project is disconnected (bug 495460)
 * Compare with latest from repository: no changes found when comparing a modified file (bug 495155)
   + special thanks to Herbert Linseisen
 * Exception: Resource 'xxx' does not exist [ID-NN7GD] (bug 494976)
 
--------------------------------------------------------------------------------

Version 4.0.0.I20160427-1700 [27 April 2016]

Fixes:
 * Incoming addition and deletion statuses are reversed in compare with URL/Revision/Branch/Tag when 1.8 compatible connector is used (bug 492536)
 * Wrong change direction in compare with URL/Revision/Branch/Tag with 1.8 compatible connectors (bug 492535)
 * New files and folders aren't displayed in compare with URL/Revision/Branch/Tag when 1.8 compatible connector is used (bug 492534)
 * Handle peg revision in mergeTwo, diffTwo and diffStatusTwo (bug 492399)
 * LocateResourceURLInHistoryOperation should use the same code as the one that is used by connectors (bug 492402)
 * Remove deprecated code related to peg revisions handling (bug 492400)
 
--------------------------------------------------------------------------------

Version 4.0.0.I20160408-1700 [08 April 2016]

Fixes:
 * ID-SD9I4 Unable To commit - SVN: '0x0040011a: Call Menu Action' operation finished with error: Argument cannot be null (bug 491153)
 * Deleted files aren't shown in Synchronize view (bug 491078)
 
--------------------------------------------------------------------------------

Version 4.0.0.I20160314-1700 [14 March 2016]

Features:
 * Set SVN Kit 1.8 as default(initial) connector (bug 489643)
 * Refactor IOptionProvider so that adding another option does not bring an interface change next time (bug 489644)
 * Add a setting, that allows to commit derived resources (bug 480041)
 * Need an extension point to provide comment templates programmatically (bug 419093)

Fixes:
 * SVNRemoteStorage: resource change listener jobs cause OOM (bug 489143)
   + special thanks to Andrey Loskutov
 * Ignored files shown as outgoing additions (bug 392750)
 * Extensive SVN update checks for generated code (bug 489649)
   + special thanks to Andrey Loskutov
 * Refactor copy/pasted queue code in SVNRemoteStorage (bug 489664)
 
--------------------------------------------------------------------------------

Version 4.0.0.I20160226-1700 [26 February 2016]

Features:
 * SVN Kit 1.8.12: support for Subversion 1.9 new FSFS repository format. (bug 487147)
 * Parse certificate message passed as parameter by SVN 1.8 and earlier clients in order to provide support for SVN 1.9 API (bug 487220)
 * "Trust SSL server certificate" dialog should distinguish error codes provided by SVN 1.9 API (bug 488453)
 * Introduce SVN 1.9 API support (bug 485022)
 * Enable SVN 1.9 features in SVN 1.9 based connector (bug 488472)
 * Ensure there is no compatibility issues between plug-in versions with different SVN API supported (bug 488653)
 * Refactor and remove deprecated merge API calls (bug 488677)

Fixes:
 * Move 'Create Patch' action in pop-up menu next to 'Apply Patch' (bug 486907)
 * No content for remote variant of deleted file in Synchronize View (bug 488683)
 
--------------------------------------------------------------------------------

Version 3.0.4.I20160131-1700 [31 January 2016]

Features:
 * Make 'Project Structure' preferences page more compact (bug 486862)
 * SVN Plugin does not provide option to set default checkout directory (bug 486009)

Fixes:
 * Typo in "Getting Started" documentation (bug 485185)
 * Information in "Trust server certificate" dialog is hard to read (bug 485344)
 * "Compare with" dialogs exit with "A path under version control is needed for this operation" error message (bug 485622)
 * An exception occurs while moving a resource into a package whose SVN text status is set to "Deleted" (bug 486496)
 * "Inappropriate resource state" exception while adding replaced but not yet added folder to source control (bug 486835)
 
--------------------------------------------------------------------------------

Version 3.0.3.I20151228-1700 [28 December 2015]

Fixes:
 * Compare with another branch shows files with no difference [SVN 1.7 or older] (bug 326694)
 * Weird behavior of the "Compare with branch" feature (bug 484929)
	+ special thanks to Florent Angebault
 * Deadlock is possible within RelocatedProjectHelper (bug 483402)
 * Prompt that asks what to do after project relocation shown in a loop forever (bug 482565)
 * IConnectedProjectInformation is an unneeded interface (bug 483232)
 * Remove unused code in the InaccessibleLocationDataHelper class (bug 483231)
 * FindRelatedProjectsOperation should not activate project initialization (bug 483230)
 * Remove outdated project-to-location management code (bug 483229)
 * NPE in CreatePatchWizard [ID-AW5HY] (bug 481725)
 * Unhandled event loop exception org.eclipse.team.svn.ui.panel.local.EditTreeConflictsHelper.getSrcUrl (bug 480521)
 
--------------------------------------------------------------------------------

Version 3.0.2.I20151028-1700 [28 October 2015]

Features:
 * Provide interface to use SVN 1.8 diff output options (bug 476177)

Fixes:
 * NPE in CompareWithLatestRevisionAction [ID-D9JJ1] (bug 480129)
 * Attempted to beginRule: P/xxxx, does not match outer scope rule in SVNRemoteStorage [ID-HTT9T] (bug 325407)
 * NPE in SVNRepositoryLocation.asRepositoryContainer [ID-W6HFD] (bug 477111)
 * Grammatical error (bug 476637)
 * Unversioned deleted files may reappear in patch dialog if called from Synchronize View (bug 476171)
 
--------------------------------------------------------------------------------

Version 3.0.1.I20150722-1700 [22 July 2015]

Fixes:
 * StringIndexOutOfBoundsException in bugtraq in History View (bug 471473)
 * Reduce I/O amount produced by FileReplaceListener (bug 473193)
 * Limit SVN status cache refresh depth when possible (bug 473161)
 * Excessive SVN status reloads for updates, revert, commits etc. (bug 473029)
 * Improve status cache performance (bug 473028)
 * Status refresh for files does unnecessary work that significantly reduces performance on large projects (bug 473026)
 * cant't save file or build waiting for user operation (bug 472752)
 * Possible resource leak in UI (bug 471963)
 * If the folder is unversioned, Subversive tries to load it more than once (bug 471205)
 * Symbolic links and external resources interfere with each other in UI (bug 471204)
 * There should be a way to add to SVN the intermediate folders produced by svn:externals (bug 471188)
 * Obstructed externals (bug 465574)
 * Diff viewer preference page has wrong button sizes in Mars (bug 471161)
 * Subversive Label Decorations Preferences dialog broken (bug 470990)
 * Enable team context menu actions on working set (bug 470552)
 
--------------------------------------------------------------------------------

Version 3.0.0.I20150529-1700 [29 May 2015]

Features:
 * "set keywords" grayed out for folders (no recursion allowed) (bug 467303)
 
Fixes:
 * Improve RefreshResourcesOperation performance (bug 465920)
 * NullPointerException on SVN history view (JFace plugin) (bug 466983)
 * ArrayIndexOutOfBoundsException in UpdateSubscriber [ID-OJ8UD] (bug 467720)
 * NumberFormatException while performing "Synchronize with repository" [ID-FE6ZC] (bug 465812)
 * File content comparison editor shouldn't be opened for conflicted folders [ID-HJ1S2] (bug 468639)
 
--------------------------------------------------------------------------------

Version 3.0.0.I20150317-1700 [17 March 2015]

Features:
 * Refactor SVN API support [use strict types for constant enumerations, improve error codes etc.] (bug 462326)
 * Update plug-ins API compatibility version (bug 462338)
 * Update integrations according to API changes (bug 462327)
 
Fixes:
 * Useless SVNProperty conversion in AddToSVNWithPropertiesOperation (bug 461199)
 * Problems using blank spaces for a folder. (bug 459010)
 
--------------------------------------------------------------------------------

Version 2.0.4.I20150123-1700 [23 January 2015]

Features:
 * Add typical SVN errors description and possible solutions to help pages (bug 457516)
 
Fixes:
 * Can't install Subversive SVN Integration for the M2E Project v2.0.3 (bug 457869)
 * NPE at CopyRemoteResourcesToWcOperation [ID-QI8GK] (bug 457835)
 * JRE 1.6 incompatibility [ID-HK8DF] (bug 456334)
 * Automatic properties do not get applied to new files (bug 456640)
 
--------------------------------------------------------------------------------

Version 2.0.3.I20141224-1700 [24 December 2014]

Features:
 * Improve status caching with SVN 1.7/1.8 connectors (bug 449932)
 * Double click on folders in Compare Editor should expand/collapse them (bug 449598)
 * There is no way to specify a multi-line property in automatic properties configuration (bug 445999)
 * Unable to install Subversive via Eclipse Marketplace [add "Get Connectors" button into preferences] (bug 442249)
 * Move Subversive m2e integration plugin to eclipse.org (bug 455407)
 
Fixes:
 * There is a secure storage's password prompt when editing repo props even if the "save password" option is not set (bug 453465)
 * [KeyBindings] SVN Sync and Commit keybindings no longer work (bug 309074)
 * Subversive / Maven shortcuts conflict (bug 439499)
 * [KeyBindings] SVN Sync and Commit keybindings no longer work (bug 309074)
 * Symlinks treated incorrectly (bug 213197)
 * Mistake in SVNEntryStatus documentation (bug 452715)
 * Team->Add to SVN action's enablement is wrong for externally linked resources (bug 452714)
 * Team->Show History action's enablement is wrong for unversioned resources (bug 452710)
 * No content for conflicting additions in 3-way compare editor (bug 449601)
 * Compare editor shouldn't try fetching content of folders as it does for files (bug 449597)
 * Compare with: Importing new file problem (bug 423308)
 * FileReplaceListener does not work in Luna (bug 449550)
 * AddToSVNOperation.removeFromParentIgnore() breaks the "add to SVN" functionality [ID-OBDOR] (bug 446184)
 * NPE if WorkspaceRoot is passed into FileUtility.getResourcePath() [ID-S7NIJ] (bug 445453)
 * Automatic properties are processed wrongly when ; or = characters are used as value parts (bug 446000)
 * In automatic properties configuration dialog only first = should separate name and value (bug 445997)
 * In automatic properties configuration dialog ; character in a value part should not have a special meaning (bug 445998)
 * The automatic properties editor validation does not validate the name and the value properly (bug 446001)
 * Cleanup Subversive-M2E integration's code (bug 456134)
 * Cancel button is disabled on "Validate Repository Location" progress dialog (bug 455204)
 * Preserve compatibility with the previous keybindings scheme [Default] (bug 456139)
 
--------------------------------------------------------------------------------

Version 2.0.1.I20140907-1700 [07 September 2014]

Features:
 * Refactor Log should be written into console (bug 211245)
 * Update all SVN operations console output (bug 443135)
 * Add API to convert SVN command options into command-line counterparts (bug 443132)
 
Fixes:
 * There is an exception when unversioned resources selected for synchronizing [ID-OX0F5] (bug 426049)
 * opening a closed project with svnkit 1.3.8 working copy with JavaHL 1.7 connector freezes Eclipse (bug 440297)
 * bugtraq:url does not work with URL starting with / (bug 441393)
 * Create patch with workspace root produces wrong result (bug 437106)
 * Wrong enablement in Create Patch wizard for nested projects (bug 441039)
 * FileNotFoundException while trying to save an imported from repository and not existing locally file in "Compare with revision" editor [ID-WQB6L] (bug 438953)
 * When Project Explorer contains semanticfs then the error "SVN: '0x0040011a: Call Menu Action' operation finished with error: The resource is inaccessible" occurs on commit (bug 437623)
 
--------------------------------------------------------------------------------

Version 2.0.0.I20140609-1700 [09 June 2014]

Features:
 * Document SVN API calls (bug 417770)
 
Fixes:
 * Refreshing a folder shared with SVN should force Subversive to refresh its state, even if the .svn folder is outside that folder (bug 435601)
 * Update SVN Cache locks the work space (bug 436727)
 
--------------------------------------------------------------------------------

Version 2.0.0.I20140519-1700 [19 May 2014]

Fixes:
 * If performing changes via external program, Subversive does not show actual status (bug 430056)
 * Delete file from SVN not work always (bug 434944)
 * Java Refactoring + SVN: Selecting "Cancel" in resource locking dialog leads to empty error dialog (bug 433208)
 
--------------------------------------------------------------------------------

Version 2.0.0.I20140501-1700 [01 May 2014]

Features:
 * Add support for Eclipse-SourceReferences header (bug 315011)
   + special thanks to Michael Schaufelberger

Fixes:
 * Subversive crashes ID-PPJQ5 (bug 432930)
 * ArrayOutOfBoundsException in IgnoreMethodPanel [ID-MFS28] (bug 433287)
 * ResourceException in SaveProjectMetaOperation [ID-IE0RW] (bug 432177)
 * Subversive produces unnecessary SVN error log entries for eclipse projects. (bug 431237)
 * A virtual folder in project will cause "The resource is inaccessible" (bug 430349)
 
--------------------------------------------------------------------------------

Version 2.0.0.I20140309-1700 [09 March 2014]

Features:
 * Allow freeform in SVN:IGNORE (bug 427577)

Fixes:
 * Improve bug reporting code in SVNUtility.getWCRoot [ID-PH38V] (bug 428141)
 * NullPointerException in "Merge properties" (bug 428253)
 * NPE in EditTreeConflictsPanel [ID-LZRIO] (bug 425263)
 * Ignored files shown as outgoing additions (bug 392750)
 * There're unnecessary accesses to the file system while loading information on versioned resources (bug 427184)
 * There is an exception in Synchronize View when handling an obstructed resource of unexpected kind (dir instead of file) (bug 427183)
 * GetPropertiesOperation fails for deleted resource with SVN Kit 1.8.3 connector (bug 427093)
 * SVN 1.7 working copy format detection fails with SVN 1.8.3 connector (bug 427092)
 * Cannot commit package deletion (greyed out) (bug 426706)
 
--------------------------------------------------------------------------------

Version 2.0.0.I20131101-1700 [01 November 2013]

Features:
 * Update SVN operations framework in order to support SVN 1.8 API (bug 423701)
 * Provide access to SVN repository management API (bug 417769)
 * Introduce SVN 1.8 API support (bug 417768)
 * "Treat replacement as edit" should be true by default and should be represented in preferences (bug 419850)

Fixes:
 * Button position should comply Linux "convention": positive button on the right-most (bug 422826)
 * NPE in PropertyCompareInput [ID-KULS6] (bug 422623)
 * Connectors discovery fails with exceptions on MacOS X (bug 418768)
 * Synchronize view mistakingly treats workspace root as versioned resource [ID-NYQUI] (bug 417835)
 * FileNotFoundException in FileUtility.copyFile [ID-JJCVG] (bug 421251)
 * Deleting and replacing a resource is a SVN delete/add instead of a modify (bug 276018)
	+ special thanks to Forest Johnson
 * Undo Delete result in replaced content (bug 419368)
 * NPE when using "Create Patch" in history view (bug 419563)
 * Subversive doesn't allow to use IPv6 addresses as host names (bug 418301)
 
--------------------------------------------------------------------------------

Version 1.1.1.I20130816-1700 [16 August 2013]

Fixes:
 * JavaHL Win64 connector isn't shown by the discovery feature (bug 411957)
 * JavaHL Win32 connector is shown on Win64 platform by the discovery feature (bug 411958)
 * SVNUtility.getSVNInfo() isn't compatible with SVN 1.7 [ID-KOSUR] (bug 412253)
 * Copying should be cancelled without getting an error report when destination resource exists on disk but not in sync with workspace [ID-IDGZI] (bug 411480)
 * OperationCanceledException isn't handled properly (bug 412609)
 * "Create Patch" wizards show the UTF-8 encoding twice current platform uses UTF-8 by default (bug 414386)
 * "Create patch" wizard should include each resource into the patch file just once when nested projects are used (bug 414388)
 * Base revision's content is empty for a file deleted under the SVN 1.7.x client (bug 414400)
 * "unversioned" string in the ResourceVariant class is not internationalized (bug 414401)
 * Deleted file's revision is shown incorrectly with SVN 1.7.x client (bug 414406)
 * Include SVN Kit 1.7.10 version (bug 414897)
 
--------------------------------------------------------------------------------

Version 1.1.0.I20130527-1700 [27 May 2013]

Fixes:
 * ClassCastException in time of tag operation (bug 409021)
 * Repository location: "normalize URL" function does not handle file:/// protocol correctly (bug 409234)
 * Update switches subfolder back to trunk from branch (bug 406580)
 * "Apply incoming changes" on "deleted/deleted" generates an error (bug 407631)
 * When there's a tree conflict, "Edit conflicts" is also enabled and does nothing (bug 407633)
 
--------------------------------------------------------------------------------

Version 1.0.1.I20130507-1700 [07 May 2013]

Features:
 * Add "Header" keyword support for svn:keywords property (bug 404239)
 
Fixes:
 * Auto lock error with maven hierarchy [ID-X5CXN] (bug 374591)
 * Compare with base: edits not detected (bug 297717)
 * Subversive keeps to show incoming changes for files and directories after all incoming changes have been updated (bug 403043)
 * Sometime annotate fails for files in branches (bug 406726)
 * "Create Patch" creates patch in UTF-8 (without BOM) irrespective of the file encoding (Windows-1252) (bug 404713)
 * NPE in SVNRemoteStorage.asRepositoryResource [ID-BYM4U] (bug 404979)
 * NPE in BuiltInAnnotate [ID-IQ1WJ] (bug 404252)
 * Enablements of Compare and Replace Actions do not respect ResouceMappings (bug 403200)
 * Disconnect operation fails when project was unmapped from repository provider prior to disconnect operation [ID-LOU8E] (bug 403385)
 * NPE in LoggedOperation.setConsoleStream [ID-TM2AH] (bug 403644)
 * Move ActiveChangeSetManager accessor into the SVN Core plug-in (bug 403980)
 * Move startup extension into a separate plug-in (bug 403975)
 * Subversive shows empty post-commit warning window after every commit (bug 402491)
 
--------------------------------------------------------------------------------

Version 1.0.1.I20130301-1700 [01 March 2013]

Features:
 * Improvement: add extension point for declaring custom properties (bug 306806)
 * Set Property dialog should filter/set properties based on resource type (file or folder) (bug 401612)
 * Display post-commit error messages to the user (bug 354843)
 * Provide support for post-commit hook's messages (bug 400575)
 * Improve Team Annotate with useful default revision values (bug 296239)
 
Fixes:
 * After modifying properties in "Compare properties" editor, Synchronize View isn't refreshed (bug 401619)
 * NPE when synchronizing workspace (bug 401898)
 * Connector install dialog does not open when SVN project exists (bug 401596)
 * Use the PredefinedProperty class in order to define custom properties (bug 401047)
 * Move revision properties descriptions into the PredefinedPropertySet class (bug 401041)
 * Move validation regexp into the PredefinedProperty class (bug 401036)
 * Use standard internationalization code for a property descriptions (bug 401034)
 * Add post-commit hook's messages support for 'Mark as Merged' and 'Override and Commit' actions (bug 400583)
 * Improve annotation UI's performance and usability (bug 400558)
 
--------------------------------------------------------------------------------

Version 1.0.0.I20130122-1700 [22 January 2013]

Features:
 * Update JavaHL binaries to 1.7.8 (bug 398671)
 * Use SVN Kit 1.7.8 (bug 398669)
 
Fixes:
 * Spelling error in the method name SVNTeamUIPlugin.getModelC(h)angeSetManager (bug 398654)
 * Negative revision number exception when all the lines are skipped by SVN annotate [ID-I71M1] (bug 398565)
 * several texts are not externalized in preference (bug 398261)
 
--------------------------------------------------------------------------------

Version 1.0.0.I20121228-1700 [28 December 2012]

Features:
 * Allow to use "Core Configuration Options" extension point (bug 389933)
 * SVN Connectors failed to install in Eclipse 64 bit for RCP and RAP Developers [Win64 support]. (bug 376317)
 * Enable error logging for SVN lightweight decorator (bug 395971)
 * "Clear selection" in the commit dialog unchecks all the items, not only the selected ones (bug 370254)
 * Human/Numeric ordering option for branches e tags (bug 390467)
 
Fixes:
 * Being prompted too aggressively to install SVN connectors (bug 319292)
 * Charset failure when Applying Patch to a resource (bug 363289)
 * Got wrong contents for remote file in Subversive (bug 375633)
 * Text selection extremely slow in C++ editor (bug 350306)
 * JavaHL connector fails to commit svn:ignore property (bug 395063)
 * Some tree conflicts caused by merge won't be shown and won't allow user to commit merged changes (bug 395295)
 * Checkout of a java project from Subversion needs to mangled project name (bug 394761)
 
--------------------------------------------------------------------------------

Version 1.0.0.I20121109-1700 [09 November 2012]

Features:
 * Update JavaHL binaries to 1.7.7 (bug 393486)
 * Use SVN Kit 1.7.6 (bug 393484)
 
Fixes:
 * Format code on a source directory with some hundreds of files: takes ages [slowed down by SVN change sets] (bug 392979)
 * Default change set is not refreshed in the Synchronize View after it is changed (bug 393483)
 * Mylyn active change set shouldn't be removed automatically when all its changes were moved to another change set (bug 393481)
 * If Mylyn task is active but empty it does not reappear automatically after IDE restart in SVN change-sets (bug 393480)
 * Updating an operating system locked file corrupts the project repository (bug 392955)
 * ampersand in project name (bug 392049)
 * "Upgrade working copy" action is always disabled for SVN Kit 1.7.5 (bug 393431)
 * After latest update, icons in synchronize view sometimes not shown (bug 392884)
 
--------------------------------------------------------------------------------

Version 1.0.0.I20121013-1700 [13 October 2012]

Fixes:
 * Synchronize window showing add icon decoration instead of delete icon for outgoing change Eclipse 4.2 (bug 388445)
 * "Edit conflicts" does nothing with a merge conflict caused by properties (bug 390168)
 * Property change statuses are shown incorrectly when incoming/outgoing deletion is involved (bug 390171)
 * "Workbench has not been created yet" exception after "out of PermGen space" crash (bug 390177)
 * "Expand All" is in wrong toolbar group in the "Models" Synchronize View mode (bug 390181)
 * When working with SVN 1.7-compatible connectors deleted folders are handled improperly (bug 390851)
 * Moved folder's status is shown wrongly when models support is enabled (bug 390858)
 * On a repository that is accessed using the file protocol SVN Kit leads to an excessive password prompt (bug 390865)
 * Resource '...' does not exist exception in AbstractSVNSubscriber [ID-GZMNK] (bug 388899)
 * Shortcut for "Show Properties" overrides the sign "|" in Slovenian keyboard scheme [CTRL+ALT+W -> CTRL+ALT+T] (bug 390005)
 * Error when trying to modify a file with the property "svn:needs-lock" in the JSP editor (bug 377013)
 * Show a user friendly error message if the merge/update/switch caused an unresolved conflict over the .project file [ID-UOAA9] (bug 365867)
 * Wrong error message text spelling [when resources refresh fails] (bug 391575)

--------------------------------------------------------------------------------

Version 1.0.0.I20120818-1700 [18 August 2012]

Fixes:
 * Inaccurate preference names and documentation regarding "freeze svn:externals" feature (bug 387324)

--------------------------------------------------------------------------------

Version 1.0.0.I20120803-1700 [03 August 2012]

Fixes:
 * Edit conflict can not find -right.r file with the SVN 1.7-compatible connectors (bug 383183)
 * "Check Out As" shouldn't delete an empty project folder, since folder creation later may be impossible due to security restrictions (bug 321810)
 * [Subversive] - svn:externals syntax check too strict (bug 316114)
 * Branch/Tag/Copy dialogs should notify about possible ways of "/" character usage (bug 382311)
 * Refresh on location/root nodes in SVN Repositories View shows multiple credential dialogs (bug 385690)
 * Unchecked "Save password" repository location option shouldn't prevent user name from being saved (bug 385890)
 * Using svn+ssh:// repositories with private key authentication causes subversive to popup ssh login dialog two times for every repository operation. (bug 239871)
 * NPE in FreezeExternalsOperation [ID-IP4PU] (bug 385818)
 * NPEs in Override and Commit in models mode [ID-BOO7P] (bug 372098)
 * ClassCastException in time of branch/tag operation [ID-M43MD] (bug 385530)

--------------------------------------------------------------------------------

Version 1.0.0.I20120601-1700 [01 June 2012]

Features:
 * Graduation release

--------------------------------------------------------------------------------

Version 0.7.9.I20120520-1700 [20 May 2012]

Fixes:
 * Incorrect console color preferences handling (bug 376929)
 * NPE in SVNUtility when repository is unavailable [ID-S1M7B] (bug 377166)
 * Correct supported Eclipse Platform version restriction according to the used API (bug 377864)
 * "Resource '/.../.svn' does not exist" exception while checking for SVN meta-information [ID-BHMBD] (bug 378922)
 * NPE while sharing project using the SVN 1.7 connector [ID-FMF5P] (bug 379628)

--------------------------------------------------------------------------------

Version 0.7.9.I20120417-1700 [17 April 2012]

Features:
 * Create the SVNKit-based SVN 1.7 compatible connector (bug 374582)
 * Update JavaHL 1.7 connector to the 1.7.4 version

Fixes:
 * NPE in ScanLocksOperation.createLockFile [ID-OKCDI] (bug 375150)
 * "Document is closed" exception while writing to the console [ID-UODT8] (bug 374884)
 * Missing Text fields in Commit dialog (bug 375038)

--------------------------------------------------------------------------------

Version 0.7.9.I20120316-1700 [16 March 2012]

Features:
 * Add SVN 1.7 support (bug 365627)
 * Include JavaHL 1.7 connector into the early access/Juno simulatenous release builds (bug 372781)

Fixes:
 * NPE in EditTreeConflictsPanel due to wrong enablement (bug 373821)
 * Class SVNConsole shouldn't extend MessageConsole (bug 373049)
 * SVNConsole class shouldn't be initialized at plug-in startup (bug 370374)
 * [KeyBindings] SVN Sync and Commit keybindings no longer work (bug 309074)
 * Commit UI extension fails to set a commit message prior to opening the dialog (bug 372027)

--------------------------------------------------------------------------------

Version 0.7.9.I20120210-1700 [10 February 2012]

Features:
 * Rename "Commit Templates" preferences node to the "Comments and Input History" (bug 367026)
 * Smartcard Login on Windows (MSCAPI Support) (bug 351510)
   + special thanks for the contribution to Markus Oberlassnig (ilogs information logistics GmbH) 

Fixes:
 * org.eclipse.team.svn.ui.compare.ResourceCompareInput.ResourceElement fails to return an InputStream from getContents when compare is invoked against a folder (bug 363845)
 * If there were no SVN-related activities on the workspace startup, Subversive can't see that imported projects are linked to SVN (bug 336689)
 * Provide "Edit properties conflicts" to edit conflicts on properties (and mark as merged) (bug 364407)
 * "Edit Conflicts" action should cover both: property and content conflict cases (bug 370072)
 * "Mark As Merged" seemingly has no effect on projects with property conflicts (bug 370071)
 * Exception produced on Show Revision Graph for a source folder (bug 369217)
 * Move refactoring cause NPE (bug 368325)
 * Shift and Enter in the commit message window -annoyingly- always causes a commit (bug 366954)
 * Add "path history depth" setting (bug 367027)

--------------------------------------------------------------------------------

Version 0.7.9.I20111123-1700 [23 November 2011]

Fixes:
 * There are Eclipse 3.7-specific API usage due to misleading documentation (bug 364572)

--------------------------------------------------------------------------------

Version 0.7.9.I20111119-1700 [19 November 2011]

Features:
 * Add SVN 1.7 API support (bug 361257)
 * Replace with Revision fails to notice trivial changes on locked files (bug 353875)
   + special thanks to Neels Hofmeyr
 * New decoration mode for branches and tags [fullpath] (bug 359650)
 * UI commit extensions improvement (bug 356025)
   + special thanks to Jc Temp
 * Create patch to Workspace could default location to current project (bug 356042)
 * IRepositoryLocation state listener (bug 356024)
   + special thanks to Jc Temp, Eike Stepper
 * ISVNConnector calls interception API (bug 356023)
   + special thanks to Jc Temp, Eike Stepper, Adrian

Fixes:
 * Subversive doesn't refresh synchronize view after commit (bug 329555)
 * JavaHL: Commit across multiple project atomically does not work (bug 362182)
 * Collapse All and Expand All buttons are separated in Team Sync view (bug 230868)
 * "Subversive JDT ignore recommendations" plug-in deadlocks on Eclipse startup (bug 359199)
 * Problem with RevisionComposite_Reverse (bug 363635)
   + special thanks to Satoru Yoshida
 * Problem with MarkAsMergedAction.tooltip (bug 363634)
   + special thanks to Satoru Yoshida
 * SVN Compare does not allow new files to be copied (bug 362652)
 * NPE while obtaining IProxyData data for the specified host [ID-ELYHN] (bug 362983)
 * If there were no SVN-related activities on the workspace startup, Subversive can't see that imported projects are linked to SVN (bug 336689)
   + special thanks to Brice Laurencin, Kris De Volder
 * ClassCastException in ShowHistoryViewOperation [ID-L8NW8] (bug 362570)
 * Team-private members are marked at wrong time while importing the already shared project (bug 361831)
   + special thanks to Kris De Volder
 * There are no notification about the repository node absence while synchronizing workspace (bug 361829)
 * ReplaceWithRemoteOperation ignores cancellation event (bug 359652)
 * When updating depth "Recursively" should be the default option (bug 359651)
 * SVN: '0x00400113: Show Conflict Editor' operation finished with error: null (bug 358998)
 * FileNotFoundException in ReplaceWithLatestRevisionAction [ID-PASE4] (bug 323684)
 * Unable to compare files from different branches (bug 356870)
 * False warning about tag modification (bug 358068)
 * Create branch from revision not work on project (bug 357562)
 * NPE in SwitchOperation [ID-LK5LW] (bug 351434)
 * NPE in ResourceCompareInput [ID-H92AC] (bug 356872)
 * NPE in MarkAsMergedOperation [ID-WZ3PP] (bug 357104)
 * Problem during Replace with Latest from repository (temporary path is too long) (bug 297721)
 * Changes model initialization shouldn't cause an I/O exception [ID-AI4E7] (bug 355901)
 * Class Preferences, methods savePluginPreferences() and getProxyDataForHost() are deprecated (bug 355996)

--------------------------------------------------------------------------------

Version 0.7.9.I20110819-1700 [19 August 2011]

Features:
 * Add "record-only" option to the merge dialog (bug 354996)

Fixes:
 * GetRemoteFolderChildrenOperation implementation depends on the JDK specific (bug 352947)
 * Do not mess svn:externals order (bug 350143)
   + special thanks to Julien HENRY
 * Duplicate folder name for svn:externals if same destination (bug 353009)
   + special thanks to Julien HENRY
 * Performance problem with Create Patch (bug 333785)
 * Refactor SVN locks support code (bug 354058)
 * Data processing error is mistakenly recognized as a bug in the CreatePatchOperation code [ID-W32HV] (bug 354062)
 * When i "create patch". The patch file don't encode in utf-8. (bug 284081)
 * Missing Resources dialog does not resize correctly (bug 304486)
 * JavaHL is independent of Windows, please properly document this (bug 307397)
 * Exceptions when eclipse start (bug 302569)
 * Validation of the issue number using bugtraq:logregex is broken (bug 300402)
 * SetRevisionAuthorNameOperation shouldn't be performed if original (commit, copy etc.) operation failed [ID-WP0UC] (bug 354812)

--------------------------------------------------------------------------------

Version 0.7.9.I20110715-1700 [15 July 2011]

Features:
 * Make SVN: 'Save Authorization Info' operation optional (bug 349111)
 * Update Subversive help regarding persistent SVN+SSH connection option (bug 349139)
 
Fixes:
 * Negative revision numbers are not allowed [ID-VBVYH] (bug 296094)
 * 'Replace with revision' fails when using javahl16 connector (bug 351370)
 * SVN repositories view blocks UI thread (bug 295110)
 * Useless reordering in the SVN Repositories View (bug 351649)
 * Team Hook does not work while moving versioned files or folders into unmanaged project (bug 254846)
 * NPE in CompareEditorInput.setDirty in Eclipse 3.7 [ID-MAMS9] (bug 348787)
 * SVNKitconnector may access uninitialized CoreExtensionsManager (bug 351357)
 * IllegalArgumentException in AbstractActionOperation [ID-CUA4N] (bug 350077)
 * extremely poor refreshLocalResourceImpl performance (bug 259287)
 * FileReplaceListener performs time consuming actions at inappropriate time (bug 321542)
 * svn perspective launches svnserve which never close (bug 305658)
 * Correct french translation for PerformancePreferencePage_enableCache (bug 349138)

--------------------------------------------------------------------------------

Version 0.7.9.I20110602-1700 [2 June 2011]

Fixes:
 * Correct help section regarding latest changes in Merge Dialog behaviour (bug 347143)
 * Bug fix: update version number to the actual 1.6.15 (bug 347568)
 * Indigo requires license update (bug 346698)
 * Sometimes SVN Kit does not throw an exception when repository is inaccessible [ID-VIT54] (bug 347737)

--------------------------------------------------------------------------------

Version 0.7.9.I20110523-1700 [23 May 2011]

Features:
 * Provide a flexible way to traverse resources tree in operation execution context (bug 345170)

Fixes:
 * Deadlock when starting Eclipse with Synch View open [ID-V0QM2] (bug 313866)
 * Indigo requires license update (bug 346698)
 * Make revision selection dialog more intuitive (automatically include lesser revision changes into the selected range) (bug 319962)
 * No way to specify correctly a name for the resources traversal operation (bug 345855)
 * Rename Class/Interface causes code garbage with Subversive and keyword substitution (bug 315279)
 * MarkAsMergedOperation ignores cancellation event (bug 345169)
 * SVNMoveDeleteHook does not report any errors happened while moving resources (bug 344361)
 * Unused NLS message (bug 343439)

--------------------------------------------------------------------------------

Version 0.7.9.I20110419-1700 [19 April 2011]

Features:
 * Provide several modes for a branch/tag creation based on the working copy (bug 343073)
 * Undo and Redo doesn't work in Commit Dialog (bug 298556)

Fixes:
 * Malformed network data during synchronization (bug 337151) [allow usage of the older SVN Kit version without the issue]
 * Branch/Tag action from the "Team" menu blocks UI thread (bug 342743)
 * "Keep resource history" option name in the "Team->Copy To" dialog causes misunderstanding (bug 341723)
 * Set Keywords action is enabled for new resources (bug 311665)
 * NPE in SVNHistoryPage resource state listener [ID-Q5KRR] (bug 341896)
 * Undo Delete does not restore the latest file state but the version before (bug 340318)
 * Missing NLS string in plugins.properties (bug 341364)
 * UIMonitorUtility is not equipped to handle applications with more than one shell (bug 341271)
 * IndexOutOfBoundsException during cache update (bug 315544)
 * Correct connectors compatibility ID [ID-D1U3Y] (bug 340527)

--------------------------------------------------------------------------------

Version 0.7.9.I20110318-1700 [18 March 2011]

Features:
 * Add the svn:mergeinfo property into the SVN Property editor list (bug 339832)
 * Improve bug report facilities (bug 337250)

Fixes:
 * Correct Mylyn integration feature dependencies (bug 340376)
 * IllegalStateException in discovery feature when network problem or cancellation occurs [ID-FEJWD] (bug 334408)
 * Extract operation fails with exception [ID-BOAKP] (bug 339469)
 * "Unrecognized node kind" error while comparing resources [ID-RTYVU] (bug 338876)
 * Unhandled EOF exception in Revision Graph [EID-NVOHU] (bug 338485)
 * No error dialog appears if commit fails (bug 338641)
 * "Find/Check out as": destination folder browser should open location of actual workspace [ID-P1ILO] (bug 334252)
 * ResourceContentStorage does not implement equals() (bug 305866)
 * Update Subversive help regarding installation and updating workflow (bug 338289)

--------------------------------------------------------------------------------

Version 0.7.9.I20110207-1700 [07 February 2011]

Features:
 * Allow to branch/tag files and folders in single transaction in the SVN Repositories view (bug 335922)
 * Provide API to open the History view on a specific revision range (bug 335421)

Fixes:
 * Remove Subversive menu in Help (bug 229495)
 * The "svnconnector" extension point is broken (bug 336207)
 * SWTException in SVNTeamModificationValidator when lock is required (bug 336064)

--------------------------------------------------------------------------------

Version 0.7.9.I20110124-1700 [24 January 2011]

Features:
 * Use the latest SVN Kit version (1.3.5) (bug 334452)
 * There is no access to the SVN 1.6-related method signatures (bug 333211)
 * Allow repository creation with the latest SVN Kit-based connector (bug 333202)

Fixes:
 * Extract operation fails under certain conditions (bug 335079)
 * Remove duplicated code parts (bug 333061)
 * Pressing Cancel during compare results in invalid GUI message (no differences) (bug 328820)
 * Calls to the deprecated function in the SelectPatchFilePage (bug 332775)
 * There is a compilation issue in the core plug-in under Eclipse 3.7 (bug 332528)
 * Connectors from polarion update site not detected (bug 328104)
 * No serialVersionUID for the serializable class ActionIDList (bug 332235)
 * Finish to create new SVN repository and share project in single operation fails (bug 330780)

--------------------------------------------------------------------------------

Version 0.7.9.I20101203-1700 [03 December 2010]

Fixes:
 * IWorkspaceRoot.findFilesForLocation() is deprecated (bug 331373)
 * IWorkspaceRoot.findContainersForLocation() is deprecated (bug 331188)
 * [ID-ZT6S5] "Negative revision numbers are not allowed" error while performing "Mark As Merged" operation (bug 330737)
 * Eclipse-LazyStart option is deprecated in Eclipse 3.3 and later versions (bug 331003)
 * Lots of warnings in the build.properties files (bug 330843)
 * Use Shell from the FileModificationValidationContext if possible (bug 330638)
 * Eclipse 3.5 discovery feature connector source code produces compilation errors (bug 330637)
 * SVNTeamModificationValidator does not take into account LockProposeUtility.proposeLock(..) returned status (bug 330290)
 * Error in menu item title: "Comapre With" (bug 330228)
 * Ability to reject incoming changes (make Mark as Merged active) (bug 297821)
 * Finish button on "Select Resource" dialog not enabled until a different revision is selected (bug 329756)
 * Correct simple share mode option name (bug 329726)
 * Wrong French translation for a SVN error (bug 329201)
 * Some NLS messages should be removed (bug 329187)
 * SWTException when Subversive UI plugin starts in a worker thread (bug 326684)
 * No tooltip for clock icon on merge dialog (bug 326074)
 * NPE starting target workspace (bug 328149)
 * Properties conflict on project makes Subversive totally unusable. (bug 283999)

--------------------------------------------------------------------------------

Version 0.7.9.I20101001-1700 [01 October 2010]

Fixes:
 * Update javahl binaries to 1.6.12 version (bug 326829)
 * Subversive does not start correctly under Eclipse 3.5.x with discovery feature enabled (bug 326834)
 * Remove SVN 1.4-related connectors from the discovery feature list (bug 326831)
 * Discovery feature do not starts under Eclipse 3.6 (bug 326564)

--------------------------------------------------------------------------------

Version 0.7.9.I20100917-1700 [17 September 2010]

Features:
 * Add documentation about Revision Graph options dialog (bug 317802)
 * [Revision Graph] Allow to hide merge connections by pressing on merge icon (bug 319383)
 * Make lighter comment color for selected node in Revision Graph (bug 317699)
 * Allow to call revision graph for multi-selection (bug 318719)
 * Add help about Properties View contribution in Revision Graph (bug 319109)
 * Show nodes info in Properties View in Revision Graph (bug 319104)
 * Show example of date in preferences (bug 299908)
 * Save revision graph setting in options dialog (bug 317839)
 * [Revision Graph] Allow to search revision nodes on graph (bug 319968)
 * [Revision Graph] Allow to specify revisions range (bug 319249)
 * Support set-depth option (bug 295217)

Fixes:
 * The conflict editor ignores custom file encoding on the right hand side, uses encoding from container instead (bug 325122)
 * Resolving Tree Conflicts - Apply Local Changes doesn't work on 2.2.2 (bug 320843)
 * Subversive should not set forcibly svn:mime-type to text/plain (bug 322772)
 * NPE in SVNRemoteStorage [ID-AFBM0] (bug 324394)
 * Default key binding in editors prevents AT from working properly (bug 316097)
 * Commit Comments history depth doesn't have any effect, when i change it to lower value (bug 302571)
 * [Revision Graph] Add ... to Show Revision Graph action (bug 319138)
 * Handle missing resources in Commit dialog (bug 312874)
 * [Revision Graph] Increase vertical offset between neighbor nodes (bug 319133)
 * Create patch file filter not working (bug 302937)
 * [Revision Graph] Increase graph margin (bug 319129)
 * Error when calling SVN Info for moved resource (bug 315545)
 * [Revision Graph] Show graph for called resource (bug 319243)
 * Error in annotation if there are specified revisions (bug 317612)
 * Connector discovery says it's retrieving list from eclipse.org, but connects to community.polarion.com (bug 320955)
 * Show History failure - No such revision (bug 312464)
 * [Revision Graph] Improve comment presentation (bug 319228)
 * [Revision Graph] Improve tooltip presentation (bug 319148)
 * Allow to truncate paths in Revision Graph (bug 319029)
 * Handle if errors happen during revision info fetching at Revision Graph (bug 317801)
 * NPE in create patch (bug 300720)
 * Cache directory is empty for revision graph (bug 317266)
 * All updates in a merge marked as conflicts (bug 312585)

--------------------------------------------------------------------------------

Version 0.7.9.I20100617-1700 [17 June 2010]

Features:
 * Add merge information to revision graph (bug 313134)

Fixes:
 * [Show History] Error: Retrieval of mergeinfo unsupported (bug 257669) 

--------------------------------------------------------------------------------

Version 0.7.9.I20100528-1600 [28 May 2010]

Fixes:
 * Lock user account with Subversive (bug 314490) 
	
 * Realm credentials are not used in auth prompt (bug 314639) 
		
 * Unable to customize preferences when Subversive is embedded in an eclipse product (bug 311019) 
	
--------------------------------------------------------------------------------

Version 0.7.9.I20100512-1900 [12 May 2010]

Features:
 * Allow to manage revision graph caches (bug 311015)

 * Allow to expand/collapse revision nodes (bug 310979)

 * Provide view with graph of changes: branches, tags etc. (bug 211253)

 * Correctly support externals in actions (bug 290386)
 
Fixes:
 * Invalid action contribution by revision graph (bug 312624)
  
 * Add help for revision graph (bug 312562)
 
 * SVN Deadlock while trying to open Password Dialog (bug 301417)

 * SSH settings are not correctly switched in repository locations dialog (bug 310088)

 * Ssh port not being saved between eclipse restarts (bug 249074)

 * Make consistent licenses (bug 310430)

 * org.eclipse.team.svn.ui.lock package isn't exported (bug 310422)
 
 * Allow to specify operation id from multiple message bundles (bug 309290)

 * Error during decoration in Helios M6 (bug 307203)

 * Subversive Connector Discovery fails on Helios (bug 295156) 

 * Any key binding for rename in SVN Repositories view, should be "F2" (bug 299592) 

 * SVN Workspace Synchronization: Synchronize function does not display proper Icon Decoration for an "Incoming Deletion" (bug 282338) 

 * FileUtility#getPathNodes is inefficient for large change sets (bug 266492) 

 * One slash in URL during Share Project (bug 303085) 

 * Problems when project contains folder called "tags" (bug 303032) 

 * Label for SVN URL changes after restart (bug 298862) 
 
 * Reintegrate says "No changes found" (bug 297720)

 * Change bugs title (bug 298574)

 * Filter JVM Properties when creating Mylyn task (bug 298575)

 * Compare with branch doesn't work with externals (bug 298573)

 * Undo after directory move causes irrecoverable data loss (bug 297779)

 * NPE in getNationalizedString if Localization is not installed (bug 300592)

 * Can not get Subversive working in I20100122-0800 (bug 300591)
  
 * Subversive Connector Discovery fails on Helios M3 (bug 295156) 

 * Subversive is halting the UI (note that jconsole doesn't detect a deadlock, but still it becomes halted) (bug 296707)
   
 * NPE in IStateFilter$AbstractStateFilter.accept() (bug 296402) 

 * StackOverflowError when getting authentication info (bug 296689)
   
 * File is disappeared from Sync view if update finished with error (bug 295984)

 * Correctly show files copied with different register case on Windows (bug 295983)

 * Subversive fails to initialize due to corrupted .svnRepositories file (bug 295954)

 * dead lock on Linux on startup due to password prompt (bug 295951)

 * Eclipse UI stalls for more than 5 minutes in the main thread executing SVNRemoteStorage code (bug 296230)
    
 * Subversive tries to connect to repository for Compare With -> Base from Working Copy (bug 245326)

 * Use Equinox secure storage (bug 295079)

 * Changing svn:ignore on project root directory without updating incoming changes before causes strange behavior (bug 256868)

 * Support lightweight decorations for Synchronize View (bug 245873)
     
 * Start from copy uses trunk instead of branch copy revision (bug 294022)
 
 * Problems with locks (bug 294207)
 
 * shortcut stops working after first time (bug 293003)  
 
 * Commit externals problem (bug 290385)
 
 * svn:externals definition for a sub-sub-directory breaks after running svn update (bug 270022)
 
 * Error during reporting an invalid error (bug 293588)
 
 * Make user friendly name for subscriber (bug 293562)
 
 * New NLS unused message with latest update (bug 293464)
 
 * An empty console window defaults to SVN console (SVN Console should be a console that also display under the opened consoles list) (bug 290797)
 
 * Adding file to svn ignore from "Add To SVN Version Control" dialog problem (bug 254902)
 
 * An internal error occurred during: "Overwriting 1 resource.". (bug 292577)
 
 * Extend SVN Info properties (bug 293016)
 
 * NPE when calling Edit Conflicts action (bug 293172)
 
 * Make more precise statuses in Commit dialog (bug 293017)
 
 * Properties decoration problem (bug 293015)
      
--------------------------------------------------------------------------------

Version 0.7.8.I20091023-1300 [23 October 2009]

Features:
 * Add ability to make relative urls in Set External Definition dialog (bug 292674)
 
 * Add ability to specify comments for revision links (bug 292280)
 
 * Add 'Add Revision Link' action to Team menu (bug 292424)

 * Provide annotated revision links to save the original revision if switching between trunk and branch (bug 261983)

 * Add dialog for creating external resource (bug 288139)
 
 * In SVN lock view add actions to resources tree (bug 287577)
 
Fixes:
 * deadlock in org.eclipse.team.svn.core.SVNTeamPlugin - Eclipse fails to start (bug 291603)

 * Problems with Set External Definition dialog (bug 292781)

 * Commit says dir is not part of commit, but it is (bug 292477)

 * [Subversive] - Bug report ID-L9VHB (bug 254477)

 * There are no new files in outgoing change sets (bug 292927)

 * Selection of a single revision to merge results in no changes (bug 287872) 

 * Send Notifications' operation finished with error - repeated dialog (bug 282000) 

 * "Accept" action in the Merge View does not work (bug 289680)

 * "Edit tree conflicts" action is enablement does not corresponds to what it does (bug 289710) 

 * NPE in SVN Kit 1.3.0 (bug 289812) 

 * "Show History" action from the "Synchronize View" is ineffective (bug 289313) 

 * Merge View incorrectly shows conflicting statuses (bug 289691) 

 * ClassCastException in Override and Update in Merge view (bug 290691) 

 * Trim spaces in repository location (bug 290678) 

 * Add key bindings for Merge action (bug 290718) 

 * Problems with URL field in Merge dialog (bug 290717) 

 * Merge and Synchronize interfered with each other (bug 289689) 

 * Context menu actions in the Merge View does not correctly work (bug 290508) 

 * Change connectors string in SVN Connectors list (bug 290677) 

 * Recommended small change in SVNRemoteStorage.isFileExists() to massively improve performance (bug 291089) 

 * "Local" and "Remote" sub-menus of "Synchronize view" do not appear in my RCP app (bug 290574) 

 * Bad trailing character after french translation "En attente" (bug 274961) 

 * Share Project Wizard dialog typo (bug 264685) 

 * error message when resource location does not match repository location (bug 277787) 

 * Ascendant/Descendant Text Decorations Incorrect (bug 248033) 

 * Synchronize action is hanged (bug 291566) 

 * NPE in SVNRemoteStorage (bug 291580) 

 * NLS unused message (bug 291583) 

 * [Subversive] - "Team -> Switch..." should prefill the input URL with selected resource URL (bug 271297) 

 * Merged files are absent from SVN change Sets (TeamSynchronisation) (bug 282677) 

 * svn externals not working for path/subpath entries (bug 272526) 
 
 * [Subversive] - Bug report ID-AUVIL (bug 286552)   
 
 * Preview of merge reintegrate fails (bug 287301)
 
 * Support spaces in local path in svn:externals (bug 288107) 
 
--------------------------------------------------------------------------------

Version 0.7.8.I20090904-1300 [04 September 2009]

Features:
 * Add Capabilities feature
 
 * Support reading Subclipse-generated project set files (bug 276947) 

 * Support reading svn-pde-plugin compatible map files (bug 276949)
  
 * Connector discovery UI (ala Mylyn) (bug 280889) 

 * List all locked files in a project (bug 279602) 
    
Fixes:
 * Possible bugs in Subversive Fetch Factory (bug 273230) 

 * Deleting and replacing a resource is a SVN delete/add instead of a modify (bug 276018) 

 * Show annotations does not work in files opened by the XML Editor (bug 267347) 

 * "Compare with Each Other" grayed out (bug 275287) 

 * [Subversive] - Unused NLS Strings for SVN UI (bug 275155) 

 * No assist from "Ignored resources" list. (bug 274793) 

 * RFE: provide Subscriber (bug 272594) 

 * SVNRemoteResourceRevision always returns content of latest revision (bug 271931) 
   Thanks to Steffen Pingel

 * Attempting to commit files in a folder that has not been added to SVN, locks up Eclipse (bug 251098) 

 * Override and Update deletes all unversioned files disregarding the svn:ignore-list (bug 264500) 

 * A tilde (~) in the repository URL can not be handled (bug 269665)          

 * Concurrent thread access to SVNTeamProvider instance leads to HiddenException (bug 249943) 
 
 * Usability improvement for repository table in "Checkout from SVN" wizard (bug 263435) 

 * Remember the "Keep Locks" Setting in the Commit Dialog (bug 271742) 

 * [Subversive] - Tip for improvement ID-Q11B5 (Default behaviour of double click in the commit dialog) (bug 257808) 

 * Incorrect previously entered comment in commit dialog (bug 278606) 

 * Handle external definitions in svn commands (bug 255009) 

 * Add ability to specify revision for operations (bug 279083) 

 * Compare with branch/tag doesn't work as expected (bug 279797) 

 * SVN PDE Build uses wrong default path value (bug 279590) 

 * Adding a dated revision link fails (bug 279828) 

 * Selected revisions at bottom of list don't populate Revisions text field in the Merge dialog (bug 279612) 

 * Check Out As Wizard not usable with keyboard. (bug 279355) 

 * cross-project refactoring (bug 281253) 

 * Show History + Export doesn't work (bug 283917) 

 * SelectProjectNamePage (bug 282583) 

 * Error message is incorrect: Window->Preferences->Team->SVN->SVN Client does not exist (bug 281413)

 * Don't override all revisions in Override and Commit (bug 285138)

 * NPE after calling Override and Update (bug 283018)

 * [Subversive] - Incorrect character encoding used for display in Compare view (bug 276138)  
 
--------------------------------------------------------------------------------

Version 0.7.8.I20090506-1500 [06 May 2009]

Features:
 * Support for files in svn:externals (bug 269155) 
 
 * Detection of tree conflicts (bug 269156) 
 
 * Configuration alternative of a diff viewer for MS-WORD documents (bug 260236)

Fixes:
 * Compare view on right side is empty (bug 272265)         

 * Call commit dialog for svn:externals (for directory) causes error (bug 272025)       
 
 * svn:externals definition for a sub-sub-directory breaks after running svn update (bug 270022)  

 * All svn:log property values should be normalized to LF endings only (bug 271616) 
         
 * Create branch doesn't work in Package Explorer (bug 271656)

 * Synchronize permanently fails with org.eclipse.team.core.TeamException: Resource ?...? does not exist. (bug 267624)

 * Sorting by user, date or comment does not work for SVN Changeset model in Synchronize view (bug 264331)

 * SVN Change sets model: Incoming changes are duplicated to a "Unassiged" node (bug 261185)
 
 * NPE when activating Mylyn task (bug 266826)
 
 * Mylyn Context actions are missing from Team Synchronize view if logical models are enabled (bug 264344)
 
 * Synchronization empties outgoing changes if SVN Changesets model is selected (bug 264772)

--------------------------------------------------------------------------------

Version 0.7.7.I20090224-1900 [24 February 2009]

Features:
 * Add a pre-commit check for files with errors and warnings (bug 263442) 

 * Add ability to output resources comparison in unified diff format (bug 263657) 

 * Add ability to create SVN repository (bug 263951)   

Fixes:
 * Compare with Branches/Tags action problem (bug 263790)    

 * Extract bug (bug 264192)

 * o.e.team.svn.core has hard dependency to com.ibm.icu bundle (bug 261413)
 
 * Bugtraq properties problem (bug 261857) 
 
 * Problems with relocating project (bug 259626) 
 
 * Share Projects menu item disabled when multiple projects selected (bug 263003) 
 
 * Resources list isn't updated in "Override and Update..." (bug 254900)
 
 * Add key shortcuts to controls (bug 254726)
 
 * Revisions Range dialog isn't correctly resized (bug 261328) 
 
--------------------------------------------------------------------------------

Version 0.7.6.I20081229-1900 [29 December 2008]

Fixes:
 * Error when trying to create new tag or branch using repository view (bug 259655)
 
--------------------------------------------------------------------------------

Version 0.7.6.I20081222-1900 [22 December 2008]

Features:
 * Implement ModelProvider for change sets using IChangeGroupingRequestor (bug 245869)

 * Implement SVN specific ModelSynchronizeParticipant (bug 245872) 
 
 * Implement SVN specific SubscriberMergeContext (bug 245870)
 
 * Add synchronize pane to commit panel (bug 245874)
 
 * Sort changes by status in extract log (bug 255545)
 
 * Message Bundles (bug 253520)
 
 * Localization - ICU4J (bug 254198)

Fixes:
 * When extracting only remote changes the conflicted resources are not written to log. (bug 253672)

 * Extra projects in synchronize view (bug 253887)
 
 * Problem with creating a branch/tag (bug 255487)
 
 * Subversive deleting unselected and non svn managed files/folders when doing "Override and Update" (bug 251094)
 
 * Check out from SVN repository fails when any workspace project uses the RSE file system (bug 230331)
 
 * java.util.EmptyStackException in SVNUtility (fetching log entries) (bug 249285)
 
 * ClassCastException SVNKit 1.5 getValidReference (bug 252103)
 
 * missing "locked message" for a file already locked (bug 247614)
 
 * Bug report ID-G6B5P (bug 256949)
 
 * Unable to merge: exception when selecting "Revision" radio in merge dialog. (bug 255975)
 
 * Creating a patch with a file that does not end with a newline places the "no newline" marker incorrectly (bug 254545)
 
 * Tags include trunk subdir (bug 246268)    
 
--------------------------------------------------------------------------------

Version 0.7.5.I20081029-1900 [29 October 2008]

Features:
 * Browse button in Share dialog (bug 211233)

 * Allow to select resources only under repository location in Share project's simple mode (bug 249623)
 
 * There is no way to type in the repository path when doing a Checkout from SVN (bug 231984)
 
 * Add 'Drag and Drop' listeners to the Subversive views (bug 211236)
   + thanks to Nick Entin for patches

Fixes:
 * Closing project with file in editor and reopening project generates NPE (bug 246147)

 * URL decoration with bugtraq properties does not work properly (bug 252563)
 
--------------------------------------------------------------------------------

Version 0.7.4.I20091001-1900 [01 October 2008]

Features:
 * Export History log (bug 211415)
   + thanks to Igor Burilo for the patch
 
 * There is no way to type in the repository path when doing a Checkout from SVN (bug 231984)
 
 * Allow "override and commit" for non-conflicting resources (bug 241422)

Fixes:
 * Authentication problems (bug 243914)
 
 * Extract from HistoryView fails if the folder has modification and modified children with greater names. (bug 245504)
   + thanks to Igor Burilo for the patch

 * Null Pointer Exception in Revision Properties View (bug 248355)
 
 * Improve extract log (bug 245509)

 * Serious usability regression: Replace With merges with revision instead of replacing with revision (bug 240473)

--------------------------------------------------------------------------------

Version 0.7.3.I20080814-1500 [14 August 2008]

Features:
 * Add date selection options to History View (bug 211408)
   + special thanks to Gabor Liptak
   
 * Allow different behavior for Checkout action (bug 211237)
   + special thanks to Felipe Carasso, Jacob Robertson

 * Extract Changes action should not create deletions.log file if no deletions occurs (bug 243395)

Fixes:
 * butraq:logregex property display disgresses from specification (bug 243678)
   + special thanks to contributor Jens Scheidtmann
   
 * Use standard create patch dialog in Synchronize View (bug 243713)
   + special thanks to Noah Roberts
   
 * getRepository failed: exception AssertionFailedException: null argument (bug 240133)
   + special thanks to Chomat Stephane

 * SVN hangs in SVNRepositoryResource.getRoot() method (bug 242130)
   + special thanks to Neale Upstone

 * UI pops up dozens of error dialogs making eclipse unusable (bug 220292)
   + special thanks to David Green

 * Cannot create a new branch (bug 243181)
   + special thanks to Jonathan Marston

 * Synchronize View's Local and Remote submenus are disappeared in Eclipse 3.4 after first call (bug 243045)
   + special thanks to Noah Roberts, Owen Rees
   
 * NPE in Share Project wizard when a project is already exists in the repository (bug 243446)
   + special thanks to Stephan Heffner
   
 * Synchronize doesn't show incomming changes (bug 243401)
   + special thanks to Tony Poppleton, Channing Walton, Radoslaw Jozwik

--------------------------------------------------------------------------------

Version 0.7.2.I20080801-1500 [1 August 2008]

Features:
 * When a project is relocated outside Eclipse, and the new URL matches an already-existing repository location, Subversive should automatically update its metadata (bug 231427)
   + special thanks to Max Bowsher

 * Improve "Import Project Set" behaviour (bug 230826)
   + special thanks to Michael Murphree

 * Provide "Headless" update site (bug 211420)
   + special thanks to Panagiotis Korros, Thomas Hallgren

 * decorate working sets in Package Explorer (bug 242249)
   + special thanks to Igor Fedorenko

 * Popping up of History View can't be disabled when Compare With action is performed. (bug 242192)
   + special thanks to Radoslaw Jozwik

 * Include information about merged revisions into annotation (bug 240156)
 * Show merged revisions in History View (bug 239819)
 * Support sparse actions (checkout, import, export) [REOPENED] (bug 231552)
 * Allow multiple selection for repository operations (export, add revision link). (bug 241249)
 * Ensure that merge action serves merge-tracking functionality (bug 239818)
 * Allows to select multiple revisions in merge dialog (bug 239820)
 * Support merge --reintegrate mode (bug 241500)
 * Use latest SVN 1.5 binaries [REOPENED] (bug 218472)
 * Improve "Extract Changes" operation (bug 242557)

Fixes:
 * ArrayIndexOutOfBoundsException in Create Patch action (bug 242670)
   + special thanks to Ulli Hafner

 * Stack overflow while disconnecting a project (bug 241814)
   + special thanks to Vadim Dmitriev

 * NPE in MergePanel.getSelection (bug 242753)
   + special thanks to Igor Fedorenko

 * New resources are not decorated as outgoing changes (bug 242248)
   + special thanks to Igor Fedorenko

 * NPE in MessageDialog (bug 242085)
   + special thanks to Eugene Babikhin

 * 'Select' button in 'Replace With' window should have a better name (bug 240462)
   + special thanks to Max Gilead

 * Replace With -> URL should have better name (bug 240461)
   + special thanks to Max Gilead

 * NPE when creating a new project from a repos (bug 242142)
   + special thanks to Marshall Pierce

 * NPE while calculating project name before checkout (bug 241777)
   + special thanks to Wang Lihui

 * All protocols: Subversive uses incorrect credentials with SVN Kit 1.1.7-based connector (bug 221094)
   + special thanks to Christopher Smith, Fabio N. Kepler, Antony Jones, Heath Borders, Martin Oberhuber, Jeroen, Nathan Vick, Cinly Ooi

 * Replace confirmation before main dialog window doesn't make sense (bug 240471)
   + special thanks to Max Gilead
   
 * Merge problem "File not found: revision..." when opening 3-way comparator (bug 240291)
   + special thanks to Alexey Kamenchuk
   
 * "Overwrite and Update" doing merge (bug 237218)
   + special thanks to Tony Poppleton
   
 * Branch from working copy failed with SVN 1.5-compatible connectors (bug 240258)
   + special thanks to Larry Edelstein

 * Check out deleted files on my system without asking about it (bug 238916)
   + special thanks to Vesa Jaaskelainen 

 * Commiting not up to date directory results in uninformative console message only (bug 239105)
   + special thanks to Max Gilead

 * Migrate Projects and Settings throws NullPointerException, perhaps on Closed Projects (bug 238863)
   + special thanks to Brett Randall, Steffen Pingel

 * view settings wording: contiguous should be incremental (bug 238834)
   + special thanks to Andrew Bachmann

 * Properties Configuration preference uses the wrong scrollbars (bug 238389)
   + special thanks to Kristoffer Peterhansel

 * Auto-properties not importing from my Subversion config file (bug 238390)
   + special thanks to Kristoffer Peterhansel

 * Deadlock when moving multiple sources from one project to another. (bug 233956)
   + special thanks to Ulli Hafner

 * SVN replaces files with second last revision after commit (bug 237204)
   + special thanks to Fabricio Silva

 * Relocate outside plugin control, then "Share with another repository location" fails (bug 231426)
   + special thanks to Max Bowsher

 * NPE in SVN 1.5 compatible connectors when user has no access to repository revision (bug 237408)
   + special thanks to Darren Hodges
   
 * The 'New Working Set' dialog should come up with the default text in the 'Name' textbox already selected (bug 234397)
   + special thanks to Dan Berindei
   
 * NPE in acquireSVNProxy after plug-in is upgraded from the old version (bug 237422)
   + special thanks to Edward Willink
   
 * Share Project should run in background (bug 237304)
   + special thanks to Lars Vogel
   
 * Synchronize View's "Edit Conflicts" action should not touch folders (bug 237264)
   + special thanks to Markus Dangl
   
 * NPE in ClearUpdateStatuses operation (bug 235317)
   + special thanks to Ulli Hafner
   
 * SVNRemoteStorage.asLocalResource() should never return null (bug 216629)
   + special thanks to Gene Huang

 * Update help according to plug-in changes (bug 225568)
 * NPE while refreshing repository browser (bug 240795)

--------------------------------------------------------------------------------

Version 0.7.1.I20080612-1500 [12 June 2008] [build ids are changed corresponding to guidelines]

Features:
 * Support latest SVN 1.5 API changes (bug 216473)

Fixes:
 * JavaHLConnector creates a huge amount of short living threads (bug 235764)
   + special thanks to contributor Micha Riser
   
 * Using a proxy server doesn't work (bug 233962)
   + special thanks to Enrico Ehrich, Francois Masurel
   
 * The last added line is ignored in the new file while creating a patch. (bug 236399)

--------------------------------------------------------------------------------

Version 0.7.0.v20080609 [09 June 2008]

Features:
 * additional date formats for label decorations (bug 217561)
   + special thanks to Jae Gangemi
   + special thanks to contributor Thomas Champagne
   
 * Revision properties viewer (bug 232728)

Fixes:
 * Avoid potential deadlock while prompting credentials (bug 236259)
 * Support Mylyn 3.0 API changes (bug 236100)
 * NPE in Properties View when "Add" action is called (bug 233407)
 * Repositories View ignores case sensitivity option (bug 233424)

--------------------------------------------------------------------------------

Version 0.7.0.v20080521 [21 May 2008]

Fixes:
 * NoClassDefFoundError: org/eclipse/ui/internal/util/SWTResourceUtil (bug 232972)
   + special thanks to Jorg von Frantzius

--------------------------------------------------------------------------------

Version 0.7.0.v20080517 [17 May 2008]

Features:
 * Allow to set/modify revision properties (bug 231554)
   + special thanks to Neale Upstone

 * Support latest SVN 1.5 API changes [REOPENED] (bug 216473)
 * Support relative paths and peg-revisions for svn:externals property (bug 231546)
 * Support sparse checkouts (bug 231552)
 * Minimize transactions count where it is possible regarding to SVN 1.5 API changes (bug 231548)

Fixes:
 * NPE in "Replace with Tag" operation (bug 226025)
   + special thanks to Mark Addleman, Georg Lippold, Chris Myers

 * Problem with tagging from branches (bug 229761)
   + special thanks to Damir Murat

 * Precise Team menu enablements must be disabled by default (bug 230461)
   + special thanks to Rafael Chaves, Pavel Zuev, Assaf Almaz

 * Automatic project share makes more than one repository location for the same repository (bug 232649)

--------------------------------------------------------------------------------

Version 0.7.0.v20080425 [25 April 2008]

Fixes:
 * Feedback on Documentation Page (bug 228692)
   + special thanks to Nathan Gervais

 * Attempt to synchronize closed projects produces error (bug 228789)
   + special thanks to Leo Dos Santos

 * Mylyn integration won't install due to Mylyn version update to 3.0.0 (bug 228507)
   + special thanks to Martin Oberhuber

--------------------------------------------------------------------------------

Version 0.7.0.v20080423 [23 April 2008]

Features:
 * Merge property editor (bug 211411)
   + special thanks to Francois Fernandes

 * Enhance copy and move behaviour (bug 227491)
   + special thanks to Eric Jain

 * Create M2Eclipse integration plug-in [generalized extension point] (bug 224074)
   + special thanks to contributor Eugene Kuleshov

 * Use Quick-Diff annotate for repository files also (bug 228369)

Fixes:
 * Show Annotations using Quickdiff - Show Author doesn't work (bug 220027)
   + special thanks to Steve

 * "Negative revision number" when comparing renamed resources (bug 225972)
   + special thanks to Jukefox

 * Team Synchronization very slow (bug 222632)
   + special thanks to Marc Guenther, Nikolaus Heger

 * Unable to resolve conflicts (bug 228015)
   + special thanks to Jesse Eichar

 * Not asking to save resource before synchronize (bug 224651)
   + special thanks to Aldo Bongio

 * Subversive commit key shortcut stops working after first time (bug 225930)
   + special thanks to Mark Powell

 * The commit dialog doesn't show the modified files at the top anymore (bug 227136)
   + special thanks to Paolo

 * Cleanup plug-in initialization (bug 225884)
   + special thanks to contributor Eugene Kuleshov

 * Negative Revision number exception in InfoOperation when SVN Kit is selected (bug 226896)
   + special thanks to Marijn, Jarkko Lietolahti, Aslam, Steffen Pingel

 * Incoming change sets are not shown for external resources (bug 227118)
 * Properties status is not reported while merge. (bug 227102)

--------------------------------------------------------------------------------

Version 0.7.0.v20080404 [04 April 2008]

Features:
 * Use Eclipse IDE proxy settings (bug 225289)
   + special thanks to Anders Sveen

 * Create M2Eclipse integration plug-in (bug 224074)
   + special thanks to Eugene Kuleshov

 * Export/Import of repository locations settings (bug 211248)
 * Rework repository and authentication setting storing. (bug 224616)
 * Affected path drop-down improvements. (bug 223630)
 * Update help according to plug-in changes (bug 225568)
 * Enable Extract for single selection in HistoryView. (bug 223632)

Fixes:
 * Minimize repository root access (bug 211391)
   + special thanks to Pavel Zuev

 * ClassCastException on Override and Update from Synchronize View (bug 224842)
   + special thanks to Daniel Hirscher, Genady Beryozkin, Edoardo Comar, Leo Dos Santos

 * Freeze externals uses wrong revision when external reference points to tag or branch without modifications (bug 224597)
   + special thanks to Marco Perrando

 * Patch files created under subversive not compatible with patch program [REOPENED] (bug 222669)
   + special thanks to Mike

 * Password Management Pref Page improvements (bug 223510)
 * "Delete" action enablement in Select Resources composite is wrong. (bug 223628)
 * Enable filter actions for all filtered (History View) (bug 223627)
 * Some operations can't be sent to background. (bug 223631)
 * Information about file locker (bug 211254)
 * Improve Progress Reporting in Composite Operations (bug 223343)

--------------------------------------------------------------------------------

Version 0.7.0.v20080321 [21 March 2008]

Features:
 * Changed Path filter for history view (bug 222943)
 * Provide filter management for ILogNode table (bug 222413)
 * Add drop-down menu to revert dialog. (bug 219983)

Fixes:
 * Merge changes does not show conflict when file has been renamed (bug 222541)
   + special thanks to Remi Nodet

 * Package org.eclipse.team.svn.ui.history.model is not exported (bug 223129)
   + special thanks to Michael Valenta

 * Team Synchronization very slow (bug 222632)
   + special thanks to Marc Guenther

 * Patch files created under subversive not compatible with patch program (bug 222669)
   + special thanks to Mike

 * svn merge view graphical synchronize overwrites changes in local version (bug 221239)
   + special thanks to Andrew Bachmann, Daniel Hirscher

 * Advanced merge: Comparison uses empty "Remote File" (bug 220737)
   + special thanks to Hubert Bildstein

 * ClassCastException in ShowConflictEditor operation (bug 211390)
 * Remove Property Editor references. (bug 222388)
 * Extract improvements (bug 222944)
 * Synch View Set Property Action bug (bug 223101)
 * Improve Progress Reporting in Composite Operations (bug 223343)
 * Update action in Synchronize View performs update to HEAD instead of revision of synchronization (bug 223322)
 * URL validation is incorrect (bug 223222)
 * Merge URLs selection dialog should disable revision selection if entered URL is invalid (bug 223221)

--------------------------------------------------------------------------------

Version 0.7.0.v20080311 [11 March 2008]

Fixes:
 * Fixed incorrect update URL's

--------------------------------------------------------------------------------

Version 0.7.0.v20080307 [07 March 2008]

Features:
 * Add "Extract Changes..." actions to Synchronize View. (bug 219985)
 * Add Extract changes action description to Subversive User Guide (bug 221293)
 * Add "Extract Changes..." action to log messages presentation in History View (bug 220540)
 * Reuse compare editor when comparing same resource revisions or compare called for revisions from the History View (bug 219628)
 * Improve History View (new actions in Affected Paths) (bug 218480)
 * Update JavaHL 1.5.0 connector binaries to alpha2 version (bug 221506)

Fixes:
 * Compare window opens behind Revert dialog (bug 219775)
   + special thanks to Steve Streeting

 * Importing folder from SVN using New Project Wizard - strange behaviour (bug 212746)
   + special thanks to Michael Spector, Gadi Goldbarg

 * Check compatibility with Mylyn 2.3.0 task creation API (bug 221498)
 * The '~' sign is not accepted while defining svn:ignore property (bug 221472)
 * Revise and simplify History View code (bug 219793)
 * In Synchronize View operation starts before dialogs (bug 221133)
 * Properties View has old data, while reading new props. (bug 219572)
 * Update base table sorter (bug 219583)
 * Fix images disposing (bug 219455)

--------------------------------------------------------------------------------

Version 0.7.0.v20080218 [18 February 2008]

Fixes:
 * Change sets on an unavailable Subversive repository disappear (bug 219212)
   + special thanks to Pim Broekhof
   
 * Buttons works incorrectly in history view
 * Deleted files stay present in synchronize view after commit
 * NPE when deleting resource inside commit dialog
 * Invalid date ranges for revision folding in history view 

--------------------------------------------------------------------------------

Version 0.7.0.v20080214 [14 February 2008]

Features:
 * Implement compare and replace actions for branches and tags. (Bug 217553)
   + special thanks to Andrea Polci
   
 * Enhance automatic project share (bug 211399)
   + special thanks to Max Rydahl Andersen
   
 * Two URLs merge mode also should use Merge View (bug 217856)
 * Add revision folding ability to History view (bug 211410)
 * Use latest SVN 1.5 binaries (bug 218472)
 * Open external editor if no built-in editors exists for this file type (bug 218485)
 * Improve History View (new actions in Affected Paths) (bug 218480)
 * Add local history to History View (bug 218468)

Fixes:
 * Team Synchronization reset "remove from view" after each file change (bug 207026)
   + special thanks to Pawel Piskunowicz
   
 * Reported progress is incorrect almost always (it is doubled) (bug 216883)
   + special thanks to Ilya Klyuchnikov
   
 * Conflicts are not shown in Incoming Mode with ChangeSets (bug 189094)
   + special thanks to Marko Schulz
   
 * Some jsp files which have utf-8 encoded characters don't displayed correctly in compare window (bug 211568)
   + special thanks to YounJung Park
   
 * Add warnings for operations, which modify tags. (bug 217844)
   + special thanks to Edoardo Comar
   
 * Replace errors in creating tags and branches with warnings. (bug 217845)
   + special thanks to Chris Velevitch
   
 * java.lang.StackOverflowError when trying to share a new project to SVN (bug 217529)
   + special thanks to Leo Dos Santos
   
 * Replace With > Revision... should mark replaced files dirty (bug 218600)
   + special thanks to Daniel Hirscher
   
 * Problematic configuration in build 20080129 (bug 218647)
   + special thanks to Alon Peled
    
 * Keep ignored resources for "Replace With..." actions (bug 211241)
 * UI blinks when commit window is called from Package explorer (bug 218136)
 * Change sets commit fails (NPE) (bug 217291)
 * Merge two repository browsers for dialogs into one. (bug 217289)

--------------------------------------------------------------------------------

Version 0.7.0.v20080129 [29 January 2008]

Features:
 * Add "Create patch file" action to the synchronize view drop-down. (bug 216141)
   + special thanks to Felix Berger

 * Show conflicting resources in Commit dialog (bug 211404)
   + special thanks to Gabor Liptak

 * Allows to override committer name for different protocols (bug 211417)
   + special thanks to Mark

 * Allow to select resources for Create Patch action (bug 211413)
   + special thanks to Kaneider Daniel, Konstantine Kirenko

 * Add Ignore action to Commit dialog (bug 211407)
 * Add "Resolve conflicts" and "Mark as merged" actions to Commit dialog (bug 215963)
 * Add 'Lock" and "Unlock" actions to Commit dialog (bug 215968)
 * Add "Create patch file" action to Commit dialog (bug 215962)
 * Add "Replace With" action to Commit dialog (bug 215966)
 * Add "Compare With" action to a Commit dialog (bug 215964)
 * "Add to svn:ignore" action in "Add to version control" dialog drop down (bug 216004)
 * Add "Lock" and "Unlock" actions to synchronize view drop-down menu. (bug 216142)
 * Add "Show Properties" action to a synchronize view drop down. (bug 216144)
 * Add "Set properties" and "Set keywords" actions to synchronize view drop-down menu. (bug 216143)
 * Improve drop-down menu in SynchronizeView (bug 216140)
 * Improve History View Affected Path Composite drop-down menu. (bug 216264)
 * Support latest SVN 1.5 API changes (bug 216473)

Fixes:
 * Commit errors seems to not be shown in console (bug 215188)
   + special thanks to Kristoffer Peterhansel
   
 * It is impossible to install connectors sources on Linux (bug 216699)
   + special thanks to Ilya Klyuchnikov

 * "Report revision change" option does not work (bug 216090)

--------------------------------------------------------------------------------

Version 0.7.0.v20080116 [16 January 2008]

Features:
 * Improve SVN properties support (bug 211403)
   + special thanks to Olavo Lira

 * Improve validation in SVN Properties dialog (bug 211402)
 * Allow to work with non-conflicting resources for "Override and ..." operations (bug 211239)
 * Implement full tsvn properties support (bug 214894)

Fixes:
 * Subversive feature not installable from Ganymede Staging Update Site (bug 213975)
   + special thanks to Markus Knauer
   
 * Project migration from polarion to eclipse didn't work (bug 213727)
   + special thanks to George Lindholm

 * error when trying to commit with enabled bugtraq properties (bug 214609)
   + special thanks to Steve Ulrich

 * Comparing remote files in SVN Repositories view doesn't work (bug 207923)
   + special thanks to Matthias Erche

 * Compare: client library returns null value (bug 211260)
   + special thanks to Samyem
   
 * Initial project share to a new repository URL is shared to path "null" under certain circumstances (bug 214839)
   + special thanks to Daniel M. Zimmerman

--------------------------------------------------------------------------------

Version 0.7.0.v20071221 [21 December 2007]

Fixes:
 * Subversive 1.1.7 Bugreport broken (bug 204970)
   + special thanks to Werner Keil
   
 * Create Unified Diff action handles direction incorrectly (bug 211272)
   + special thanks to Artem Tikhomirov
   
 * Imporve "Problem Dialog" (bug 211398)
   + special thanks to Joern Zaefferer
 
 * Show the difference between the modified version and the current SVN revision (bug 211250)
 * SVN 1.5 support changes (bug 213289)
 
--------------------------------------------------------------------------------

Version 0.7.0.v20071214 [14 December 2007]

Fixes:
 * Subversive Preferences dialog is substantially too wide (Bug: 212033)
   + special thanks to Jonathan Amir
   
 * Label Decorations preview widget in preferences window is too small (Bug: 212029)
   + special thanks to Jonathan Amir
   
 * bugtraq properties not read for new files (Bug: 211422)
   + special thanks to Ben Turner

 * Check compatibility with the Eclipse Ganymede version (Bug: 212732)
 * tsvn:logminsize is not handled (Bug: 212996)
 
--------------------------------------------------------------------------------

Version 0.7.0.v20071210 [10 December 2007]

Features:
 * Spell checking support in Commit dialog and Add/edit commit template is absent (bug 210797) 

Fixes:
 * Rework old-style plug-in manifests (bug 212125)
   + special thanks to Thomas Hallgren
   
 * NPE in SVNRemoteStorage (bug 211392)
   + special thanks to Mike Price
   
 * ClassCastException in LocalShowAnnotationOperation (bug 211275)
   + special thanks to Frank Bille
   
 * Handling % in svn+ssh URLs (bug 211418)
   + special thanks to Scott Riggins, Jack Newton
   
 * CPU hogging (bug 207953)
   + special thanks to Jorg von Frantzius
   
 * GUI hangs (bug 204038)
   + special thanks to Jappe
   
 * classes are packaged in jar files and not in the normal folders structure
   + special thanks to Alon Peled

 * Incorrect peg revision used for incoming update on svn:externals resources in Synchronize View (bug 211439) 
 * Make an Hyperlink in the comment clickable (eg. in the history view) (bug 211244)
 * NPE in Show History (bug 211276)
 * ArrayIndexOutOfBoundsException in MigrateToEclipse operation (bug 211277)
 * Attempted to beginRule: P/..., does not match outer scope rule... (bug 211269)

--------------------------------------------------------------------------------

Version 0.7.0.v20071123 [23 November 2007]

Features:
 * Add "ignore externals" option to "Find/Checkout As" wizard

Fixes:
 * Port changes in the connection window do not affect the connection (bug 208256) 
   + special thanks to Yaron Mazor
 
 * merge UI does not show any changes
   + special thanks to Chris West

 * Share Project(s) does not recognize SVN-meta if location with same repository root exists (bug 210683)
 * Merge UI very slow and fails for projects which names on FS differs in compare to repository (bug 210643)
 * Error while representing the remote content of the folder with incorrect externals property. (bug 210387)
 * Rename does not work in SVN Repositories view
 * ClassCastException is logged when annotating resources from the Synchronize View
 * Merge UI uses incorrectly encoded URL's (bug 210399)
 * Compare after refactoring problems (bug 210272)
 * Fixing issues with "Migrate To Eclipse" action
 * Add "Migrate to Eclipse" action description into help
 * build.properties for UI localization plug-in was corrected
 * SVN client library connector interfaces reworked according to Eclipse guidelines (naming conventions etc.)
 * switched and svn:externals resources support enhancement
 * issue in reconstruction URL and PEG pairs from history
 * incorrect labels in compare UI panels
 * not encoded URL in AffectedPathsComposite.java
 * branch operation works incorrectly for multiple project layout when called for working copies
 * history messages fetched for outgoing changes in context of Incoming Change Set's
 * file:// and file:/// protocol URL's also should be encoded
 * support of svn:externals which is not a direct children for the resource on which svn:externals is specified
 * LocateResourceURLInHistory now works for deleted resources also
 * incorrect log messages in Change Set mode of merge UI
 * Mylyn integration refers to incorrect class name
 * New resources inside new folder does not appear in the Synchronize View
 * merge UI does not work in "reverse" mode
 * Enhance compare editor titles readability

--------------------------------------------------------------------------------

Version 1.1.8 [23 October 2007]

Features:
 * Allow project disconnection from the "Discard Location" dialog (SBV-6187)
   + special thanks to Scott Harper

 * Make the history of the entered comments configurable. 5 comments are way too less. (SBV-5832)
   + special thanks to Paolo Vedovato
 
 * Allow checking out projects as folder into nonversioned folders. (SBV-6286)
 * Allow new resources to be committed into the branch created from the working copy (SBV-6268)
 * Rework merge UI in order to use standard API's instead of proprietary extensions (SBV-6034)
 * Add option which enables/disables svn:externals browsing in the SVN Repository Exploring perspective (SBV-5665)
 * Add decoration on SVN Repositories perspective for resources linked with svn:externals (SBV-5666)

Fixes:
 * Password prompt is shown time-to-time when svn:externals present even if "save" option specified (SBV-6307)
   + special thanks to Lira Olavo, CARASSO Felipe

 * Incompatibility between svn:1.4.3 and svn:1.4.4 working copies (SBV-5630)
   + special thanks to Fischer

 * SaveProjectMeta operation copied lot of needless files (SBV-6245)
   + special thanks to Michal Staruch
 
 * Share Projects operation fails with new repository location (SBV-6094)
   + special thanks to Alexander Wahl (synchronity GmbH)

 * NPE in Share Projects operation (SBV-6180)
   + special thanks to Michel, Marko Korhonen

 * NPE in RepositoryContentProvider when repository is not accessible (SBV-6045)
   + special thanks to Dennis Vredeveld

 * Problems with class import when using Subversive API (plug-in is incorrectly packaged) (SBV-6033, bug 204421)
   + special thanks to Matthias Erche (forum member), Alon Peled, Nikolaos Tsanakas, Yaron Mazor

 * NPE in HistoryView when it is being initialized (SBV-6063)
   + special thanks to Jens Gabe, Mark Homan

 * Messages are shown in Change Set's mode only if Change Set's enabled before synchronize with repository is started (SBV-6032)
   + special thanks to Vladimir Lapacek (forum member) 

 * Disallow error reporting when status cache load is cancelled (SBV-5877)
   + special thanks to Belousov Eugeny

 * "Negative revision number" for quick-diif annotate over empty file (SBV-6314)
 * Deleted projects detection time-to-time fails (SBV-6311)
 * Add validation in the plug-in preferences (SBV-6183)
 * ClassCastException when importing project from SVN (SBV-4513)
 * Disallow error reporting for SaveProjectMetaOperation (SBV-6113)
 * ClassCastException if working copy is damaged (SBV-5906)
 * Exception when hotkey is used without selection (SBV-5944)
 * svn:externals browse in SVN Repositories view fails if whitespace is present between revision number and revision key (SBV-5943)
 * Provide user with the correct notification if the selected client library cannot be loaded (SBV-6061)

--------------------------------------------------------------------------------

Version 1.1.7 [23 August 2007]

Features:
 * Browse svn:externals in SVN Repositories Explorer [apply patch] (SBV-5641)
   + special thanks to contributor Rob Clark

Fixes:
 * Compare on renamed files fails (bug 188306)
   + special thanks to Marko Schulz

 * {Date} tag in label decoration is always showing date in european standard (SBV-5593)
   + special thanks to George Michelson

 * Credentials prompt is always shown with the Native JavaHL client (SBV-5625)
 * Apply SVN Kit client library fixes (SBV-5626)
 * Problems in the Subversive help plug-in (SBV-5244)

--------------------------------------------------------------------------------

Version 1.1.6 [15 August 2007]

Features:
 * Move localization into the separate feature (SBV-5562)
 * Subversive help plug-in improvements (SBV-5244)

Fixes:
 * [package explorer] Should Collapse MT Parent Packages in Hierarchy Presentation (bug 189976)
   + special thanks to Adam Cabler, Michael Valenta

 * Subversion 1.1.5 breaks my PKI usage (SBV-5560)
   + special thanks to Chris West

 * Incorrect peg revision specified for "Add Revision Link" action (SBV-5522)
   + special thanks to Chris West

 * The "Tip for improvement form" needs work (SBV-3663)
   + special thanks to Ken Geis

 * Projects inside Projects not showing incoming changes (SBV-5547)
   + special thanks to crashedworld (forum member)

 * Incorrect replacement of file:// to file:/// (SBV-5532)
   + special thanks to Marcel Albert

 * Access violation in libsvnjavahl-1.dll (Revert binary to version 1.4.3) (SBV-5449)
   + special thanks to Carolin Koehler

 * Repository locations are lost when Eclipse IDE is crashed with "PermGen space: OutOfMemory" error (SBV-5460)

--------------------------------------------------------------------------------

Version 1.1.5 [31 July 2007]

Fixes:
 * Resources cannot be added to source control with SVN Kit client (SBV-5376)
   + special thanks to Erik Dick, Mark Smithson, Denis Souza, akg-i, 
   
 * NPE when synchronizing empty working sets with repository (SBV-5353)
   + special thanks to Carlo Teubner, Robert Einsle, Lubomir Marinov
 
 * Synchronous server access freezes eclipse (SBV-5428)
   + special thanks to Hans-Christoph Wirth

 * Create Subversive help plug-in [resolving help plug-in issues] (SBV-5244)
 * "No changes found" message when comparing two files with different names on repository (SBV-5426)
 * Add to working set does not work when "Find Projects" is selected in the Checkout wizard (SBV-5424)
 * Invalid radio button selection on the first page of Share Projects wizard (SBV-5420)

--------------------------------------------------------------------------------

Version 1.1.4 [27 July 2007]

Features:
 * Apply french translation patch sent by Prophessi - SD-mdA (SBV-5291)
   + special thanks to contributors Prophessi - SD-mdA and Stephane DUCAS, Victoria Anghel, Imed Mami, Sandy Lescaudron

 * Option to switch off deleted projects detection (SBV-5197)
   + special thanks to Muchu (forum member)

 * Adding projects to synchronized working set's (SBV-5198)
   + special thanks to chrisahn (forum member)

 * Sort repository locations in the Repositories tree (SBV-5199)
   + special thanks to chrisahn (forum member)

 * Create Subversive help plug-in (SBV-5244)

Fixes:
 * NPE in AbstractSVNTeamAction under Eclipse 3.3 if selection is empty (SBV-5232)
   + special thanks to Stanislaw Osinski, Mikael Uvebrandt

 * Command conflict messages under Eclipse 3.3 (SBV-5208)
   + special thanks to Will Horn

 * NPE in Show History operation with Native JavaHL client (SBV-5179)
   + special thanks to Alexey

 * NPE in Quick-diff based annotation under Eclipse 3.3 (SBV-5183)
 * NPE in WorkingSetDecorator under Eclipse 3.3 (SBV-5258)
 * NPE when Show History/Show Annotation called from Synchronize View for deleted file (SBV-5311)

--------------------------------------------------------------------------------

Version 1.1.3 [13 July 2007]

Features:
 * Add SVN menu and toolbar button (SBV-2501)
   + special thanks to contributor Rene Link
   + special thanks to Marcel Schulte, Daniel Winterstein, Bjorn Schorre

 * Add global shortcut keys for SVN actions (SBV-3494)
   + special thanks to contributor Rene Link
   + special thanks to Thomas Bayen, Stig Kleppe-Jorgensen

 * Support Mylar to Mylyn project name change (SBV-4971)
   + special thanks to Jim Lombardo, Omry Yadan, Nikola Milutinovic, Kevin Baughman, Antonel Pazargic

 * Check compatibility with Eclipse 3.3.RC3 IDE (SBV-4973)
 * Use latest Subversion binaries (SBV-5045)
 * Use SVN Kit 1.1.2 binaries (SBV-5035)
 * Use open-source JavaMail version (1.4) (SBV-4986)
 * Add option to switch off console pattern matcher (SBV-4761)

Fixes:
 * Usage of disposed font in the History View (SBV-5048) 
   + special thanks to Jorg von Frantzius
   
 * Workaround for the deadlock bug in the Eclipse IDE console (194456) 
   + special thanks to Rafael Chaves
   
 * Remove the annoying dialog of resource history (Eclipse.org, Bug #188311)
   + special thanks to Marko Schulz

 * NPE in SaveProjectMeta operation (SBV-4871)
   + special thanks to Karl Godel

 * Zend Technologies patch: fixes deadlock problem in SVNTeamPlugin activation (SBV-4589)
   + special thanks to Zend Technologies
 
 * NPE in SVN Properties when view is disconnected in background thread (SBV-4869)
 * Negative revision number in Show Annotation operation (SBV-4179)
 * BadLocationException in "Add hyperlink to console" operation (SBV-4421)
 * NPE in "Get File Content" operation on files without extensions (SBV-5094)
 * Cache incorrectly filled after case-sensitive rename on Windows-based platforms (SBV-5100)

--------------------------------------------------------------------------------

Version 1.1.2 [28 April 2007]

Features:
 * Create Subversive SDK (SBV-4329)
   + special thanks to Yaron Mazor

 * Make resources clickable in the SVN Console (SBV-2709)
   + special thanks to Vladimir Lapacek (forum member)

Fixes:
 * Speedup Pattern's usage (SBV-4396)
   + special thanks to contributor Gabor Liptak

 * peg revisions for compare operation (SBV-4397)
   + special thanks to contributor Pavel Zuev

 * ClassCastException in Show History View operation (SBV-4007)
   + special thanks to Epichler, Volker Berlin, Alessandro Damiani, Bruce Alspaugh, Alan MacKenzie
 
 * NPE in Show History View operation (SBV-4088, SBV-4047)
   + special thanks to Bjorn Voss, Tom Allantonie, Paolo Vedovato, Omry Yadan, J.Ramsdale, Tom Hensel
 
 * Widget is disposed exception in History View (SBV-4079, SBV-4374, SBV-4082)
   + special thanks to Uwe Peuker

 * NPE in Subversive integration for Mylar (SBV-4380)
   + special thanks to Thomas Spiessens (forum member) 

 * SVN History implementation does not respect Local History (SBV-4204)
 * ClientException error code should be copied to ClientWrapperException (SBV-4362)
 * "Team->Copy To" action does not allow copying into non-versioned folders if "Keep History" is not selected (SBV-4402)

--------------------------------------------------------------------------------

Version 1.1.1 [6 April 2007]

Features:
 * Integration with Eclipse 3.2 History View (PLC-1111)
   + special thanks to eu

 * Revert or delete any file on the commit screen (SBV-2621)
   + special thanks to Gabor Liptak

 * Eclipse 3.2 IFileHistoryProvider interface should be implemented (SBV-3886)
   + special thanks to Armin Bruckhoff
 
 * Enhance Mylar integration (SBV-3865)
   + special thanks to Eugene Kuleshov

 * Copy/paste from SVN history (SBV-2655)
   + special thanks to Felipe Carasso

 * Remove unversioned files while reverting (SBV-3230)
   + special thanks to Reinhard Brandstaedter

 * Refine project dependencies (move JDT dependency to extension point)(SBV-2687)
   + special thanks to Lothar Werzinger, benza (forum member)

 * Allow users to define --ignore-ancestry option (SBV-3721)
   + special thanks to mburns (forum member)

 * Place to specify the SSH port (SBV-2665)
   + special thanks to Mike De Haan

 * Proxy tab is missing when non-default client selected (SBV-3720)
   + special thanks to Benjamin Zeiss
 
 * Disable immediate switch while branch/tag from WC if selected resources contains added but not committed resources (SBV-3854)

Fixes:
 * Share existing projects under Linux rewrites local changes (SBV-3722)
   + special thanks to Vincent Munier

 * "Operation is cancelled" dialog. This is a GUI blooper. No dialog like this should come up. (SBV-3714)
   + special thanks to Adam Kiezun, Omry Yadan

 * Mark As Merged failure (SBV-3898)
   + special thanks to A. Fachat, Lars Vogel, Kannky, A. Schmidt

 * Subversive 1.1.0 with SVN Kit 1.1.1 not working properly with PKI (SBV-3813)
   + special thanks to Chris West

 * "Update To" silently reverts all changes (SBV-2418)
   + special thanks to Hochsteger Andreas (OI&T V)

 * Incorrect team menu enablement (SBV-3732)
   + special thanks to Fredy
 
 * Widget is disposed exception (SBV-3910)
 * Projects names are displayed incorrectly while Checkout As with Find project option (SBV-3872)
 * Set property is not applied recursively to added but not comitted resources (SBV-3916)
 * Deletion of svn:externals property processed incorrectly (SBV-3936)
 * Branch/tag misbehaviour (SBV-3961)
 * Setting svn:ignore property is not reflected properly (SBV-3977)
 * NPE in History View if project is deleted outside Eclipse IDE (SBV-3987)
 * NPE while connecting to project with damaged SVN-metainformation (SBV-3990)
 * Reduce temporary files usage when opening files from repository (SBV-3994)

--------------------------------------------------------------------------------

Version 1.1.0 Release [6 March 2007]

Features:
 * Externals freezes in TAG (SBV-3698)
   + special thanks to Olavo Lira, Felipe Carasso

 * Internationalization. Prepare all string resources to be internationalized (PLC-276)

Fixes:
 * Wrong internationalization (SBV-3604)
   + special thanks to Diego Pires Plentz, Martin Gilday, Ken Geis

 * Subversive seems to be creating extra displays which are unsupported on SWTon GTK (SBV-3691)
   + special thanks to Michael R. Head

 * Duplicated objectContribution IDs (SBV-3658)
   + special thanks to oliviert (forum member)

 * Conflict editor failed to open (SBV-3711)
 * "Path is not a working copy directory" error with Native JavaHL client (SBV-3557)
 * NPE while 'Check out as' with option 'Find projects in the subdirectories of the selected resources' (SBV-3626)
 * NPE in CheckoutAs Wizard while choosing "Checkout as folder" option and perform finish (SBV-3726)
 * NPE while repair project's svn meta in "Repair Project" dialog (SBV-3724)
 * NPE in HistoryView (SBV-3671)
 * Check out project as folder into existing project misbehaviour (SBV-3625)
 * Checkout as folder rewrites svn:externals property (SBV-3683)
 * Branch/Tag from working copy operation creates branch/tag from repository resources (SBV-3692)
 * Share tracker project action have visual defects + exception in the end (SBV-3499)

--------------------------------------------------------------------------------

Version 1.1.0.RC6 [23 February 2007]

Features:
 * Text decoration improvments (SBV-3457)
   + special thanks to contributor Dann Martens
   
 * Japanese Localization: apply provided patch (SBV-3598)
   + special thanks to contributors Takashi Okamoto, Yae Suzuki
   
 * Export/Import Subversive preferences: apply provided patch (SBV-3599)
   + special thanks to contributor Rene Link

 * Import and Export automatic properties (SBV-3485)
   + special thanks to Gregory Gerard

 * Add ability to enter target resource name in "Copy To" action (SBV-3417)
   + special thanks to Stefan Zeiger

 * Include SVN Kit 1.1.1 (SBV-3490)
 * Include latest Subversion binaries (1.4.3) (SBV-3492)
 * API: Checkout into existing projects like in CVS (PLC-1156)

Fixes:
 * NPE in Interactive Merge UI (SBV-3537)
   + special thanks to contributor Rene Link

 * Checkout into the folder which is a symbolic link failed (SBV-3540)
   + special thanks to Krystian Nowak
 
 * Problems with SVN ignore (SBV-2842)
   + special thanks to Piet Ritzen

 * API: Fetching file content in synchronize view is not cancellable (SBV-2867)
   + special thanks to Adam Kiezun

 * Allow semicolon-separated properties in "Auto-props" settings (SBV-3506)
   + special thanks to Gregory Gerard

 * NPE if synchronize with repository completely failed (SBV-3476)
   + special thanks to Rostronic

 * "URL is not related to the repository" for externally relocated projects in RC5 (SBV-3459)
   + special thanks to Leigh Warren

 * Subversive does not see command-line svn switch (SBV-3481)
   + special thanks to irobertson (forum member) 
 
 * SSH Port Problem (SBV-3434)
   + special thanks to Nils Grabbert (forum member)

 * RestoreProjectMetaOperation shouldn't report file system security exceptions (SBV-3483)
   + special thanks to Valerio Scuderi

 * Not all temporary files are deleted (SBV-3477)
   + special thanks to Lukjel

 * Refactor fails when refactoring one of top packages (SBV-3498)
   + special thanks to zartc (forum member), cmenzel (forum member), Diego Pires Plentz, Ken Dobson, Richard Musiol
 
 * "Cannot non-recursively commit a directory deletion" error with native client (SBV-3497)
   + special thanks to Paul

 * "Unrecognized node kind" exception while synchronizing with repository (SBV-3161)
   + special thanks to Roberto Gonzalez, Ben Christensen, John Francis, Renato Bonomini, Thomas Jachmann
  
 * Share multiple projects wizard misbehaviour (SBV-3525)
 * Repository location URL cannot be changed to non-valid even if no project attached (SBV-3538)
 * Fetch Content Operation Failure (SBV-3482)
 * NPE if resources is inaccessible due to some reason (f.e. deleted in background thread) (SBV-3450)
 * Restore Default Preferences operation cannot be canceled (SBV-3570)
 * Deleted resources overlay image is not shown if the resource that is scheduled for deletion is external resource (SBV-3583)
 * All the preferences should be saved in the UI plugin store (SBV-3571)

--------------------------------------------------------------------------------

Version 1.1.0.RC5 [2 February 2007]

Features:
 * API: Multiple project share required (SBV-2531)
   + special thanks to Peter M. Murray, Alouf, jtonic, mgcinoz (forum members)

 * API: Multiple projects merge (SBV-1955)
   + special thanks to Peter M. Murray, Alouf, jtonic, mgcinoz (forum members)

 * API: Multiple projects switch (SBV-3398)
   + special thanks to Peter M. Murray, Alouf, jtonic, mgcinoz (forum members)

 * Add Open With submenu to HistoryView pop-up menu (SBV-3439)

Fixes:
 * Allow branching/tagging from Package Explorer even if resources are modified (SBV-3284)
   + special thanks to Sibylle Peter

 * Widget is disposed in update operation (SBV-3360)
   + special thanks to Crumley, Christopher Bradford

 * Create Patch: at least one revision must be local for a pegged diff (SBV-3406)
   + special thanks to Adam Kiezun, WhiteFang (forum member)
   
 * svn:externals commit behavior (SBV-3433)
   + special thanks to Lorenzo (forum member)

 * NPE in Share Project operation (SBV-3271)
 * Apply Recursively Multiple Properties (SBV-3420)
 * Export Operation Failure (SBV-3419)

--------------------------------------------------------------------------------

Version 1.1.0.RC4 [20 January 2007]

Features:
 * API: Improve IMailSettingsProvider extension point (SBV-3234)
   + special thanks to Bjorn Schorre

 * Show created report when sending fails (SBV-2615)
   + special thanks to Ruediger Gubler, Andreas Mayer, Peter Riishoj Brinkler

 * Add UI for specifying auto-props (like in svn config file) (SBV-3237)
 * API: Check package layout and refactor if required (SBV-3235)

Fixes:
 * OutOfMemoryError throwed for very large projects (SBV-3221)
   + special thanks to Samyem Tuladhar, Leigh Warren

 * NPE in RemoteStatusOperation (SBV-3275)
   + special thanks to Paul Kendall

 * Infinite loop while caching SVN meta-information (SBV-3258)
   + special thanks to Felipe Carasso, Daniel Hoh, szeiger (forum member), apetrov (forum member), WhiteFang (forum member), Alouf (forum member), jtonic (forum member), asaremba (forum member)

 * Exception in org.eclipse.team.svn.core.SVNTeamPlugin.start() (SBV-3168)
   + special thanks to Fabio Zadrozny

 * 404 Not found from time to time (SBV-3175)
   + special thanks to Robert Einsle

 * NPE while caching SVN meta-information (SBV-3206)
   + special thanks to Jon

 * ActivityCancelledException sometime processed by mail reporter (SBV-3197)
   + special thanks to Martin Brehm, Dean, rzeznic, Kurt Zettel

 * NullPointerException in RepositoryPropertiesComposite (SBV-3269)
 * Merge does not work for resources checked out with svn:externals property (SBV-3236)
 * Exceptions when file replaced with folder without file deletion committing (SBV-3340)
 * Team->Set Property action works incorrectly (SBV-3338)
 * Annotation does not work for incoming additions (SBV-3327)
 * Team menu does not work properly (SBV-3315)

--------------------------------------------------------------------------------

Version 1.1.0.RC3 [12 January 2007]

Features:
 * Browse button in the simple mode of the Branch/Tag dialogs (SBV-3149)
   + special thanks to Alouf (forum member)

 * Allow quick switch between revisions during compare operation (SBV-1930)
   + special thanks to Chris Melikian, Francois Fernandes

 * Support svn:externals property (PLC-445)
   + special thanks to Bjorn Schorre, Thomas Jachmann, Reinhard Brandstadter, Andreas Boeckler

 * Add ability to navigate up to parent level in repository browser (SBV-3042)

Fixes:
 * Excessive work in history view (SBV-3145)
   + special thanks to contributor Rene Link

 * Incorrect old SVN clients filtering (SBV-3144)
   + special thanks to carfield (forum member)

 * NPE while synchronizing with repository (SBV-3088)
   + special thanks to Roland Oldenburg

 * Fix bugtraq integration bug (when bug id is empty) (SBV-3051)
   + special thanks to contributor Takashi Okamoto

 * Errors are suppressed in time of commit operation with SVN Kit selected (SBV-2767)
   + special thanks to Tom Hensel
 
 * NPE when svn:externals working copy is damaged (SBV-3173)

--------------------------------------------------------------------------------

Version 1.1.0.RC2 [22 December 2006]

Features:
 * "Stop revision can not be less than start revision" validation in Merge dialog has no sense (SBV-3030)
   + special thanks to Judith Burgstein

 * Allow switch to be performed not only for projects but for folders and files too (SBV-2825)
   + special thanks to L.Simon

 * Show versioned resources at the top of the list when doing a commit (SBV-2982)
   + special thanks to Chris Dail

 * Integrate Eclipse 3.2 table sorting with our current solution (SBV-2281)
   + special thanks to Andreas Mayer

 * Support of BugTraq properties (SBV-1619)
   + special thanks to Christopher Pierce (forum member)

 * Make Mylar integration compatible with Mylar 1.0.0 version (SBV-2907)
   + special thanks to Eugene Kuleshov

 * Show missing resources status separatelly in the Commit Dialog and warn before update if missing resources was found (SBV-2768)
 * Show all available information about repository resource in Repository Tree using tooltips (SBV-3022)
 * Add selected resources count label at the right bottom corner of the commit dialog (SBV-3024)

Fixes:
 * Change "Subversive" submenu item position in the Eclipse IDE Help menu (SBV-2437)
   + special thanks to Cristinel Angheluta, Daniel Spiewak

 * Location is copied after editing its properties (SBV-2940)
 * Testing and bug fix for the 1.1.0.RC1 Synchronize View (SBV-2937)
 * NPE in HistoryView on restricted folders (SBV-3009)

--------------------------------------------------------------------------------

Version 1.1.0.RC1 [08 December 2006]

Features:
 * Paste selected resource names to the commit message in Commit Dialog (SBV-2438)
   + special thanks to StefanC (forum user)

 * Add ability to show the immediate parent, direct child of (...) and full path up to root for the tag and branch in the project label (SBV-2805)
   + special thanks to Dann Martens (contributor), Alouf (forum member)

 * Allows to select revision manually in "Add Revision Link" dialog (SBV-2785)
   + special thanks to J S Green (forum member)

 * Support unified method of multiple and single branch/tag operations (SBV-2074)
   + special thanks to Thomas Spiessens (forum member), Felipe CARASSO

 * Include the latest native Subversion binaries and the latest JavaSVN (SVNKit) (SBV-2766)
 * Make Mylar integration compatible with the latest Mylar version (SBV-2907)
 * Introduce crash recovery API for the SVN Team Core module (SBV-2856)

Fixes:
 * New files are added and committed even when they are unchecked (SBV-2803)
   + special thanks to jmiller (forum member)

 * Slow down while synchronyzing with repository (SBV-2787)
   + special thanks to Panagiotis Korros (forum member), Adam Kiezun, afasano (forum member)

 * FW: SVN History - Compare shows svn rev tag wrong version (SBV-2900)
   + special thanks to David Koontz, Marco Perrando

 * NPE in SVNFolderListener (SBV-2875)
   + special thanks to Laurent Gaches

 * NPE in Checkout As wizard in case of background project disconnection (SBV-2846)
   + special thanks to Marcello Ceschia (Univerty of Leipzig)

 * Excessive repository callbacks after Eclipse restart (SBV-2658)
   + special thanks to Thomas Feldmann

 * Get Repository Folder Children operation failure (SBV-2534)
 * Error when stopping version 1.1.0.M8 (SBV-2714)
 * Remove leading slashes in the Resource Selection composite (SBV-2831)
 * SVN Location change unconditionally causes relocate of existing shared projects (PLC-1066)
 * Content presence detection works incorrectly for single/multiple project layout in Share wizard (SBV-2827)
 * NPE in Info operation when project is closed/disconnected from source control in background thread (SBV-2889)
 * NPE while caching resources (SBV-2886)

--------------------------------------------------------------------------------

Version 1.1.0.M9 [17 November 2006]

Features:
 * Remember size of dialog for comparison of revisions and allow to maximize it (SBV-2725)
   + special thanks to Andreas Mayer

 * Enable synchronizing and comparing with previous revisions for the copied files (SBV-2485)
   + special thanks to Tomas Normark, Nimda Cinatas (forum users)

 * Contribute SVN Project Reference Analizer for Project Set pligin (SBV-2053)

Fixes:
 * NPE in Compare operation (SBV-2558)
   + special thanks to Mark Cooke, Samuel Monsarrat, Pavel, Samant Maharaj, Mark Stralka, Dan Harmer, Patrick, Ignasi Marimon-Clos, Harlan Iverson, Samyem, Stefano Bagnara, Leonid Vasilenko, Barry Kaplan, J. Henne, Dirk, Lee Mercury, Tushar Pokle, B.O.Smievoll, Ben R Vesco, Lars S.-Helldorf

 * Projects are sometimes disconnected after eclipse restart (SBV-2576)
   + special thanks to Gordon, Uwe Peuker, Stefan Wurzinger, tom hensel <th@macina.com>

 * Initialize Project operation failure (SBV-2628)
   + special thanks to Michael Goddard

 * Native JavaHL does not support null as username or password (SBV-2555)
   + special thanks to Uwe Peuker

 * NPE in Get Resource List operation Failure Report (SBV-2569, SBV-2570)
   + special thanks to Lee Mercury, Alex Nistico, A. Antivero, Andy Czerwonka, Euler, Robert Sanders

 * Share sub-project fails (SBV-2604)
   + special thanks to Joe Toth

 * Checking out using New Project Wizard works incorrect (SBV-2536)
   + special thanks to Arakasi, mortensi (forum users) 

 * svn:ignore does not work in Subversive 1.1.0.M8 (SBV-2550)
   + special thanks to alexandrupopescu, afasano (forum members), Jon Stevens, Andreas Boeckler 

 * NPE in Share Project operation (SBV-2546)
 * Compare with revision: IllegalArgumentException: negative revision numbers are not allowed (SBV-2549)

--------------------------------------------------------------------------------

Version 1.1.0.M8 [27 October 2006]

Features:
 * Support of Subversion 1.4 working copy format (SBV-2450)
   + special thanks to Ian Rowlands, Stefan Chyssler, Stefan Wurzinger, Tom Hensel

 * Add file protocol support (SBV-2527)
   + special thanks to Thorsten Vitt

 * Improve repository location layout (fonts, coloring, exceeding nodes) (SBV-2519)
   + special thanks to Pavel Zuev

 * Allow copying without history for "Copy To" action (SBV-2525)
   + special thanks to Reinhard Brandstadter

 * Allow to link History and Property Views with Synchronize Compare editor (SBV-2509)
   + special thanks to Hubert Grininger

Fixes:
 * Checking out using New Project Wizard works incorrect (SBV-2536)
   + special thanks to Arakasi (forum user), Mortensi (forum user) 

 * Define peg revision for actions from Team menu (SBV-2502)
   + special thanks to Marcel Schulte

 * Test JavaHL Client usage, fix problems if found (SBV-2406)

--------------------------------------------------------------------------------

Version 1.1.0.M7 [20 October 2006]

Features:
 * Automatic recognition of repository structure (TRUNK, BRANCHES, TAGS) instead of current static layout (SBV-2389)
   + special thanks to Diego Ernesto Malpica Chauvet, Felipe Carasso

 * Respect project repository layout in "Create Branch", "Create Tag" operations (SBV-2388)
   + special thanks to Diego Ernesto Malpica Chauvet, Felipe Carasso

 * Compare file on double-click in commit and revert dialogs (SBV-2408)
   + special thanks to Dario Lopez-Kasten

 * Show text and property statuses separatelly in the resource selection dialog (PLC-640)

Fixes:
 * NPE in commit if repository is inaccessible (SBV-2476)
   + special thanks to Roman Bruggisser, Dario Lopez-Kasten

 * Add validation to comment view of "Problem Report" and "Tip for Improvement" dialogs (SBV-2498)
   + special thanks to Hubert Grininger

 * Incorrect behaviour of "Single Project" layout when sharing project (project shared into branches instead of trunk) (SBV-2445)
   + special thanks to Kristoffer Peterhansel

 * Enable checkout of svn:externals (SBV-2497)
   + special thanks to Hubert Grininger, Reinhard Brandstadter

 * ClassCastException in experimental merge (SBV-2475)
   + special thanks to Stas, Alexandre, Andrew Bate, Doug Clinton, Lee Mercury

 * NPE in Resources Changed operation (SBV-2503)

--------------------------------------------------------------------------------

Version 1.1.0.M6 [13 October 2006]

Features:
 * Define an option to provide case-sensitive as well as case-insensitive sort (SBV-2363)
   + special thanks to candyman (forum user)

 * "expand all" button in synchronize view (SBV-2392)
   + special thanks to Pavel

 * Place a splitter into Commit Dialog (SBV-2431)
   + special thanks to vlp (forum user)

 * Reconnect projects which metainformation is dropped (PLC-10750)
 * Add Subversive menu items to the working sets team menu (SBV-2414)

Fixes:
 * Compare two files from repository shows inverted labels (SBV-2466)
   + special thanks to Ken Geis

 * Temporary files should be deleted (SBV-2442)
   + special thanks to Pavel Zuev

 * Optimize memory usage and speed up operation performance (PLC-1451)
   + special thanks to Clint Dovholuk, Daniel Spiewak, Bart Elberg, Richard Vanhook, Samuel Charron, Marvin Toll

 * NullPointerException in Override and Update for restricted folders (SBV-2447)
 * SWT error in Annotate View when annotated file is empty (SBV-2448)
 * 'Select All' and 'Deselect All' button work incorrect at resource selection panels (SBV-2446)
 * NullPointerException in resource selection panel (SBV-2429)
 * NullPointerException in "Share Project" wizard when "Single Project" layout selected (SBV-2428)
 * "Access denied" in Override And Update operation (SBV-2424)
 * Project names are obtained for two times while checkout (SBV-2426)

--------------------------------------------------------------------------------

Version 1.1.0.M5 [29 September 2006]

Features:
 * Integration with Mylar (PLC-1099)
   + special thanks to jae (forum member)
    
 * Add ability to choose desired revision by hands (not from the list) (SBV-2362)
   + special thanks to candyman (forum member)
   
 * Add ability to create an unified diff on any two revisions (SBV-2364)
   + special thanks to candyman (forum member)
 
 * Provide integration interfaces for Buckminster project (SBV-2412)
 * Label decorations are not propagated to working sets (PLC-438)
 * Check out to Working Set (PLC-901)
 * Allow non-precise menu enablement in case of large projects (SBV-2417)

Fixes:
 * Compare from Repository View doesn't work on renamed files (SBV-2416)
   + special thanks to Laszlo Varadi
 
 * "Recources Changed" task frequently blinks in the right bottom IDE corner (SBV-2401)
   + special thanks to Jorg von Frantzius, Dovholuk, Clint
 
 * Spelling error in the menu item "Help > Subversive > Send Tip for Improvement" (SBV-2403)
   + special thanks to Yesudeep J Mangalapilly
 
 * JavaSVN reports statuses not only for requested resource but for it parents also [Remove debug exception] (SBV-2233)
   + special thanks to Francois Struman
 
 * Unknown node kind exception in time of update operation (SBV-2365)
   + special thanks to Michael Mauthner

 * NullPointerException in time of add to SVN operation (SBV-2368)
   + special thanks to Matias Rodriguez
   
 * Poping up project context menu is very slow (PLC-485)
 * Memory leak in commit dialog (SBV-2397)
 * Find/Checkout as | Find disabled when called over .polarion folder in polarion project. (SBV-2355)
 * NullPointerException in interactive merge implementation (SBV-2386)
 * NullPointerException in time of share project with "multiple" layout selected (SBV-2400)

--------------------------------------------------------------------------------

Version 1.1.0.M4 [15 September 2006]

Features:
 * Add 'Branch from Revision' and 'Tag from Revision' actions to the History View (SBV-2352)

Fixes:
 * Problem with specifying user name directly in URL for svn+ssh protocol (SBV-2383)
   + special thanks to Bronzegraf, reavertm (forum members)
   
 * Run Compare Operation in background (SBV-2366)
   + special thanks to candyman (forum member)
   
 * Poping up project context menu is very slow (PLC-485)
 * Enhance JavaSVN diffStatus() function behavior (SBV-2382)

--------------------------------------------------------------------------------

Version 1.1.0.M3 [8 September 2006]

Features:
 * Add an ability to edit share project commit message (SBV-2347)
   + special thanks to bugmenot (forum user)

 * Open system editors for repository files (SBV-2351)
   + special thanks to Chris Melikian

 * Support of the monolitic layout in share operation (SBV-2308)
   + special thanks to Ken Geis

 * Support of Quick Diff feature (PLC-1147)
   + special thanks to Benjamin Pasero

 * Add 'Link With Editor' button to the History View toolbar (SBV-2325)
   + special thanks to Adam Brod

 * Implement built-in annotation [like CVS "based on Quick Diff"] (SBV-2338)
 * Provide ability to send bug report or tip for feature directly from Subversive UI (SBV-2346)
 * Create 'Password Management' preferences page (SBV-2341)
 * Create Property View and implement 'Link with Editor' feature for it (SBV-2329)
 * AnnotationView improvement [merge lines with the same revision into on bundle] (PLC-286)

Fixes:
 * Deadlock with Subversive Plugin (SBV-2349)
   + special thanks to rauar (forum user), Michael Valenta

 * NullPointerException when project is deleted in time of internal cache refresh (SBV-2350)

--------------------------------------------------------------------------------

Version 1.1.0.M2 [1 September 2006]

Features:
 * Add an ability to choose if double-click opens or compares files in the History View (SBV-2326)
 * Add 'Compare Current with Revision' menu item to the History View pop-up menu (SBV-2327)
 * Interrelate items in drop-down menu and toolbar in the History View (SBV-2330)

Fixes:
 * Apply patch: change wrong "General" tab name to correct "Advanced" in repository settings validation (SBV-2313)
   + special thanks to contributor Ken Geis
 
 * NullPointerException in AbstractDecoratorWrapper (SBV-2312)
 * Modified resources are not decorated with specified font and colors if they are locked (SBV-2314)
 * The folder cannot be created in the location root if trunk/branches/tags are disabled (SBV-2315)
 * 'Save password' checkbox is always checked after browsing repository (SBV-2317)
 * FileNotFoundException while Get Contents action is performed for needs-lock file (SBV-2322)

--------------------------------------------------------------------------------

Version 1.1.0.M1 [23 August 2006]

Features:
 * Avoid subversive activation when there is no project shared with subversive (SBV-2288)
   + special thanks to contributor Panagiotis Korros
 
 * Commit sets like in CVS (PLC-1097)
   + special thanks to contributor Alessandro Nistico
 
 * Multiple resources properties edit (SBV-2011)
   + special thanks to Erik (forum user)
 
 * Customize resource text colors (PLC-1352)
   + special thanks to Daniel Spiewak
 
 * Add links to "Colors and Fonts" and "Label Decorations" pages on SVN Label Decorations page (SBV-2291)
 * Improve SVN Console (SBV-2206)

Fixes:
 * diffStatus() function reports incorrect URL for moved resources (SBV-2248)
   + special thanks to Adam Brod, Leonardo Barros, BalkanBoy (forum user), vsizikov (forum user)

 * Plugin doesn't like semicolons in resource names (SBV-2294)
   + special thanks to Ryan Levering

 * 'Compare with revision' doesn't work for copied/moved resources (SBV-2287)
   + special thanks to BalkanBoy, vsizikov (forum users)
 
 * NullPointerException in CheckoutAs wizard (SBV-2283)
 * 'Needs lock' files cannot be modified right after they are locked by callback (SBV-2289)
 * Short URL decorator is not correctly displayed in preview (SBV-2290)
 * Ignored resources are decorated as new (SBV-2293)

--------------------------------------------------------------------------------

Version 1.0.2 [19 August 2006]

Features:
 * Decorate files which are read-only and need lock (SBV-2226)
   + special thanks to simas, ftorres (forum users), Chris West
 
 * Import from SVN Wizard (PLC-296)
 * Improve SVN Console (SBV-2206)
 * Show authentication realm in callback dialog (instead of location URL) (SBV-2236)
 * Add an ability to represent short url of a project in the package explorer (SBV-2235)
 * Automatic project share (SBV-2156)
 * Add 'Checkout subdirectories' option to the checkout wizard (SBV-2216)

Fixes:
 * Open Repository File operation: NullPointerException in AffectedPathsComposite (SBV-2085)
   + special thanks to Fabio Frumento
 
 * Bug in 1.0.1: Subversive reset editors font settings (SBV-2215)
   + special thanks to Theo Wilms
 
 * Check Out operation: Cannot create a directory (SBV-2200)
   + special thanks to D. Strauss, Marcus Bitzl, Barry Davies, Marcos Cesar de Oliveira
 
 * Update operation: Access denied (SBV-2164)
   + special thanks to biniobill, Runar Bjarnason
 
 * Auto properties support (SBV-2075)
   + special thanks to Georg (forum member)
 
 * Crippling SVN+SSH Bug (SBV-2203)
   + special thanks to Daniel Spiewak
 
 * Get Resource List operation: Unrecognized node kind (SBV-2037)
   + special thanks to Sandro Orlando, Christian, Jaime Ramos
 
 * Show Conflict Editor: ClassCastException while editing conflicts on a *.png files (SBV-2196)
   + special thanks to Brett Atoms
 
 * Check Out operation: Prefix string too short (SBV-2174)
   + special thanks to Dave Cameron

 * Improve composite operation performance (SBV-2242)
 * Project is automatically disconnected while upgrading FastTrack. (SBV-2173)
 * project share wizard - finish button should be dissabled in FastTrack (SBV-2222)
 * Merge preview panel becomes gray and empty after resizing (under Eclipse 3.0) (SBV-2237)
 * Get Resource List: NullPointerException in some complex cases (SBV-2232)
 * Improve progress monitoring for the operations in the History View and Property Editor (SBV-2218)
 * checkout projects with its tracker checkouts duplicate projects + project called ".polarion" (SBV-2194)
 * Malformed SVN console output during Rename Resource (SBV-2209)
 * Show original SVN "conflict" message when commit fails (SBV-2207)
 * Check Out operation fails when user checked out projects with the same name but in different case (SBV-2042)
 * Update does nothing if the project has been switched to the earlier revision (SBV-2034)
 * IMailSettingProvider has been changed (SBV-2193)
 * NPE in time of Override And Update operation (SBV-2176)

--------------------------------------------------------------------------------

Version 1.0.1 [28 July 2006]

Features:
 * SVN Console (SBV-1591)
   + special thanks to lithium (forum user), dcorbin (forum user), aochsner(forum user), patrek(forum user), markphip(forum user) 
   
 * Commit/synchronize dialog after share operation (PLC-1421)
   + special thanks to Daniel Spiewak
 
 * Copy change buttons should work in case of compare operations (SBV-1951)
   + special thanks to Panagiotis Korros
 
 * Add an ability to choose the method of project name selection while checkout (SBV-2147)
   + special thanks to Paul (forum user) 
   
 * Change File/Class headers with Eclipse standard (SBV-2154)
 * Moving JavaSVN to extension point (SBV-2135)

Fixes:
 * Workspace start Problem with IBM RSA 6.0.1.1 and Subversive (SBV-2139)
   + special thanks to Andreas Graesser

 * Quick fix for JavaSVN merge() problem (SBV-2158)
   + special thanks to contributor Tobias Bosch
 
 * WTP support: Checkout using new project wizard deletes .settings directory (SBV-2067)
   + special thanks to angelcervera (forum user) 
 
 * SVN+SSH: "Unknown authentication method" in JavaSVN SBV-2005
   + special thanks to CVD (forum user), Anton Fletcher

 * 'Resource does not exist' exception after updating incoming deletion (SBV-2171)
 * [Subversive] Report ID-Y6AUL - Import Team Project Set Operation Failure Report (SBV-2137)
 * Invalid thread access (SBV-2127)

--------------------------------------------------------------------------------

Version 1.0.0 Release [14 July 2006]

Features:
 * Enhance Add/Edit properties (SBV-2065)
   + special thanks to wusch (forum user)
   
 * Support of different merge modes (SBV-2069)
   + special thanks to yagee (forum user)

 * Add an ability to apply lock to the resourses recursively (SBV-2097)
 * Support conflicitng files editing (SBV-2079)
 * Implement standard JavaHL merge (SBV-2098)

Fixes:
 * Incorrect URL when only one file is merged (SBV-2101)
   + special thanks to Danny Mandel
   
 * NPE while synchronizing projects (SBV-2091)
   + special thanks to Kevin Ross, biniobill
   
 * Share Project operation: Negative revision number (SBV-2061)
   + special thanks to Chad Woolley
   
 * Bug in synchronize view after merge (SBV-1949)
   + special thanks to Clint Dovholuk
   
 * Can't relocate a project (SBV-2076)
   + special thanks to smonsarr (forum user)
   
 * Compare operation fails in complex case (SBV-2118)
   + special thanks to J.J. Kiers
   
 * WTP support: Checkout using new project wizard deletes .settings directory (SBV-2067)
   + special thanks angelcervera (forum user) 

 * Strange strings in decorators preference page (SBV-2064)
   + special thanks Panagiotis Korros
   
 * reduces memory consumption by 15% (SBV-2103)
   + special thanks to contributor Panagiotis Korros for provided patch
   
 * .svn folder is deleted by subversive (SBV-2102)
   + special thanks to contributor Panagiotis Korros for provided patch

 * NullPointerException in Annotate View (SBV-1818)
   + special thanks to Sébastien Sahuc
 
 * Enable Finish button on Share project (SBV-2056)
 * Revision '-1' is set to added resources in property editor title (SBV-2095)
 * NullPointerException in Get Remote Properties operation (SBV-2060)
 * Repository Browser decoration is not refreshed after 'Break lock' action (SBV-2072)
 * Checkout using 'New Project Wizard' should not suggest to overwrite existing project (SBV-2071)
 * Selecting repository location label works incorrect (SBV-2070)
 * Incomplete presentation of project URL's in 'Find / Checkout Projects As' wizard (SBV-2078)
 * 'Start development with' option for branch/tag actions doesn't work sometimes (SBV-2073)
 * Override and update doesn't work for new resources (SBV-2096)
 * NullPointerException in Add to SVN operation (SBV-1921)
 * Cannot change credentials for svn+ssh protocol (SBV-2115)

JavaSVN features (in cooperation with TMate team):
 * Add "force" option to SVNClientEx::merge() function (SBV-2049)

--------------------------------------------------------------------------------

Version 1.0.0 RC4 [30 June 2006]

Features:
 * Enhance properties support (SBV-1784)
   + special thanks to Erik (forum user)
 
 * Add menu item 'Add Revision Link' to the History View (SBV-2032)
 * Add getSelectedLogMessages() method to SelectRevisionPanel class (SBV-2038)
 * Add error and warning decoration to the resources in commit dialog (SBV-2059)
 * Add an ability to choose if the new resources should be selected in commit dialog or not (SBV-2058)

Fixes:
 * Problem adding property names with more than 1 ':' character. (SBV-2014)
   + special thanks to Alexis O'Connor
   
 * Set focus to password field when callback dialog is shown (SBV-2012)
   + special thanks to Chris West
   
 * ResourceException: A resource exists with a different case (SBV-2040)
   + special thanks to Maarten Meijer

 * Some entry fields information is not correctly passed to the operations (SBV-2013)
 * Create folder operation fails for the folders which are repository roots (SBV-2021)
 * 'Widget disposed error' after dialog is closed by 'Esc' and 'Ctrl+Enter' is pressed (SBV-2022)
 * Affected paths tree does not contain statuses information for some folders (SBV-2023)
 * Cannot create branch in the root of repository (SBV-2024)
 * 'Show history' action should be disabled in synchronize view for the deleted from repository resources (SBV-2025)
 * NullPointerException in decorators (SBV-2009)
 * Peg revision specified incorrectly for revision links (SBV-2026)
 * Incorrect highlight of current revision in case of repository resource history (SBV-2027)
 * Override and Update does not work for ignored resources (SBV-2028)
 * Refresh does not work on Repository View if same resource shown twice (SBV-2029)
 * Incorrect pop-up menu in case of file opened from repository. (SBV-2030)
 * Too big indention between controls on UI forms under Eclipse 3.0 (SBV-2031)
 * Current revision is not highlighted in histiory view after 'Update To' operation is performed (SBV-2035)
 * Relocate for the projects works incorrect if repository changes (SBV-2033)
 * Respect "conflicted" mark on working copy resource (SBV-1806)

JavaSVN fixes (in cooperation with TMate team):
 * java.lang.IllegalArgumentException: Negative time (SBV-1952)
   + special thanks to ngyen, yongyut
   
 * Get Resource List operation: ArrayIndexOutOfBoundsException (SBV-1934)
   + special thanks to Danny Mandel
   
 * Atomic commit fails for the projects checkouted from different repository locations (SBV-2007)

--------------------------------------------------------------------------------

Version 1.0.0 RC3 [16 June 2006]

Features:
 * Improve usage of Subversive together with external SVN clients (SBV-2006)
   + special thanks to pkorros (forum user)
   
 * Copy resource URL to clipboard (SBV-1931)
   + special thanks to Chris Melikian
   
 * Add an ability to submit all forms by pressing Ctrl+Enter (as it is in commit dialog) (SBV-1980)
 * HistoryView - properties(). Support view of revision properties. (PLC-283)
 * In History View operations should be executed in background (SBV-1953)
 * Move property view to editor area (PLC-613)

Fixes:
 * Timing out when URL is encoded (contains %20 entries etc.) (SBV-1978)
   + special thanks to Turadg Aleahmad
   
 * Compare repository resources failure (SBV-1970)
   + special thanks to Danny Mandel

 * NPE in Show Messages operation (SBV-1938)
   + special thanks to Larry Edelstein

 * ClassCastException in Subversive code (SBV-1932)
   + special thanks to Larry Colson

 * NPE in Compare Resource with Revision operation (SBV-1936)
   + special thanks to Gregory Gerard
   
 * Trunk, branches and tags default values are not stored if they are disabled while creating new location
   + special thanks to contributor Sergey Vasilchenko for provided patch

 * Export does not work if destination folder entered manually (not selected from picker) (SBV-1993)
 * Validate all UI forms layout and optimize their content if it's necessary (SBV-1981)
 * AssertionFailedException while closing Repository Browser (SBV-1964)
 * NPE while disposing AnnotateView (SBV-1990)
 * "Hide unrelated" option works incorrectly in case of moved/copied resources (SBV-1998)
 * Create Tags/Branches/Trunk does not work in some cases (SBV-1992)
 * NullPointerException in merge dialog (SBV-1973)
 * Override And Commit: NullPointerException (SBV-1977)
 * Separate SSL callback from the general one (SBV-1958)
 * Repository locations is not refreshed some time (SBV-1946)
 * Subversive doesn't allow underscore in repository host name. Add ability to support. (SBV-1943)
 * Delete operation: Errors occurred while refreshing resources with the local file system (SBV-1940)
 * ArrayOutOfBoundsException in HistoryView (SBV-1929)

--------------------------------------------------------------------------------

Version 1.0.0 RC2 [2 June 2006]

Features:
 * Add Break Lock operation to Repository View (SBV-1895)
 * Notification of Resource Selection Change  in ICommentDialogPanel (SBV-1882)
 * Remember & prefill comment message when "Cancel" is pressed in previous commit try (SBV-1803)
 * Incoming deletion for project should disconnect project from source control without meta-inforamtion deletion (PLC-1184)

Fixes:
 * Some time default editor is not opened if the editor registered to specific file type is not opened (SBV-1925)
   + special thanks to Robert r. Sanders
   
 * ConcurrentModificationException while changing repository location properties (SBV-1884)
   + special thanks to Tjedrzejczak
   
 * Missing import "org.eclipse.help" in feature.xml (SBV-1914)
   + special thanks to Christian Buggle
   
 * Override And Update: Errors occurred while refreshing resources with the local file system (SBV-1903)
   + special thanks to Matias
   
 * Can't find file when synchronising (SBV-1910)
   + special thanks to Chris Melikian
   
 * Deadlock while opening project (SBV-1701)
   + special thanks to Jeremy Hare
   
 * Compare Resource with Revision fails for replaced files (SBV-1885)
   + special thanks to Joerg von Frantzius
   
 * BadLocationException in SVN Annotate View (SBV-1780)
   + special thanks to Alex Ostrovsky
   
 * [Subversive] Report ID-TDB4K - Prepared Tag Operation Failure Report (SBV-1827, SBV-1893)
   + special thanks to jmilora
   
 * Incorrect URL validation on repository properties editing form (SBV-1772)
   + special thanks to Hans van der Meer
  
 * Discard Repository Location operation does nothing if there is at least one location in the set that could not be discarded (SBV-1892) 
 * Validate forms UI on Linux systems (SBV-1900)
 * Incoming project deletions does not handled by Override and Update action (SBV-1916)
 * NPE in time of merge operation (SBV-1902)
 * "Replace with" actions fails if non-versioned files exists in the directory to be replaced (SBV-1807)
 * Disable 'Compare with previous revision' item in the pop-up menu for some of affected paths (SBV-1881)
 * Mark As Merged Operation fails if project tree is not in sync with file system (SBV-1820)
 * "Compare with previous revision" fails for the affected paths in History View because of malformed url (SBV-1880)
 * ".project" and ".classpath" file addition cannot be updated (SBV-1879)
 * Project created using Check out/New Project Wizard should respect project settings (SBV-1889)

JavaSVN features (in cooperation with TMate team):
 * SVNClientEx::mergeStatus() enhancement (SBV-1888)

JavaSVN fixes (in cooperation with TMate team):
 * Certificate bug in subversive (SBV-1810)
   + special thanks to Chris West
   
 * Allow caching of SSL certificates (SBV-1887)
 * SVNClient::info2() acquires authentication four times (SBV-1886)
 * SVNClientEx::merge() fails when it called second time (SBV-1825)
 * SVNClientEx::merge() trims resource name and fails (SBV-1894)

--------------------------------------------------------------------------------

Version 1.0.0 RC1 [19 May 2006]

Features:
 * Project label decorator improvements (PLC-1089)
   + special thanks to Arvoreen (forum member)
   
 * Support of the tsvn:logtemplate property (PLC-1219)
   + special thanks to axiom10 (forum member)
   
 * Comment Templates like in CVS (PLC-1422)
   + special thanks to Clint Dovholuk
   
 * Support ASP.NET hack (PLC-1365)
   + special thanks to Clint Dovholuk
   
 * It is not possible to branch/tag multiple projects at once (PLC-783)
   + special thanks to Berserksangr (forum member)

Fixes:
 * Invalid location of .project and .classpath files after check out (SBV-1822)
   + special thanks to Angelo (forum user)
   
 * Incorrect error message in in time of Checkout if target folder is locked by external process (SBV-1756)
   + special thanks to Turadg Aleahmad

 * Allow Override and Update for new files (SBV-1589)   
   + special thanks to Dotjerky (forum user)
   
 * NPE in Commit Operation (SBV-1615, SBV-1815)
   + special thanks to Paul Kendall, Christian
   
 * Errors occurred while refreshing resources with the local file system (SBV-1561, SBV-1588)
   + special thanks to Tjedrzejczak, Dumitru Frunza
   
 * Incorrect URL validation on repository properties editing form (SBV-1772)
   + special thanks to Hans van der Meer
   
 * Show Repositories View Operation Failure Report (SBV-1763)
   + special thanks to Simon Liu, Axel Bock
   
 * Problem with Compare (SBV-1710)
   + special thanks to David Harrigan
   
 * Wrong dialog text for browsing url for merging (SBV-1767)
   + special thanks to Danny Mandel
   
 * NoClassDefFoundError [PluginIDVisitor] (SBV-1672)
   + special thanks to Steve Zadoorian
   
 * Report shouldn't be sent for the network communication problems (SBV-1781)
 * Incoming deletion for project should delete project from workspace (PLC-1184)
 * URL Validation failed on GNU JVM (SBV-1657)
 * Check Out As action failed (SBV-1808)
 * Validate UI forms (SBV-1785)
 * No actions in the context menu for a resource in "strange" state (PLC-800)
 * NPE in CreatePatchAction (SBV-1757)

JavaSVN fixes (in cooperation with TMate team):
 * Exception in case if WC is svn:externals in parent WC (SBV-1692)
   + special thanks to Sascha Frick
   
 * Unknown node kind '3' in merge operation (SBV-1654, SBV-1653, PLC-1380, PLC-1187)
   + special thanks to Edward Seymour, Danny Mandel
   
 * Commit failed with "502 Bad Gateway" error (PLC-1439)
   + special thanks to Bpasero and Oliverh (forum members)
   
 * Unable to register repository with only server name in URL (SBV-1790)
   + special thanks to Hugi (forum member)

--------------------------------------------------------------------------------

Version 1.0.0 M12 [5 May 2006]

Features:
 * Add "Stop On Copy" option to History View (PLC-704)
 * Hide unrelated paths option for History View (PLC-703)
 * Let user decide to override existing folders while checkout or not (SBV-1686)
 * Arrange checkout menu items (PLC-1204)
 * Add UI part of the proxy callback support (PLC-955)

Fixes:
 * Error encountered: null argument provided to table view (SBV-1582)
   + special thanks to Yogesh B Kanitkar
   
 * [Subversive] Share Project operation FAILURE REPORT (PLC-1402)
   + special thanks to Peter Rose
 
 * Report ID-CAYHC - Show Properties Operation Failure Report (SBV-1658)
   + special thanks to Ken Geis
 
 * Unaccessible API's on GNU JRE (SBV-1673)
   + special thanks to Martin Zuber
 
 * Report ID-HGXUD - Prevented recursive attempt to activate part (PLC-1368)
   + special thanks to Tom Staubitz
 
 * Compare with BASE requires connections to server (SBV-1567)
   + special thanks to Erik Dick
   
 * Strange merge behavior (PLC-1369)
   + special thanks to Danny (forum user)
   
 * Typo in a dialog (SBV-1695)
 * Invalid merge()/mergeStatus() behaviour (SBV-1526)
 * Report ID-MXE52 - ContentViewer must have a content provider [HistoryView]  (PLC-1382)
 * Report ID-PD8W6 - ContentViewer must have a content provider [AnnotateView] (SBV-1674)
 * Report ID-B7MW0 - Add Repository Location Operation Failure Report (SBV-1685)
 * Address already in use: connect (SBV-1574)
 * Cannot compare resources (PLC-WLG10K)
 * Hierarchy of added resources not completely visible in the Structure Compare (PLC-791)
 * Many warning dialogs and log records while comparing two revisions (PLC-790)
 * "Compare with revision" operation fails for branched(tagged) resource (PLC-592)
 * Compare two revision is extremely slow (PLC-588)
 * 'Compare with revision' operation fails after moving the resource (PLC-578)
 * Refactor fails when changing package name (SBV-1655)
 
JavaSVN fixes (in cooperation with TMate team):
 * Unrecognized node kind '0' in time of merge action (PLC-1500)
   + special thanks to Edward Seymour
   
 * Checkout failed because of Status-Line '0' (SBV-1592)
   + special thanks to fjalvingh (forum user)
   
 * Malformed network data; Cannot open session, you need to establish a connection first. (SBV-1599, SBV-1597, SBV-1558, SBV-1663)
   + special thanks to Chad Woolley, Jörg Henne

 * diffStatus fails when two files is compared (SBV-1553)

--------------------------------------------------------------------------------

Version 1.0.0 M11 [21 April 2006]

Features:
 * Respect hierarchical structure in Checkout Projects (PLC-1397)
   + special thanks to Memelet (forum member) 

 * Obtain project name from .project file (if so) during checkout from repository (PLC-1413)

Fixes:
 * Attempted to beginRule: R/, does not match outer scope rule: P/ (SBV-1550, SBV-1587, SBV-1622, SBV-1627)
   + special thanks to Mathis Hofer; MBertier; Konstantin Haas; Sebastian Hardt; Mitsu Hadeishi; Barry Kaplan

 * Add Repository Location Operation Failure (widget is disposed) (SBV-1532)
   + special thanks to John N Underwood
 
 * The commit dialog looks confusing (SBV-1606, FastTrack-PLC-1528)
   + special thanks to Christian Nelson

 * NullPointerException if DefaultDialog::open() fails (SBV-1628)
 * Check Out Operation Failure Report ID-E3SG4 (PLC-1420)
 * NullPointerException if SVNClient::info() operations fails due to some reason (SBV-1580)
 * Repository View "Move To..." action does not work (SBV-1557)
 
JavaSVN fixes (in cooperation with TMate team):
 * Broken workspace in case of case-sensitive rename (SBV-1528, SBV-1522)
   + special thanks to Kiel Hodges

 * Check Out Operation Failure Report (IndexOutOfBoundsException) (PLC-1470)
   + special thanks to Kevin Ross

 * NPE in SVNFileUtil (SBV-1602)
 * mergeStatus() operation ingnores IProgressMonitor.isActivityCancelled() (PLC-1463)
 * Resource names is encoded for mergeStatus() (PLC-1462)

--------------------------------------------------------------------------------

Version 1.0.0 M10 [7 April 2006]

Features:
 * Support of shortcuts
   + special thanks to Georges-Etienne Legendre;Christian Nelson
   
 * Include changes to commit dialog like in CVS
   + special thanks to Daniel Spiewak, aochsner (forum user)  
   
 * Implement 'Copy' and 'Move' operations for the repository exploring perspective
 * Implement extension point that alows configure email report properties
 * Support for synchronize action contributions
 * Create patch implementation

Fixes:
 * Could not instantiate provider org.tigris.subversion...
   + special thanks to Maxim Gordienko; Barry Kaplan; Johannes Matheis; Ralph Navarro;Turadg Aleahmad
 
 * Massive CPU usage - Eclipse slowdown
   + special thanks to Clint Dovholuk
    
 * Excessive "Build Workspace" and slowdown
   + special thanks to Clint.Dovholuk; Mike (forum user)
    
 * NullPointerException in time of Share Project operation
   + special thanks to Hans van der Meer
   
 * NullPointerException when operation is cancelled
   + special thanks to Tjedrzejczak
   
 * NullPointerException in LocalInfoPage
   + special thanks to Andreas Andreou

 * Incorrect icon for modified resources in preview
 * Cleanup menu is enabled for non-versioned resources
 * NPE in time of project set import
 * Default focus in the New Repository Location Wizard should be to the field Root URL
 * NullPointerException in FileUtility.getOperableParents
 * NullPointerException in FileUtility.getResourcesRecursive
 * NullPointerException in AbstractSVNSyncInfo
 * NPE in Commit dialog
 * Checkout projects action reports 75% progress although it finished already
 * Error report sending is suggested for when SVNException is thrown
 * Support Eclipse 3.2 linked resources
 * Resource out of sync with file system error

JavaSVN features (in cooperation with TMate team):
 * Enhance diff() functionality

JavaSVN fixes (in cooperation with TMate team):
 * Export operation fails with large files
 * Import operation fails on read-only path
 * Incoming addition cannot be merged
 * Resource names is encoded for mergeStatus()

--------------------------------------------------------------------------------

Version 1.0.0 M9 [24 March 2006]

Features:
 * Add support for multiple folder creation in one transaction
 * Add file in SVN Repository view
 * Use CVS-like decoration icon for modified resources
   + special thanks to Eugene Kuleshov; Daniel Spiewak
 
 * Commit and Update buttons in Synchronize view toolbar
   + special thanks to Georges-Etienne Legendre
 
 * Set 'Don't send' button as a default for the error dialog
 * User input history should be implemented for name and email field in send error dialog
 
Fixes:
 * Resource '...' is not open" problem when project is closed under Eclipse 3.2Mx
 * Daniel Spiewak; Travis Hume
 
 * Switch error: outgoing changes in wc -> no switch possible
   + special thanks to ayampols our forum user 
 
 * Incorrect page is shown in 'share project' wizard while sharing imported project (Eclipse 3.2Mx freezes)
   + special thanks to memelet (forum user); Georges-Etienne Legendre
 
 * Time-to-time error report window automatically closed with report sending
 * 'There is an error occurs..' caption in repository browser
 * Cleanup operation also for folders
   + special thanks to Daniel Serodio our forum user 
 
 * Invalid path separator used for UNIX-like systems
   + special thanks to anathaniel our forum user; D. Strauss; Leonard Soetedjo
 
 * ClassCastException in the SVNRemoteStorage class in time of RepositoryProvider check
 * Merge, switch dialogs select revision for the wrong resource (should agree with input url)
 * Error report preview fails under Eclipse 3.2Mx
 * NPE in History View in some hard cases
 * NPE during a refresh of a project
   + special thanks to Frits Jalvingh
 
 * Hiding History View parts works incorrect

--------------------------------------------------------------------------------

Version 1.0.0 M8 [17 March 2006]

Features: 
 * Improve merge dialog
 * Mark top revision in History View in Repository Mode
   + special thanks to Daniel Spiewak 

 * Rework History View - comment viewer should be shown in the bottom of the log 
   messages table
   + special thanks to Eugene Kuleshov

 * Optimize "Edit repository properties" panel
 * Add Subversive version id to the error report
 * Add sequence number for the mail error report

Fixes: 
 * Sort by date in resource history view works incorrect
 * Concurrent modification exception
   + special thanks to Cedric Pineau 

 * java.lang.NumberFormatException in repository browser
 * Composite operation should recognize not executed depended operation.
 * Checkout as using new project wizard works incorrect
 * Get Resource List operation FAILURE REPORT
   + special thanks to Jon our bug reporter. 

 * Pre-close/Pre-delete Clear operation FAILURE REPORT
   + special thanks to Cedric Pineau 

 * NPE during Share project operation
   + special thanks to Kevin O'Neill; Cedric Pineau; Barry Kaplan; David Saff 

 * Make error report preview form platform independent
   + special thanks to Cedric Pineau 

 * Null pointer exception then Synchronize View is closed
   + special thanks to Leonard Soetedjo 

 * Changes of the New Project Wizard during checkout are lost
   + special thanks to Armen our forum member

 * Share project fails when project layout structure partially exists on the 
   repository
 * Repository view navigator makes unneccessary requests to the server
 * Null pointer exception in select revision panel when no network available
 * NPE in LogMessagesComposite
 * Override and commit & markAsMerged operations work incorrect in case replaced
   resources
 * Checkout projects action can't be completed if common error occurs
 * Repository scanning can't be cancelled
 * Checkout overrides projects without warning
 * Simply notify user when an error occurs during send report . Do not ask it 
   to send this error
 * Rework SVN views description according Eclipse IDE standart
 * Invalid working behaviour for replaced resources
 * Null pointer exception in History view then no network connection available
 * Repository browsing panel works incorrect in case no network connection 
   available
 * All compare with ... operation asks to send report when no network available
 * Null pointer exception in affected paths composite
 * ClassCastException in Repository Browsing Panel
 * Subversive propose to send email report when repository folder already exists
 * NPE during send a report
   + special thanks to Danny Mandel 

 * Affected paths view shows incorrect information
 * NPE in Repository Properties
   + special thanks to Danny Mandel 

--------------------------------------------------------------------------------

Version 1.0.0 M7 [10 March 2006]

Features:
 * Change Preferences->Team UI like in Eclipse/CVS 3.1 [usability]
 * Improve error reporting dialog [usability]
 
Fixes:
 * Team menu should be ordered like in CVS
   + special thanks to Daniel Spiewak for reporting this issue
 * Widget disposed error
   + special thanks to Daniel Spiewak for reporting this issue   
 * Create new repository location operation from 'select wizard dialog' fails
 * Add ability to show properties on the repository roots (TRUNK, TAGS, 
   BRANCES and ROOT)
 * Changing history view layout works incorrect
 
JavaSVN fixes:
 * Incorrect cancelation of SVN Checkout
 * Checkout freezes when cancel button is pressed

-------------------------------------------------------------------------------- 

Version 1.0.0 M6 [7 March 2006]

Features:
 * Add option to mail report (Do not ask me to send report in 
   future) [usability]
 
Fixes:
 * Show annotation operation failure
 * Simply notify user when an error occurs during send report. Do not ask it 
   to send this error
 * Authentification problem for "send error report"
 * Null pointer exception in check out as operation
 * Add ability to subscribe on project state changed events
 * Synchronize is called for the project which is not shared yet

-------------------------------------------------------------------------------- 

Version 1.0.0 M5 [4 March 2006]

Features:
 * Api for PropertyManager [extension points]
 * Add �Refresh� button to SVN Repository Browser toolbar [usability]
 * Support Eclipse 3.2 [functionality]
 * Add ability to open and compare with previous revision for the affected 
   paths in History View [usability]
 * Provide ability to send e-mail reports for non-SVN errors [functionality]
 
Fixes:
 * Refresh on SVN Repository Browser work incorrectly
 * Action "Edit Properties" throws java.lang.IllegalArgumentException
 * NPE on the Repositories View when *.psf is imported
 * Override and Commit operation fails
 * Error window is shown twice for the same error
 * Empty select revision dialog is shown
 * Paging shows correct number of revisions only at first time
 * Compare reports "operation failed", but in the end the comparison is 
   displayed
 * Quick filter doesn't work in the selection picker
 * Validate and amplify messages on the plugin UI forms
 
JavaSVN fixes (in cooperation with TMate team):
 * SVNClientEx::diffStatus() should provide all possible information
 * SVNClient::properties() operations do not report an errors
 * SVNClientEx::merge() function do not merge files without conflicts
 
-------------------------------------------------------------------------------- 

Version 1.0.0 M4 [24 February 2006]

Features:
 * Allow all connection modes supported by JavaSVN + its UI [functionality]
 * How to get IStorage instance in order to convert 
   IResource->IRemoteResource [extension points]
 * Add ability to subscribe on project state changed events [extension points]
 
Fixes:
 * Unable to get unresolved resources from UpdateOperation
 * Show resource history view fails
 * Checkout operation works incorrect with equal project names
 * Annotation view works incorrect in package explorer
 * Show annotation works incorrect from history view

--------------------------------------------------------------------------------

Version 1.0.0 M3 [17 February 2006]

Features:
 * Mark As Merged operation should supports properties [functionality]
 * Interactive merge [functionality]
 * Support of following connection modes: HTTP, HTTPS, SVN, 
   SVN+SSH (password) [functionality]
 
Fixes:
 * Share project wizard does not work

--------------------------------------------------------------------------------

Version 1.0.0 M2 [10 February 2006]

Features:
 * Show resource locks on repository view [functionality]
 * Show resource locks in the package explorer [functionality]
 * Add ability to copy() versioned folders between projects [functionality]
 * Design the default repository perspective layout [usability]

Fixes:
 * Operation 'move' on directory works incorrect in case different repository 
   locations
 * Illegal 'Directory is out of sync with file system' error
 * ResourceChangeListener handles initial workspace delta badly
 * Override and commit operation fails
 * Properties / SVN Info fails
 * Paging support for the revision history
 
JavaSVN fixes (in cooperation with TMate team):
 * NullPointerException in time of diffStatus() operation
 * SVNclientEx::list() methods does not works with the SVN1.1.x repositories

--------------------------------------------------------------------------------

Version 1.0.0 M1 [3 February 2006]

Features:
 * Lock/UnLock folder emulation [functionality]
 * Pass selected resource to ITeamHistoryFactory in the log message 
   panel [extension points]
 * Repository browser improvements [usability]
 * ISVNClientInterfaceEx extension (resource deletion 
   improvements) [functionality]
 * Enhance SVNClientEx::move() operation behavior (Refactor 
   improvements) [functionality]
 * Decorate deleted folders [usability]
 * Add multi-line viewer for Property view [usability]
 * Double Atomic Commit [extension points]
 * Add ability to replace commit dialog [extension points]

Fixes:
 * Select revision wizard allows multi-selection, but only one revision 
   is processed
 * Commit operation fails after deleting file directly from file system
 * JUnit tests integration to build process
 * Properties information is missing in the SVN Repositories perspective
 * Null pointer exception when Synchronize View is closed
 * NPE in AbstractConflictDetectionOperation.getUnprocessed()
 
JavaSVN fixes (in cooperation with TMate team):
 * Enhanced SVNClientEx::move() operation works incorrect
 * NullPointerException at commit time
 * Invalid lock comment returned
 * Add to SVN operation failed with NullPointerException
 * Add to version control operation failed
 * Checkout Operation failed with NullPointerException

--------------------------------------------------------------------------------

Version 0.9.7 [27 January 2006]

Features:
 * Show hierarchical resource history [usability]
 * Add Import/Export ability to Repository View [usability]

Fixes:
 * Background operations cancellation
 * Wrong behavior of the synchronize action when SVN is not accessible
 * Validate UI forms

--------------------------------------------------------------------------------

Version 0.9.6 [20 January 2006]

Features:
 * Validate user input on the UI forms [usability]
 * Add repository to IRevisionProvider [extension points]
 * Add "Keep Locks" option to commit dialog [usability]
 * Paging support for the revision history [usability]
 
Fixes:
 * Validate Forms UI
 * Java Compare Structure should be improved
 * Ugly error message after cancelled update
 * Cryptic and not entirely visible message if commit fails
 * Commit compare editor shows that remote file does not exist for all 
   changed files
 * Cancel on the Resource History quick filter invokes an operation
 * Background operations cancellation
 * Close project operation fails
 * Copied from URL doesn't render real URL
 * Non default date/time pattern used
 * Synchronization progress monitor shows more than 100% done
 
JavaSVN Fixes (in cooperation with TMate team):
 * NullPointerException in time of checkout() operation
 * NullPointerException in status() operation with "remote" option set to true
 
--------------------------------------------------------------------------------

Version 0.9.5 [13 January 2006]

Features:
 * Progress of update is not available in the sync. tree 
   continuously [functionality]
 * Replacing properties without warning in Property View [functionality]
 
Fixes:
 * Null pointer exception on 'splitRepositoryLocations' operation
 
JavaSVN Fixes (in cooperation with TMate team):
 * No statuses about incoming updates if repository root is checked out
 * JavaSVN doesn't report any error while SVN Server does
 * Files in the root of the repository are not commited
 * JavaSVN does not support non-english resource names
 * Spelling error
 * Most of the operations (commit, update, cleanup etc) finish with 
   obscure error

--------------------------------------------------------------------------------

Version 0.9.4 [4 January 2006]

Features:
 * Enhance History View functionality ("Update To Revision..." and 
   "Copy From URL/Rev") [functionality]
 * New repository location browser [usability]
 * "Reset Changes" button for "edit repository location" dialog [usability]
 
Fixes:
 * Project switches to branch, despite creating branch finishes with error
 * Properties View should works in standard way (using IActionOperation 
   framework)
 * Revision number '-1' in synchronize view
 * Commit operation fails
 * A package and its file are reflected as damaged after deletion
 * Synchronize view shows incorrect information after commit deletion
 * "No changes" result on the parent of ignored resource, while it has conflict 
   with the repository file
 * Second commit for the same file fails
 * Fixed ArrayIndexOutOfBoundsException
 * No changes found after rename operation
 * Choosing 'Show Annotation' action for the second time on the same file shows 
   empty Annotate View
 * Double-click on the file in repositories view and history view doesn't 
   switch to this file editor
 * Adding resource to svn:ignore by wildcard extension works incorrect
 * No warning dialog is shown while checking out development root (TRUNK, 
   BRANCHES, TAGS) if it already exists in workspace
 * File shown incorrect revision number

