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).
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:
- Open Project button (O) - opens up the Open
Project dialog.
- Create Project button (C) - opens up the New
Project wizard.
- 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:
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.
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
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...
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)
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)
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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
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)
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:
- 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.
- 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.
- 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.
- File combo box - contains the list of differing files. The list items depend on the selected toggle button.
- N (Next Difference) button - scrolls the diff view to the
next difference (cycles over all files). Keyboard shortcut is F12. Always enabled.
- P (Previous Difference) button - scrolls the diff view to
the previous difference (cycles over all files). Keyboard shortcuts is Shift-F12. Always enabled.
- R (Refresh Diff) button - refreshes the diff of
all files shown in the Diff window. Button tooltip is Refresh
Diff. Always enabled.
- TODO E Export diff patch
- 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.
- 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.
- 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.
- 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.
-
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.
-
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:
- Branch/Tag Annotations
- URL specific Connection Setup
- 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