Has anyone had any luck getting TortoiseSVN working with a Phabricator hosted SVN server?


#1

I have set up a hosted Subversion repository within Phabricator/Diffusion. SvnSync from the original repo is still ongoing. I can browse the repository (svn list) from within an MSys2 command line environment. However when using TortoiseSVN I cannot browse the repository.

Phabricator is running within a Docker container.

Running the SSH daemon in full debug mode shows that TortoiseSVN appears to be closing the connection. I’d love to know what TortoiseSVN and the SVN server are saying to each other, but of course all comms are SSH encrypted.

See https://stackoverflow.com/questions/50924254/cant-get-tortoise-svn-to-use-ssh-correctly for more details.

Has anyone got TortoiseSVN running with Phabricator? Is there anything non-obvious (I.e. not covered by every SVN+SSH guide out there) that I need to configure? Is there anything Phabricator specific?


#2

TortoiseSVN is, as far as I am aware, the number one Windows GUI Subversion client. I am quite shocked and horrified that it doesn’t work with Phabricator. Not that I think it is Phabricator’s fault, but surely while developing Phabricator someone tested this?

Has anyone out there got TortoiseSVN working with Phabricator?

Is there a test server I can run my TortoiseSVN against to make sure it isn’t my server set-up?

Are there any devs interested in helping improve compatibility with a leading third party client (TortoiseSVN)?


#3

You can create a free test server at https://www.phacility.com/ to test it out.

None of the core team is using Windows or SVN, so it’s possible that things don’t work correctly.


#4

I installed and used TortoiseSVN recently in connection with PHI660 / T13140 without issue, except for the bug mentioned in that task. The report from the originating install implied that multiple members of their organization regularly use TortoiseSVN without issue, bug excepted.


#5

Thanks for your replies.

What is PHI660 / T13140? Where can I look it up or is it not relevant to this problem?


#6

https://secure.phabricator.com/T13140


#7

Thanks.

Awesome bug report!

Is the DebugView tool mentioned in the bug report the SysInternals one or something else? An internet search found several.

The bug report mentioned using pageant. I found that a total no go, much worse than putting the private key in the PuTTY session. I wonder if that is part of the same problem I am having. Did you use a PuTTY session at all or just put the full URL with username and so-on rather than the session name?

Lots of other useful info and links in the bug report too.

Thanks for all your help on this.


#8

In the bug report it says “…logging the protocol frames…”.

How? Phabricator insists on using SSH for Subversion, hence all the faffing about with PuTTY. So the wire data is encrypted. How do you log the protocol frames?

I thought my problem might be because I had two SSH sessions for Phabricator, one for Subversion on port 2222 and an admin one for normal SSH on port 22. However deleting the normal one didn’t help.


#9

I use this https://github.com/CobaltFusion/DebugViewPP there is a download link to a pre build binary https://github.com/CobaltFusion/DebugViewPP/releases


#10

Wow, that looks cool. I like the way you can attach it to SSH ports - that will really help with this.

Thankyou very much!


#11

I can’t see how to connect DebugView++ to an SSH port, let alone sniff an existing connection to debug what is being sent.

I have managed to connect manually to Phabricator using TortoisePlink and get sane responses the same as I got with command line SSH in a Bash shell when debugging that, so it looks like a TortoiseSVn issue for sure. I have started a thread in their forum.


#12

This looks like a Phabricator bug…

I sniffed the traffic for a non SSH connection, adapted it a little, and then manually pumped it in using TortoisePlink on the command line. This is what happened…

( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay inherited-props ephemeral-txnprops file-revs-reverse ) ) ) ( 2 ( edit-pipeline svndiff1 accepts-svndiff2 absent-entries depth mergeinfo log-revprops ) 54:svn+ssh://phabricator.dynautics.local/source/Dynautics 38:SVN/1.10.0-dev (x64-microsoft-windows) ( 24:TortoiseSVN-1.10.0.28176 ) )
( success ( ( ANONYMOUS EXTERNAL ) 36:4a5ca636-0b49-4f9e-8811-fcb4d745bd92 ) ) ( get-latest-rev ( ) )
[2018-07-13 14:44:23] ERROR 2: Illegal string offset 'value' at [/var/lib/phabricator/phabricator/src/applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php:334]
arcanist(head=master, ref.master=b199ca808660), phabricator(head=master, ref.master=b8b2d1672dc3), phutil(head=master, ref.master=20eff1c8d14f)
  #0 DiffusionSubversionServeSSHWorkflow::willReadMessageCallback(PhabricatorSSHPassthruCommand, array) called at [<phabricator>/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php:223]
  #1 PhabricatorSSHPassthruCommand::willReadData(string) called at [<phabricator>/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php:167]
  #2 PhabricatorSSHPassthruCommand::execute() called at [<phabricator>/src/applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php:186]
  #3 DiffusionSubversionServeSSHWorkflow::executeRepositoryOperations() called at [<phabricator>/src/applications/diffusion/ssh/DiffusionSSHWorkflow.php:188]
  #4 DiffusionSSHWorkflow::execute(PhutilArgumentParser) called at [<phabricator>/scripts/ssh/ssh-exec.php:284]
[2018-07-13 14:44:23] ERROR 2: Illegal string offset 'value' at [/var/lib/phabricator/phabricator/src/applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php:335]
arcanist(head=master, ref.master=b199ca808660), phabricator(head=master, ref.master=b8b2d1672dc3), phutil(head=master, ref.master=20eff1c8d14f)
  #0 DiffusionSubversionServeSSHWorkflow::willReadMessageCallback(PhabricatorSSHPassthruCommand, array) called at [<phabricator>/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php:223]
  #1 PhabricatorSSHPassthruCommand::willReadData(string) called at [<phabricator>/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php:167]
  #2 PhabricatorSSHPassthruCommand::execute() called at [<phabricator>/src/applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php:186]
  #3 DiffusionSubversionServeSSHWorkflow::executeRepositoryOperations() called at [<phabricator>/src/applications/diffusion/ssh/DiffusionSSHWorkflow.php:188]
  #4 DiffusionSSHWorkflow::execute(PhutilArgumentParser) called at [<phabricator>/scripts/ssh/ssh-exec.php:284]
[2018-07-13 14:44:23] EXCEPTION: (Error) Cannot use string offset as an array at [<phabricator>/src/applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php:344]
arcanist(head=master, ref.master=b199ca808660), phabricator(head=master, ref.master=b8b2d1672dc3), phutil(head=master, ref.master=20eff1c8d14f)
  #0 DiffusionSubversionServeSSHWorkflow::willReadMessageCallback(PhabricatorSSHPassthruCommand, string) called at [<phabricator>/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php:223]
  #1 PhabricatorSSHPassthruCommand::willReadData(string) called at [<phabricator>/src/infrastructure/ssh/PhabricatorSSHPassthruCommand.php:167]
  #2 PhabricatorSSHPassthruCommand::execute() called at [<phabricator>/src/applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php:186]
  #3 DiffusionSubversionServeSSHWorkflow::executeRepositoryOperations() called at [<phabricator>/src/applications/diffusion/ssh/DiffusionSSHWorkflow.php:188]
  #4 DiffusionSSHWorkflow::execute(PhutilArgumentParser) called at [<phabricator>/scripts/ssh/ssh-exec.php:284]

Admittedly I skipped the following before sending the fatal “get-latest-rev” command:

( ANONYMOUS ( 21:YW5vbnltb3VzQE9rcmE= ) )

which should return:

( success ( ) ) ( success ( 36:2a5dbed0-91aa-734c-96e1-ee4cbcb244ea 13:svn://unicorn ( mergeinfo ) ) )