Subversion Support UI Specification

Subversion Support UI Specification

Status: Work in progress...,

brainstorming phase, set of screenshots, ASCII-arts, scans showing possible UI . To be finalized by mid February 2006.

Abstract

This paper defines user interface that allows the users to access Subversion functionality right from NetBeans IDE.

Document Conventions

The document also contains comparison mini screenshots sections from other Subversion (version control) clients. Such sections use special style:

style for SmartSVN screenshots

style for Tortoise screenshots

style for NetBeans CVS UI speclets

Depending on your browser

  • choose either Standard page style or Hide Comparison page style (CSS),
  • right-click the mini screenshot and select View image.

Common UI Controls

Repository Browser Component

   +-----------------------------------------------------
   | Repository Browser
   +-----------------------------------------------------
   | Specify Repository Location:  (actual text depends on context)
   | +---------------------------------------------------
   | | + https://tigris.org/svnrepo
   | |   + svnAdpater
   | |   + rapidSVN
   | |     + trunk
   | |     + [branches] (selected)
   | |       + release10
   | |           + Loading...  
   | |       + experiment2
   | |
   | +---------------------------------------------------
   |
   | (here is area for additional controls)
   |
   |                                   [OK] {Cancel ESC]
   +-----------------------------------------------------
On expansion it shows Loading... and waits for server response.

Note:
The repository browser dialog is almost always accessible using Browse... button next to repository path text field (accepts full URL@ too). The text field is copy-paste friendlier than the browser dialog.

Search Revision Dialog

  +-------------------------------------------+
  | Search Revision
  +-------------------------------------------+
  |
  | Log Message: [RE________________________]
  |
  | Author:      [__________________________]
  |
  | From Date:   [__________________________]
  |
  | To Date:     [${today}__________________]
  |
  | [Search]
  |
  | Results:
  } +------------------------------------
  | | 1234  on 5/5/2005 by James
  | | #93456 search revision takes RE
  | |
  | | 1123  on 4/9/2006 by Johnny
  | | #1 inittial REvision
  | +------------------------------------
  |
  |                        [OK] [Cancel ESC]
  +-----------------------------------------  
where:
Log Message
takes text that must appear in the revision log message.
Author
text that must appear in author name.
From Date
locale specifics, textual date specification
To Date
locale specifics, textual date specification
Search
It starts search
Results list
until first search it contains Press search button then a list of results.
OK
enabled if a revision in results list is selected.
It's typically accessed by a Search... button next to a revision text field.

Main Menu

The main menu contains actions that can be invoked in various contexts (files, editor, search results. Subversion view, ...). The main menu is customizable by user by moving actions from actions pool. By default it reads:
Run Subversion> Tools
    
   Show All Changes
   Diff All
   Update All
   Commit All
   -----------------------------
   Checkout...
   Import into Repository...
   -----------------------------
   Show "context" Changes
   Diff "context"
   Update "context"
   Commit "context" ...
   -----------------------------
   Copy "context" to...
   Switch "context" to ...
   Merge "context" Changes...
   -----------------------------
   Blame "context"
   Search "context" History...
   -----------------------------
   Revert "context" Modifications
   Resolve "context" Conflicts
   Ignore (Unignore) "context"

Setup

Standard NetBeans wizard framework is used.

Checkout

Checkout - First step

First checkout wizards panel differs according to URL schema:

    +------------------------------------------
    |
    | Specify Subversion repository location.
    |
    | Repository URL: [file:///data__________[v]

where:

Repository URL
repository URL including optional revision specifier e.g. @44. Default is recently used value, other combo items holds history and locations read from standard Subversion command line client configuration directory.
    +------------------------------------------------
    |
    | Specify Subversion repository location.
    |
    | Repository URL: [svn://server/repository____[v]
    |
    | User:           [__________]
    |
    | Password:       [__________]
    |
    | [ Proxy Configuration... ]

where:

URL
repository URL including optional revision specifier e.g. @44 ("URL@"). Default is recently used value, other combo items holds history and locations read from standard Subversion command line client configuration directory. Invalid URL disables wizard Next and shows "Invalid URL" error label.
User
user name Default taken from previously specified user for the same server or user.name system property.
Password:
password displayed using asterisks. Default taken from standard Subversion command line client configuration directory.
Proxy Configuration...
opens dialog for setting proxy. Default proxy setting is recent one for (the whole) selected URL othervise system proxy value.
    +---------------------------------------------------------
    |
    | Specify Subversion repository location.
    |
    | Repository URL: [svn+ssh://server/repository________[v]
    |
    | Use External SSH Tunnel
    |    Tunnel Command: [___________________________________v]
    |
    | Tunnel Command Examples:
    |   on Windows: plink -l username -pw password
    |               plink -l username -i C:\Path\To\Private.key
    |   on Unixes:  ssh -l username -i path/to/privateKey

where:

URL
repository URL including optional revision specifier e.g. @44 ("URL@"). Default is recently used value, other combo items holds history and locations read from standard Subversion command line client configuration directory. Invalid URL disables wizard Next and shows "Invalid URL" error label.
Use Internal SSH
If selected IDE internal SSH library is used.
User
user name Default taken from previously specified user for the same server or user.name system property.
Password:
password displayed using asterisks. Default taken from IDE seetings if saved.
Remember Password
If checked password is stored into IDE settings. Otherwise is the user prompted for password on IDE restart.
Proxy Configuration...
opens dialog for setting proxy. Default proxy setting is recent one for (the whole) selected URL othervise system proxy value.
Use External SSH Tunnel
If selected user can specify any non-interactive command that establishes the tunnel.
Tunnel Command
Actual command; by default loaded from [tunnels] section.
    +----------------------------------------------------------------
    |
    | Specify Subversion repository location.
    |
    | Repository URL: [https://server/path_______________________[v]
    |
    | User:           [__________] (leave blank for anonymous access)
    |
    | Password:       [__________]
    |
    | [ Proxy Configuration... ]

where:

URL
repository URL@. Default is recently used value, other combo items holds history and locations read from standard Subversion command line client configuration directory.

It can take full URL so it's copy paste users friendly. If full URL specified it automatically prefills next step controls.

User
user name Default taken from previously specified user for the same server or user.name system property.
Password:
password displayed using asterisks. Default taken from standard Subversion command line client configuration directory.
Proxy Configuration...
opens dialog for setting proxy. Default proxy setting is recent one for (the whole) selected URL othervise system proxy value. Warning must be issued if the user chooses an HTTP proxy for HTTP URL schema and the proxy does not support DeltaV extensions.
after clicking wizard next button validation starts:
    |
    | (place for wizard panels described above)
    |
    | Checking connection...
    | [///////////////-------------------------------------] [ Stop ]
    |
    +-----------------------------------------------------------------

where:

progress label
Updates it's title connecting, authenticating,... as much descriptive as possible.
Stop
allows to cancel connecting. It leaves the wizard in invalid state with "Cancelled by user" error label.
Checkout - Second step
In the second wizard step the user specifies source repository and destination local folder.
    +---------------------------------------------------------------------
    |
    | Specify the folder(s) to checkout from Subversion repository.              
    |                                                                                 
    | Repository Folder(s): |______________________________| [ Browse... ]    
    |
    | Repository Revision:  |________| [ Search... ] 
    |                       (empty means repository HEAD)
    |
    | [ ] Skip "<selected-folder>" and checkout only its content 
    |
    |
    | Specify location of local folder to checkout folders into.                      
    |                                                                                 
    | Local Folder: |_____________________________________| [ Browse... ] 
    |               (local Subversion working copy) 
    |

where:

Repository Folder
It preselects URL@ location specified in the previous step if any
Browse
opens repository browser that allows multiple selections at same tree level.
Repository Revision
accepts revision number or date
Search
opens the Search Revision dialog
Search...
button - opens the Search Revision dialog which lets the user to pick a revision from the Files/Folders history
Skip
checkbox - If checked only the contents from the selected folder will be checkedout into the specified local folder, otherwise a folder with the same name as the selected folder will be created.
Local Folder
local path, Every attempt is made to create it if it does not exist yet.
Browse
Show local folder browser (JFileChooser).

Alert: Checkout Completed

This information alert shows up after the successful checkout offering the user to open a project or create a new one.

Figure: Checkout Completed alert (NetBeans project was found)

+-----------------------------------------------------------------------+
| Checkout Completed                                                    |
+-----------------------------------------------------------------------+
|                                                                       |
|   |     <x> projects were checked out.                                |
|   |     Do you want to open a checked out project?                    |
|   o                                                                   |
|                                                                       |
|                                                                       |
|                                       [[ Open Project... ]] [ Close ] |
+-----------------------------------------------------------------------+
Figure: Checkout Completed alert (No NetBeans project was found)
+-----------------------------------------------------------------------+
| Checkout Completed                                                    |
+-----------------------------------------------------------------------+
|                                                                       |
|   |     No project was found in checked out sources.                  | 
|   |     Do you want to create a new project from checked out sources? |
|   o                                                                   |
|                                                                       |
|                                                                       |
|                                     [[ Create Project... ]] [ Close ] |
+-----------------------------------------------------------------------+
Components of this alerts are:
  1. Open Project button (O) - opens up the Open Project dialog.
  2. Create Project button (C) - opens up the New Project wizard.
  3. Close button (-) - closes the dialog.
Checkout wizard contains Repository Browser component:

TODO SSL certificates manager:

Checkout wizard:

Repository Browser component::

SSL Certificate:

User URL validation for typical error:

Dialog: Proxy Configuration

In this dialog the user specifies proxy settings used with CVS actions. The proxy settings are persisted between IDE sessions and checkout wizard sessions.

Figure: Proxy Configuration dialog

+---------------------------------------------------------------------------------+
| Proxy Configuration                                                             |
+---------------------------------------------------------------------------------+
|                                                                                 |
| (o) Use System Proxy Settings                                                   |
| ( ) No Proxy                                                                    |
| ( ) HTTP Proxy                                                                  |
| ( ) Socks 5 Proxy                                                               |
|                                                                                 |
|     Proxy Host:   |_______________________________________| Port: |___________| |
|                                                                                 |
|     [ ] Proxy Server Requires Password                                          |
|         Name:     |_______________________________________|                     |
|         Password: |_______________________________________|                     |
|                                                                                 |
|                                                               [ OK ] [ Cancel ] |
+---------------------------------------------------------------------------------+
Components of this dialog are:
  • Use System Proxy Settings radio button (U) - specifies that the proxy setting retrieved from the operating system should be used.
  • No Proxy radio button (N) - specifies that no proxy should be used.
  • HTTP Proxy radio button (H) - specifies that HTTP proxy should be used. Selecting the checkbox enables the host, port and other fields for specifying the proxy details.
  • Socks 5 Proxy radio button (S) - specifies that HTTP proxy should be used. Selecting the checkbox enables the host, port and other fields for specifying the proxy details.
  • Proxy Host text field (H) - specifies HTTP or Socks proxy host. Initially empty. Enabled only if HTTP Proxy or Socks 5 Proxy radio button is selected.
  • Port text field (P) - specifies HTTP or Socks proxy host. Initially empty. Enabled only if HTTP Proxy or Socks 5 Proxy radio button is selected.
  • Proxy Server Requires Password check box (S) - specifies that the name and password should be used when using the proxy server. Enabled only if HTTP Proxy or Socks 5 Proxy radio button is selected. Initially it is unselected.
  • Name text field (m) - specifies the proxy account name. Initially empty. Enabled only if the Proxy Server Requires Password check box is selected.
  • Password text field (w) - specifies the proxy password. Initially empty. Enabled only if the Proxy Server Requires Password check box is selected.
  • OK button - Closes the dialog and sets up the proxy. Always enabled.
  • Cancel button - Closes the dialog without setting up the proxy. Always enabled.

Import

The first wizard step which is handlig the repository configuration is the same as the in the checkout wizard.

In the second wizard step the user has to specify the repository folder and the import message.

    +---------------------------------------------------------------------
    |
    | Specify the repository folder you want to import in.              
    |                                                                                 
    | Repository Folder: |______________________________| [ Browse... ]    
    |
    | Specify the import message:
    | +-----------------------------------------------------------------
    | |                                                                                
    | |
    | |
    | |
    | |
    | |
    | |    
    | +-----------------------------------------------------------------
    |
    | [x] Checkout after import
    |
    +-----------------------------------------------------------------------                             

The components of this dialog are:

  • Repository Folder textfield - contains the path to the repository folder the imported local folder has to be imported in.
  • Browse... button - opens modaly the repository browser to select or eventually create a folder in the specified repository.
    If the browser is closed trough the OK Option and a selection has been taken then the selected folders path, relative to the repository base Url, will be set into the repository folder textfield.
  • Import message textarea - contains the import message.
  • Checkout after import checkbox - specifies if the imported local folder has to be automatically checkedout and set as a working copy from the actually created repository folder.

The user may at this point either

  • continue to the next wizard step to specify some more advanced import options
  • or
  • finish the import.

The third wizard step allows to specify in detail for every file if it is going to be imported as text, binary or eventally if it has to be ignored (excluded) at all.
This step may be skipped and in such a case the IDE analyzes the files contents to determine the svn:mime-type property and, depending on the project type, also sets the svn:ignore property for some project metadata files.

    +---------------------------------------------------------------------
    |
    | Specify how to import the files into the repository
    | +-----------------------------------------------------------------
    | | File                                   |    Import as
    | |-----------------------------------------------------------------
    | | My Java App                                  [__________[v]]
    | |   +--src                                     ...
    | |      +--package1                             
    | |         +--package2
    | |            +--file1.java
    | |            +--file2.java                     
    | |            +--file3                          [text______[v]]        
    | |            +--picture1.gif                   [binary____[v]]
    | |            +--picture2.gif                   [binary____[v]]    
    | |   +--nbproject                               ...
    | |      +--private                              [ignore____[v]]         
    | |         |--private.properties                [ignore____[v]]          
    | |      |--genfiles.properties                  ...
    | |      |--project.xml
    | |      |--build-impl.xml
    | |   +--lib                                     [ignore____[v]]         
    | +-----------------------------------------------------------------
    | 
    +-----------------------------------------------------------------------                                

The components of this dialog are:

  • File tree view - contains the whole file tree selected for the import
  • Import as combobox - contains the following options -
    • binary - is relevant for the svn:mime-type property
    • text - is relevant for the svn:mime-type property
    • ignore - is relevant for the svn:ignore property
    no selected value stands fo default.

Projects Window

The Projects window allows the user to perform versioning commands on versioned projects, folders (containers) and files. A project is versioned if at least one folder in the project is versioned. A folder is considered versioned if it contains Subversion metadata or its parent is versioned. And file is versioned if its parent folder is versioned.

The Projects window shows the local status of files comparing against the repository. The local status means whether a file has changed locally since the last update or checkout. Files can be in four local states (up-to-date, new, ignored, containing conflict) which are indicated by different colors of node labels. The same colors are used in editor tab labels. Project and folder (or container) icons indicate that they are versioned and also the state of files underneath by versioning badge.

File name colors and corresponding states:

  • Default color - file is up-to-date
  • Green color - file not yet in the repository (Locally New)
  • Blue color - file has been modified (Locally Modified)
  • Red color - file contains a conflicting merge (Local Conflict)
  • Gray color - file is ignored

Folder name colors and corresponding states:

  • Default (black) color - folder is not ignored (can contain default, green, red and gray color files)
  • Gray color - folder is ignored (all files and folders underneath this folder are ignored as well)
Project icon badge colors and corresponding states:
  • No badge - project is not in Subversion
  • Black color badge - project is versioned and all files are up-to-date
  • Blue color badge - project contains new or modified files (Locally New or Locally Modified)
  • Red color badge - project contains at least one file with conflicting merge (Local Conflict)

Folder icon badge colors for versioned project and corresponding states:

  • No badge - folder files are up-to-date
  • Blue color badge - project contains new or modified files (Locally New or Locally Modified)
  • Red color - folder contains at least one file with conflicting merge (Local Conflict)

Figure: VCS File Name Colors in Projects Window

+-------------------------------------------------+
| Projects                                        |
+-------------------------------------------------+
| [a] My Java App                                 |
|  -- [j] Source Packages                         |
|  |   -- [p] <default package>                   |
|  |   |   +- [c] MyClassInDefaultPackage.java    |
|  |   -- [e] com.mycompany.newpackage            |
|  |   -- [p] com.mycompany.petstore              |
|  |   |   +- [b] Bundle.properties               | (Ignored)
|  |   |   +- [c] Main.java                       | (Locally Modified)
|  |   |   +- [c] Petstore.java                   | (Up to Date)
|  |   |   +- [c] PetstoreApp.java                | (Locally New)
|  |   |   +- [c] PetstoreData.java               | (Local Conflict)
|  |   +- [p] com.mycompany.petstore.api          |
|  |   +- [p] com.mycompany.petstore.lib          |
|  |   +- [p] com.mycompany.petstore.ui           |
|  -- [t] Test Packages                           |
|      +- [p] com.mycompany.petstore              |
|      +- [p] com.mycompany.petstore.api          |
|      +- [p] com.mycompany.petstore.lib          |
|      +- [p] com.mycompany.petstore.ui           |
| [a] My Java Lib                                 |
|  +- [j] Source Packages                         |
|  +- [t] Test Packages                           |
|                                                 |
|                                                 |
|                                                 |
|                                                 |
+-------------------------------------------------+

[a] - Versioned Project icon
[j] - Source Packages logical folder icon
[t] - Test Packages logical folder icon
[p] - Java Package icon
[e] - Java Package empty icon
[j] - Java File icon
[b] - Properties File icon

Figure: VCS Badges in Projects Window

Node: Project

Project node contextual menu:

...
----------------------------
Subversion                 >

Tools                      >
----------------------------
Properties

Subversion submenu (project is in a repository or underneath a versioned folder):

Subversion >
   Show Changes
   Diff
   Update
   Update with Dependencies
   Commit...
   -----------------------------
   Copy to...
   Switch to...
   Merge Changes...
   -----------------------------
   Search History...
   -----------------------------
   Revert Modifications
   Resolve Conflicts

Subversion submenu (project is not in a repository nor underneath a versioned folder):

Subversion >
   Import into Repository...

Node: Folder

Folder node contextual menu:

...
----------------------------
Subversion                 >
Tools                      >
----------------------------
Properties

Subversion submenu:

Subversion  >
   Show Changes
   Diff
   Update
   Commit...
   -----------------------------
   Copy to...
   Switch to...
   Merge Changes...
   -----------------------------
   Search History...
   -----------------------------
   Revert Modifications
   Resolve Conflicts
   Ignore (Unignore)

Node: File

File node contextual menu:

...
----------------------------
Subversion                 >
Tools                      >
----------------------------
Properties

Subversion submenu:

Subversion  >
   Diff
   Update
   Commit...
   -----------------------------
   Copy to...
   Switch to...
   Merge Changes...
   -----------------------------
   Blame
   Search History...
   -----------------------------
   Revert Modifications
   Resolve Conflicts
   Ignore (Unignore)

Subversion Window

Warning: TODO It does not cover Subversion properties, yet!

Subversion window initially appears docked at the position of Output window. It is open either from the Window menu or after Show Changes action invoked on projects, folders or files. If the window is invoked from the Window menu for the first time then it behaves like if it was invoked after Show All Changes action. Thus it shows the status of all open projects. If it is open from the window menu next time, it shows the status of previous objects (projects, folders, files).

The Subversion window shows the user a subset of project files that aren't up-to-date with the repository. It shows locally changed files, remotely changed files or both depending on the selected view. Individual files shown in the Versioning window can have local, remote or conflicting status. The local status represents local changes. The remote status represents remote changes. And the conflicting status represents compatible or incompatible changes made locally and remotely since the last updated on the same file.

The local status is shown with gray, green and blue color file names, the remote status with black and conflicting status with red color file names. follows the description of individual file states:

  • Conflicting Status (red):
    • Local Conflict - file already contains a conflict from a previous merge.
    • Locally/Remotely Modified - file has been modified locally and also in the repository. The merge might cause conflict.
  • Local Status:
    • Locally Deleted (gray) - file is in the repository and will be removed from the repository during next commit.
    • Locally New (green) - file is not in the repository.
    • Locally Modified (blue) - file is in the repository and has been modified locally.
  • Remote Status (black):
    • Remotely Deleted - file has been removed from the repository since the last update.
    • Remotely New - file is new in the repository since the last update.
    • Remotely Modified - file has been modified in the repository.

Figure: Subversion window showing one project after invoking the Show Changes action on Petstore project ordered by Status

+--------------------------------------------------------------------------------------------------+
| Subversion - Petstore (10 minutes ago)                                                           |
+--------------------------------------------------------------------------------------------------+
| [ All ] [ Local ] [ Remote ] | [ R ] [ D ]   [ U ] [ C ]                                         |
|--------------------------------------------------------------------------------------------------|
|______________File________________|_______Status______v_|________________Location_________________|
| Bundle.properties                | Local Conflict      | petstore/src/com/mycompany/petstore     |
| MyClassInDefaultPackage.java     | Local Conflict      | petstore/src/com/mycompany              |
| Main.java                        | Locally/Remotely Mod| petstore/src/com/mycompany/petstore     |
| Project.properties               | Locally/Remotely Mod| petstore/nbproject                      |
| PetstoreApplicationForm.java     | Locally Deleted     | petstore/src/com/mycompany/petstore     |
| PetstoreApp.java                 | Locally New         | petstore/src/com/mycompany/petstore     |
| PetstoreLib.java                 | Locally Modified    | petstorelib/src/com/mycompany/petlib    |
| PetstoreApplication.java         | Remotely Deleted    | petstore/src/com/mycompany/petstore     |
| PetstoreData.java                | Remotely New        | petstore/src/com/mycompany/petstore     |
| PetstoreAppTest.java             | Remotely Modified   | petstore/test/com/mycompany/petstore    |
|                                  |                     |                                         |
|                                  |                     |                                         |
+--------------------------------------------------------------------------------------------------+

Figure: Subversion window on Windows Classic L&F

Components of this window are:

  1. Subversion title bar - shows the name of the objects (projects, folders, files) the Show Changes action was invoked on. The name pattern is Versioning - <object-name>. If the Show Changes action was invoked on multiple objects then the title bar shows the number of objects: Versioning - <x> Objects.
  2. All toggle button - if selected all files (local, remote and conflicting) are shown in the table. If no changes are available it shows No Local/Remote Changes label centered in the table. Tooltip: Shows remote and local changes since last update. Always enabled.
  3. Local toggle button - if selected only local and conflicting files are shown in the table. If no changes are available it shows No Local Changes label centered in the table. Tooltip: Shows local changes since last update. Always enabled.
  4. Remote toggle button - if selected only remote and conflicting files are shown in the table. If no changes are available it shows No Remote Changes label centered in the table. Tooltip: Shows remote changes since last update. Always enabled.
  5. R (Refresh Status) button - refreshes the status of versioned objects (projects, folders, files) shown in the Versioning window. Button tooltip is Refresh Status. Always enabled.
  6. D (Diff) button - opens the Diff window in the editor. Depending on the selected toggle button (Local, Remote, All) it show the following difference:
    • All - shows what has changed in the repository and locally since the last update. Includes files in the local, remote and conflicting file state. For conflicting files which changed in the repository and locally, shows 2 diffs in the diff view.
    • Local - shows what the user has changed locally since the last update (difference between the current local file state and the last updated file state). Includes files in the local and conflicting file state.
    • Remote - shows what has changed in the repository since the last update (difference between the current remote file state and the last update file state). Includes files in the remote and conflicting file state.
    The diff button is enabled if the table isn't empty. Button tooltip is Diff "<object-name>" where the object name is the same as object name shown in the title bar of versioning window.
  7. U (Update) button - invokes the update action on the versioned objects (projects, folders, files) shown in the Versioning window. Button tooltip is Update "<object-name>" where the object name is the same as object name shown in the title bar of versioning window. Always enabled.
  8. C (Commit) button - invokes the commit action on the files shown in the Versioning window. Button tooltip is Commit "<object-name>" where the object name is the same as object name shown in the title bar of versioning window. Always enabled.
  9. Changes table - shows the files that has changed in the repository and locally since the last update.
    • File table column - shows the icon and file name of files that aren't up-to-date with the repository or local copy. Label is in gray, red, green, blue or black color depending on the file state (see above).
    • Status table column - shows the status of files in the table. The status is describe above.
    • Location table column - shows the folder path of files in the table starting from the top level versioned folder

Contextual Menu: File Node

Open
-------------------
Diff                  (default action)
Update
Commit...
--------------------
Mark Resolved...      (only on conflict files)
--------------------
Show Annotations
Search History...
--------------------
Exclude from Commit   (Include in Commit)
Revert Modifications  (Revert Delete)(Delete)
Ignore                (Unignore)

Diff Window

The diff window shows the difference between projects, folders or files.

Figure: Diff window showing the difference between the current remote revision of Main.java and last update copy

 -------------------
/ Petstore [ Diff ] \
+-------------------------------------------------------------------------------------------------+
| [[ Remote vs Local ]] [ Local ] [ Remote ] | |_Main.java____v_| [ N ] [ P ]  [ R ] [ U ] [ C ]  |
|------------------------------------------------------------------------------------------------^+
|______Remotely Modified 1.8 (Based on 1.7)______|_________Locally Modified (Based on 1.7)_______||
|                                                |                                               ||
|                                                |                                               #|
|                                                |                                               #|
|                                                |                                               #|
|                                                |                                               #|
|                                                |                                               ||
|                                                |                                               ||
|                                                |                                               ||
| ______ svn:mime Property _____________________ | _______ svn:mime Property ___________________ |H
| text/plain                                     | text/x-java                                   |H
|                                                |                                               V|
<-========================----------------------------------------------------------------------->+

Components of this window are:

  1. Remote vs Local toggle button - if selected, all files (conflicting, local and remote) are shown in the file combo box. The diff component shows local modifications for locally changed files, remote modifications for remotely changed files and difference between remote and local files for files changed locally and/or remotely. Tooltip: Shows remote and local changes since last update. Always enabled.
  2. Local toggle button - if selected, only local changed files are shown in the file combo box. The diff component shows local modifications since the last update or checkout. Tooltip: Shows local changes since last update. Always enabled.
  3. Remote toggle button - if selected, only remote changed files are shown in the file combo box. The diff component shows remote modifications since the last update or checkout. Tooltip: Shows remote changes since last update. Always enabled.
  4. File combo box - contains the list of differing files. The list items depend on the selected toggle button.
  5. N (Next Difference) button - scrolls the diff view to the next difference (cycles over all files). Keyboard shortcut is F12. Always enabled.
  6. P (Previous Difference) button - scrolls the diff view to the previous difference (cycles over all files). Keyboard shortcuts is Shift-F12. Always enabled.
  7. R (Refresh Diff) button - refreshes the diff of all files shown in the Diff window. Button tooltip is Refresh Diff. Always enabled.
  8. TODO E Export diff patch
  9. U (Update) button - invokes the update action on the versioned objects (projects, folders, files) shown in the Diff window. Button tooltip is Update "<object-name>" where the object name is the same as object name shown in the title bar of diff window. Always enabled.
  10. C (Commit) button - invokes the commit action on the files shown in the Diff window. Button tooltip is Commit "<object-name>" where the object name is the same as object name shown in the title bar of diff window. Always enabled.
  11. H summary side-bar highlights change positions in whole file (similar to Java source's error stripe). Highlights should match scrollbar handle. Handle positioned next to a highlight means that difference start is visible.
  12. Diff component - shows the actual difference between revisions. Titles of the diff view sides indicate specific versions that are compared. Bellow highlighted file changes there are highlihted file properties changes (if any). The following table shows the titles for different view type and file status:
    View Type File Status Left View Title Right View Title
    Remote vs Local Locally/Remotely Modified Remotely Modified X.B (Based on X.A) Locally Modified (Based on X.A)
    Local Conflict Base (X.A) Local Conflict (Based on X.A)
    Locally New No Base Revision Locally New
    Locally Deleted Base (X.A) Locally Deleted
    Locally Modified Base (X.A) Locally Modified (Based on X.A)
    Remotely New No Base Revision Remotely New X.A
    Remotely Deleted Base (X.A) Remotely Deleted
    Remotely Modified Base (X.A) Remotely Modified X.B (Based on X.A)
    Local Locally/Remotely Modified Base (X.A) Locally Modified (Based on X.A)
    Local Conflict Base (X.A) Local Conflict (Based on X.A)
    Locally New No Base Revision Locally New
    Locally Deleted Base (X.A) Locally Deteted
    Locally Modified Base (X.A) Locally Modified (Based on X.A)
    Remote Locally/Remotely Modified Base (X.A) Remotely Modified X.B (Based on X.A)
    Remotely New No Base Revision Remotely New X.A
    Remotely Deleted Base (X.A) Remotely Deleted
    Remotely Modified Base (X.A) Remotely Modified X.B (Based on X.A)

Figure: File property changes visualization on Linux Ocean L&F:

Copy Actions

This section describes the Copy actions:
  • Copy to
  • Switch to
  • Merge Changes
These provide users with functionality which replaces SVN branching and tagging and allows to fork the development.

Copy to Action

The action is enabled either for a single file or folder selection or for a multiple-files/folders selection where each selected node has to be at the same level. see multiple selection TODO

The dialog behaves depending on what kind of context the action was invoked.
  1. Single node selection
    - If the action was invoked on a single file or folder, then an eqivalent (file or folder) destination has to be specified.
    - The dialog allows to invoke four different copy variants, where each one is mapped to an eqivalent svn command as listed bellow.
            ...    
            localhost$ svn help copy
    
            copy (cp): Duplicate something in working copy or repository, remembering history.
            usage: copy SRC DST
    
              SRC and DST can each be either a working copy (WC) path or URL:
                WC  -> WC:   copy and schedule for addition (with history)
                WC  -> URL:  immediately commit a copy of WC to URL
                URL -> WC:   check out URL into WC, schedule for addition
                URL -> URL:  complete server-side copy;  used to branch & tag
            ...    
            
    We will suport only the WC-> URL and URL -> URL variants and this only for a selected context. It won't be possible to create servers side copies without a local WC.
  2. Multiple node selection
    If the context consists of more files or/and folders than only one destination folder may be specified and all selected files and folders will be copied into this one folder.
Single node selection
The copy dialog lets the user to set up from what kind of source (local or remote) to what destination (remote folder) he wants to copy the selected context.
+-----------------------------------------------------------------------------------------+
| Copy                                                                                    |
+-----------------------------------------------------------------------------------------+
|                                                                                         |
| Source:                                                                                 |
|                                                                                         |
|   (o) Local Folder/File: |_/data/work/myproject_________________________|               |
|                                                                                         |
|   ( ) Repository                                                                        |
|                                                                                         |
|       Folder/File:       |______________________________________________|               |
|                                                                                         |
|       Revision:          |_______________| [ Search... ]                                |
|                          (empty means repository HEAD)                                  |
|                                                                                         |
|   [ ] Skip "myproject" and copy only its subfolders                                     |    
|                                                                                         |
| Destination:                                                                            |  
|                                                                                         |
|   Repository Location:   |_/branches/beta_______________________________| [ Browse... ] |
|                                                                                         |                                                         
|                                                                                         |
|   Preview:               |_/branches/beta/myproject __________________________________| |
|                                                                                         |
|                                                                                         |
|   [ ] Switch to Copy                                                                    |
|                                                                                         |
|                                                                                         |
| Copy Description:                                                                       |
| +-------------------------------------------------------------------------------------+ |
| |                                                                                     | |
| |                                                                                     | |
| |                                                                                     | |
| |                                                                                     | |
| +-------------------------------------------------------------------------------------+ |
|                                                                                         |
| {w} There are local modifications which will be copied into repository.                 |
|                                                                                         |
|                                                                   [[ Copy ]] [ Cancel ] |
+-----------------------------------------------------------------------------------------+ 
where:
Source - Local Folder/File
option - with a not editable text field containing the corrensponding local path to the selected context. Is the default choice.
Source - Repository
option - with text fields containing the corrensponding Repository File/Folder and revision. Repository Folder is not editable, Revison may be specified by the user if something else as HEAD should be used as the copy commands source.
Search...
button - opens the Search Revision dialog which lets the user to pick a revision from the Files/Folders history
Skip "<selected-context>"
checkbox - enabled only if a folder is going to be copied. If checked only the contents from the selected folder will be copied into the specified destination folder, otherwise a folder with the same name as the selected folder will be created in the destination.
Destination - Repository Location
text field - mandatory, specifies the destination Repository File/Folder.
Browse...
button - opens a repository browser
Destination - Preview
text field - not editable, showing the final structure which will be created in the repository.
Switch to Copy
checkbox - enabled only if a local WC is going to be copied into a Repository Folder. If checked then the WC will be switched to the newly created Repository Folder.
Describe Copy Purpose
text area - mandatory
[!] Warning
text - with exclamation icon that appears when copying a dirty working copy

Switch to Action

The action is enabled only for single file or folder selection. It shows simple dialog:
   +---------------------------------------------------------+
   | Switch "context" to
   +---------------------------------------------------------+
   |
   | Repository Folder: [______________________[V] {Browse...]
   |
   | [ ] &Revert Local Changes
   |
   | Source Revision: [HEAD________] [Search...]
   |
   |                                [S&witch...] [Cancel ESC]
   +---------------------------------------------------------
where:
Repository Path
required, allows to specify repository path. (accepts full URL@ too)
Browse...
Shows Repository Browser starting at location selected in text field or taken from invocation context (associated repository URL).
Replace Locally Modified Files
If checked then the switch action does not attempt to merge changes between local copy and repository source but instead it replaces the content by a clean copy.
Source Revision
Allows to specify numeric revision.
Search...
button - opens the Search Revision dialog which lets the user to pick a revision from the Files/Folders history
Switch...
Enabled if selected one folder. It shows confirmation dialog and then performs the switch.

Merge Changes from Copy Action

The action is enabled only for single file or folder selection.
The dialog it shows may exists in three different variants:
  • to merge changes into the working copy from a revision range from one specific URL
        
       +----------------------------------------------------------------------------------------+
       | Merge into Working Copy
       +----------------------------------------------------------------------------------------+
       |
       | [ Merge from one Repository Folder __________[V]
       |
       | Merge into Working Copy the changes from
       |   
       | Repository Folder    [__________________[V]  [Browse...]
       | between Revision     [__________]  [Search...]
       |                      (empty means repository HEAD)
       |
       | and Revision         [__________]  [Search...]
       |                      (empty means repository HEAD)   
       |
       | Preview: 
       | +---------------------------------------------------------------+
       | |                          
       | |                --r1=========================r2---->   
       | |               /
       | |              /
       | |  ---------------------------------------------(BASE)r1====r2>    
       | |                                                            (wc) 
       | +---------------------------------------------------------------+
       |
       |                                                                    [Merge] [Cancel ESC] 
       +-----------------------------------------------------------------------------------------+    
       
  • to merge changes into the working copy from a revision range between two different URLs
       +----------------------------------------------------------------------------------------+
       | Merge into Working Copy
       +----------------------------------------------------------------------------------------+
       |
       | [ Merge from two different Folders ___________[V]
       |
       | Merge into Working Copy the changes between
       |
       | Repository Folder      [__________________[V]  [Browse...]
       | Revision               [__________]  [Search...]
       |                        (empty means repository HEAD)
       |
       | and
       | Reostory Folder        [__________________[V]  [Browse...]
       | Revision               [__________]  [Search...]
       |                        (empty means repository HEAD)
       |
       | Preview: 
       | +---------------------------------------------------------------+
       | |                        ====================r2--->
       | |                      //                    
       | |              --r1=====-------------------------->
       | |             /
       | |            /
       | |   -------------------------------------------(BASE)r1====r2>      
       | |                                                          (wc)
       | +---------------------------------------------------------------+
       |
       |                                                                    [Merge] [Cancel ESC]
       +-----------------------------------------------------------------------------------------+
       
  • to merge changes into the working copy from a specific URL since the revision in whitch the URL was created
       +----------------------------------------------------------------------------------------+
       | Merge with Working Copy
       +----------------------------------------------------------------------------------------+
       |
       | [ Merge from Repository Folder since origin [V]
       |
       | Merge into Working Copy the changes from
       |   
       | Repository Folder    [__________________[V]  [Browse...]
       | between the revision it was created 
       | and Revision:        [__________]  [Search...]
       |                      (empty means repository HEAD)         
       | 
       | Preview: 
       | +---------------------------------------------------------------+
       | |                          
       | |              ==========================r2---->   
       | |            //
       | |           //
       | |  --------r1--------------------------------(BASE)r1====r2>    
       | |                                                         (wc)
       | +---------------------------------------------------------------+
       |
       |                                                                    [Merge] [Cancel ESC]
       +-----------------------------------------------------------------------------------------+    
        
where:
Combobox
to choose the wished merge variant
Repository Folder
takes path from repository root (accepts full URL@ too). keeps 8 items history.
Browse
Opens Revision Browser starting at location selected in text field or taken from invocation context (associated repository URL).
Revision
number or date
Search...
button - opens the Search Revision dialog which lets the user to pick a revision from the Files/Folders history
Preview
presents the choosen variant in a graphical form
Merge
Merges changes between working copy and selected revision into the working copy.

Revert Modifications

The action is enabled on any file or folder selection. Multiselection is also allowed.
The user may, through the dialog it shows, revert modifications in generely two different ways.
  • revert local changes in a working copy
  • revert the changes made in one previous revision or in a range of previous revisions
      
   +----------------------------------------------------------------------------------------+
   | Revert Modifications
   +----------------------------------------------------------------------------------------+
   |
   | Revert Modifications from:
   |
   | (.) Local Changes   
   |
   | ( ) Previous Commit(s)
   |     between Revision [___________]  [Search...]   [x] inclusive
   |     and Revision     [___________]  [Search...]     
   |                      (empty means repository HEAD)   
   |
   |                                                                    [Revert] [Cancel ESC]
   +-----------------------------------------------------------------------------------------+    
where:
Local Changes
option to revert the local changes
Previous Commit(s)
option to revert changes made in a range or eventually in one previuos revision
Revision
number or date; After the 'between Revision' field is filled with a value for the first time the same value will be automaticaly inserted in the second revision field.
Search...
button - opens the Search Revision dialog which lets the user to pick a revision from the Files/Folders history
inclusive
checkbox if the first specified revision also has to be reverted
Revert
Reverts the changes between the specified revisions

Properties

Properties Action

Opens a view showing a selected node and its children from the Project Explorer.

The view consist of two main components;
  • a tree view containing the subtree from the Project explorer. The user may select or multiselect any node
  • an associated Property Sheet displaying the Properties and the Info Attributes for the actuall selection from the tree view
    +--------------------------------------------------------------------------------
    | Subversion Properties
    +--------------------------------------------------------------------------------
    | File                              | Properties
    |-----------------------------------+--------------------------------------------
    |   My Java App                     | [+] System Properties                      
    |     +--src                        +-----------------------+--------------------
    |        +--package1                | Ignore                |[ ]            [...]
    |           +--package2             +-----------------------+--------------------
    |              +--file1.java        | Externals             |               [...]
    |              +--file2.java        +-----------------------+--------------------
    |              +--file3             | ...                   |
    |              +--picture1.gif      +-----------------------+--------------------
    |              +--picture2.gif      | [+] Info                                   
    |     +--nbproject                  +-----------------------+--------------------
    |        +--private                 | URL                   |svn://svn.host.org/...
    |           |--private.properties   +-----------------------+--------------------
    |        |--genfiles.properties     | Revision              | 12345
    |        |--project.xml             +-----------------------+--------------------
    |        |--build-impl.xml          | ...                   |
    |     +--lib                        +--------------------------------------------
    |                                   | [+] Other                                  
    |                                   +-----------------------+--------------------
    |                                   | user property 1       | value 1       [...]
    |                                   +-----------------------+--------------------
    |                                   | user property 2       | value 2       [...]
    |                                   +-----------------------+--------------------
    |                                   | ...                   |
    |--------------------------------------------------------------------------------
    |                                                                  [add] [remove]
    +--------------------------------------------------------------------------------
where:
File
is the tree displaying the selected node and its subtree from the Project Explorer
Properties
the Property Sheet displaying the properties assodiated with the selected node from the file tree
  • System Properties - property category containing all system properties for the selected file
  • Info - property category containing all attributes from the output given by the svn info command
  • Other - property category containing all user defined properties
add
button - adds a new User Property. I case of a folder this also can be done recursively for the whole tree.
remove
button - removes a User Property

Options

There should be an UI to setup some general svn settings for:
  1. Branch/Tag Annotations
  2. URL specific Connection Setup
  3. Other svn settings
This should be implemented in the Basic Options section in the IDEs Option dialog.

Branch/Tag Annotations

Subversion has a very loose and low level support for the branching and tagging concepts. It doesn't use explicit names for branches (tags). A file that has to be branched (tagged) is just copied into an another folder. If we want to annotate a branched file, then the first thing we can do is to try to get a name (description) for a branch from it's folders path relying on the by subversion recommended repository layout (path) patterns. But regarding the fact, that a branch may be stored under any folder, this cat get quite problematic. Even more if we want such annotation to be more descriptive as a folders name may be.

Example:
the default regex to match a brach name would be: .*/branches/(.+?)/.*
  • in case we have a repository folder structure like /branches/release55/subversion we get the annotation release55
  • in case we have a repository folder structure like /branches/netbeans/release55/subversion we get the annotation netbeans. Nobody is going to know what that's supposed to mean

The user should be, in cases when the default annotation for "tags" and "branches" doens't work as wished, able to specify/change if and how a file(s) node should be annotated depending on the repository folder it comes from.

This could be done by specifying the:
  • URL Pattern - regex pattern to match a URL (folder path)
  • Annotation - this should be one of the following:
    • a simple string
    • a reference to a group from the Folder Pattern regex
    • a combination from references and strings
    +----------------------------------------------------------------------------+   +
    |                                                                            |   |   Example:
    | +----------------------------------+--------------------------+            |   |
    | |URL Pattern                       | Annotation               | [ Up     ] |   |   real life folder path              -> Annotation
    | +----------------------------------+--------------------------+ [ Down   ] |   |
    | | .*/exp/.*                        | experimental             |            |   |   /branches/exp/subversion           -> experimental
    | +----------------------------------+--------------------------+            |   |
    | | .*/branches/exp/(.+?)/.*         | \1-experimental          |            |   |   /branches/exp/release55/subversion -> release55-experimental         
    | +----------------------------------+--------------------------+            |   |
    | | .*/(branches|tags)/(.+?)/.*      | \2                       |            |   |   /branches/release55/subversion     -> release55        
    | +----------------------------------+--------------------------+ [ Add    ] |   |
    | | ...                              |                          | [ Edit   ] |   |
    | +----------------------------------+--------------------------+ [ Remove ] |   |
    |                                                                            |   |
    |                                            [ Apply ] [ Reset to Defaults ] |   |    
    |                                                                            |   |    
    
where:
URL Pattern
table column - contains a regex pattern to match a folder path.
Annotation
table column - specifies the annotation for every file which lies under a repository folder matching with the regex from the column Folder Pattern.
Add, Edit
buttons - open a simple dialog to add or edit a new row
Remove
button - to remove the selected row
Up, Down
buttons - to move the table rows up and down. It's always the first matching pattern which will be applied.
Apply
button - applies the changes (fires a event so the nodes in the IDe will be reannotated)
Reset to Defaults
button - resets the table to the default setting
        URL Pattern                 | Annotation 
        ----------------------------+-----------
        .*/(branches|tags)/(.+?)/.* | \1
    

Connection Setup

This option would let the user to edit the connection settings for each URL which was once setup in the system (checkout, import, ...). In general it would consist from a combobox containing the known URLs and a details section describing the protocol specific settings for the selected URL. (see also checkout dialog)
    +----------------------------------------------------------------
    |
    | Specify Subversion repository location.
    |
    | Repository URL: [svn://server/repository____[v] [ Remove ]
    |
    | 
    | For the URL connection details view see checkout dialog
    | 
    |
    
where:
Repository URL
combobox - contains all known URLs
Remove
button - removes the selected URL from the stored settings
URL connection details
protocol specific settings for a url (password, username, external ssh tunnel command,...)

Other Settings

    +------------------------------------------------------------------------------------------------------
    |
    | SVN executable binary path [ /usr/local/bin/svn _______________ ]    
    |
    |   
    
TODO: add also global ignores?

Open Issues

  • Main Menu, should it contain both CVS and Subversion?
    compare to popup menu, taken from context: either CVS or Subversion.

See Also

Teepee project

Project Features

About this Project

VersionControl was started in November 2009, is owned by tpavek, and has 102 members.
By use of this website, you agree to the NetBeans Policies and Terms of Use (revision 20160708.bf2ac18). © 2014, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo
 
 
Close
loading
Please Confirm
Close