********************************************************************************
*                            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.2.I20160902-1700 [02 September 2016]

Fixes:
 * Documentation is confusing for Merge (bug 487256)
 * SVN 1.9 requires "local" modifier for status() call in order to work the same way as orevious API versions (bug 500739)
 * Comparing files from the commit dialog always yields a "no differences" result (bug 497160)
 * Comparing files from the commit dialog always yields a "no differences" result for unversioned files (bug 500719)
 * SVN server connection failure with Eclipse Neon (bug 499529)
 * An error within the SVN+SSH credentials storing code (bug 499333)
 * ID-UL6V1 History View. Compare current with <rev-number> throws StringIndexOutOfBoundsException (bug 498349)
 * Background colors for repository nodes in dark theme by default are wrong (bug 499325)
 * update subversive Icons to fit also dark themes (bug 473419)
 
--------------------------------------------------------------------------------

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

