********************************************************************************
*                            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.3.I20161129-1700 [29 November 2016]

Fixes:
 * Exclude from compare view files with identical content in case they're reported (bug 508237)
 * Two-way and three-way compare should display "deletion+addition" pairs properly when they're reported instead of "replacement" (bug 508236)
   + special thanks for the contribution to Florent Angebault
 * Proper SVNDiffStatus order when deletion and addition are reported for the same nodes (bug 508235)
 * "Ignore ancestry" option for compare with branch/tag/URL (bug 508231)
   + special thanks to Florent Angebault
 * Update from History view and Synchronize view don't change states in another view (bug 505370)
 * Issue in SVNLightweightDecorator when decorating model elements (resource==null) (bug 502505)
 * [scalability] Resource listener listens to changes on ignored files (bug 505360)
   + special thanks for the contribution to Andrey Loskutov
 * Performance improvements for ResourceStatesChangedEvent (bug 506811)
   + special thanks for the contribution to Andrey Loskutov
 * [scalability] SVN update takes hours if "Synchronize" view is opened (bug 504058)
   + special thanks for the contribution to Andrey Loskutov
 * Performance improvements for AbstractSVNSubscriber (bug 506777)
   + special thanks for the contribution to Andrey Loskutov
 * Performance improvements for SVNUtility (bug 506763)
   + special thanks for the contribution to Andrey Loskutov
 * Performance improvements for RemoteStatusCache (bug 506762)
   + special thanks for the contribution to Andrey Loskutov
 * Performance improvements for UpdateSubscriber (bug 506760)
   + special thanks for the contribution to Andrey Loskutov
 * Performance improvements for FileUtility (bug 506757)
   + special thanks for the contribution to Andrey Loskutov
 * Compilation issue with older platform versions (bug 506756)
   + special thanks for the contribution to Andrey Loskutov
 * Error in fix for the bug 282000 causes performance issues (bug 506785)
 * Installation instructions in 'help' are out of date (bug 503327)
 * Separate requirements page is unnecessary in 'help' (bug 503329)
 * Remove org.eclipse.team.svn.resource.ignore.rules.jdt bundle (bug 505611)
 * Correct "management instructions" help page (bug 505119)
 * Grammar correction on the "Mylyn" help page (bug 505115)
 * Update Subversive modules overview (bug 505089)
 * Grammar corrections on the "Supported protocols" page (bug 505006)
 * Grammar corrections on the "Features" page (bug 504927)
 * Update Subversive architecture overview (bug 503542)
 * Linux notes are partially out of date and in need of grammar corrections (bug 503330)
 * FAQ section in plug-in 'help' requires actualization (bug 503325)
 * Subversive tries to connect to repository for Compare With -> Base from Working Copy (bug 501030)
 * Deleting multiple files is very slow on large projects (bug 501032)
 
--------------------------------------------------------------------------------

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

