[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Tree conflicts - command-line UI

From: Julian Foad <julianfoad_at_btopenworld.com>
Date: Fri, 12 Sep 2008 14:48:16 +0100

Some sketches of what I think the UI should be.
...

The UI of "svn" with respect to tree conflicts consists of (primarily
the output of):

RAISE
  - svn update
  - svn switch
  - svn merge

ENQUIRE
  - svn status (1-char/1-line summary)
  - svn info (details)
  - ls, cat (disk state, outside of Subversion)

COMMIT
  - svn commit (failure because of unresolved conflict)

RESOLVE
  - svn resolved
  - svn resolve --accept=X
  - svn up/sw/merge (interactive resolution)

XML output is not considered here.

n.b. The "Ready now" output shown here is indicative of what the
tree-conflicts branch currently does (around now), but not an actual
transcript.

=============================================================
== RAISE: svn update / switch
=============================================================

Desired:
[[[
$ svn update # incoming mod onto local del
C parent/victim
]]]

Ready now:
[[[
$ svn update # incoming mod onto local del
U parent/victim
C parent
]]]

To do:
- report a conflict only on the victim
- skip processing in conflicted dirs

=============================================================
== RAISE: svn merge
=============================================================

=============================================================
== ENQUIRE: svn status
=============================================================

Desired:
[[[
$ svn status
CC parent/victim1
CC parent/victim2
]]]

Ready now:
[[[
$ svn status
A parent/victim1
M parent/victim2
C parent
]]]

Alternatives:
- Other status letters (T, V), and/or a third column.

=============================================================
== ENQUIRE: svn info
=============================================================

Ready now:
[[[
$ svn info svn-test-work/working_copies/info_tests-1/A/D/G
Path: svn-test-work/working_copies/info_tests-1/A/D/G
URL:
file:///home/julianfoad/build/subversion-tc3/svn-test-work/repositories/info_tests-1/A/D/G
Repository Root:
file:///home/julianfoad/build/subversion-tc3/svn-test-work/repositories/info_tests-1
Repository UUID: 85eb87c9-d755-0410-942d-75d89e77a365
Revision: 2
Node Kind: directory
Schedule: normal
Last Changed Author: jrandom
Last Changed Rev: 2
Last Changed Date: 2008-09-01 17:06:35 +0100 (Mon, 01 Sep 2008)
Tree conflicts:
The update attempted to delete 'rho'
(possibly as part of a rename operation).
You have edited 'rho' locally.

The update attempted to delete 'tau'
(possibly as part of a rename operation).
You have deleted 'tau' locally.
Maybe you renamed it?

The update attempted to edit 'pi'.
You have deleted 'pi' locally.
Maybe you renamed it?

$ svn info svn-test-work/working_copies/info_tests-1/A/D/G/rho
[...]
# nothing unusual shown
]]]

Desired:
- Rather than listing multiple conflicts on a parent dir, list the
single conflict of which this node is the victim:
[[[
Tree Conflict Operation: update
Tree Conflict Incoming Change: delete
Tree Conflict Older URL:
file:///home/julianfoad/build/subversion-tc3/svn-test-work/repositories/info_tests-1/A/D/G/rho_at_120
Tree Conflict Newer URL:
file:///home/julianfoad/build/subversion-tc3/svn-test-work/repositories/info_tests-1/A/D/G/rho_at_130
Tree Conflict Previous Working File: rho.mine
]]]

Alternatives:
- provide copies of the conflicted items, rather than URL_at_REV references
to them. Or provide both.
[[[
Tree Conflict Operation: update
Tree Conflict Incoming Change: delete
Tree Conflict Previous Base File: 'rho.r120'
Tree Conflict Previous Working File: 'rho.mine'
Tree Conflict Current Base File: <none>
]]]

=============================================================
== ENQUIRE: disk state
=============================================================

Scenario: incoming edit onto local delete of file 'rho'.

Desired:
[[[
$ ls
          # 'rho' is absent: is scheduled for delete
          # 'rho.mine' also absent: was scheduled for delete
rho.r120
rho.r130
]]]

Ready now:
[[[
$ ls
rho # but is scheduled for delete!
]]]

=============================================================
== COMMIT: failure because of unresolved conflict
=============================================================

Ready now:
[[[
$ svn commit
svn: Commit failed (details follow):
svn: Aborting commit: 'tree_conflict_tests-1/branch1/fP' remains in
conflict
]]]

Alternatives:
- List all the nodes still in conflict.
- Give full details of each unresolved tree conflict.

Status:
- Good enough for now.

=============================================================
== RESOLVE: svn resolved
=============================================================

Ready now:
[[[
$ svn status
C branch1/fP
A + branch1/fP/F2-local
D branch1/fP/F

$ svn resolved branch1/fP # fP is the parent dir of the victims
Resolved conflicted state of 'branch1/fP'
]]]

To do:
- The target of the "resolved" command should be a single victim rather
than a parent dir.

=============================================================
== RESOLVE: svn resolve
=============================================================

=============================================================
== RESOLVE: interactive resolution
=============================================================

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: dev-help_at_subversion.tigris.org
Received on 2008-09-12 15:48:36 CEST

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.