GithubHelp home page GithubHelp logo

git-as-svn / git-as-svn Goto Github PK

View Code? Open in Web Editor NEW
213.0 213.0 46.0 11.95 MB

Subversion frontend server for Git repositories

Home Page: https://git-as-svn.github.io/git-as-svn/htmlsingle/git-as-svn.html

License: GNU General Public License v2.0

Shell 1.04% Makefile 0.09% Python 0.19% Kotlin 98.68%
git git-lfs subversion svn

git-as-svn's Introduction

git-as-svn

Build Status Download Gitter chat

What is it?

git-as-svn emulates Subversion repository on top of Git repository.

It allows you to work with Git repositories using any tool compatible with Subversion 1.8+: console svn, TortoiseSVN, SvnKit, SmartSVN, etc.

Documentation

git-as-svn user manual includes installation and configuration instructions: HTML, PDF, EPUB

Building from source

From the root of the source tree, run:

./gradlew assembleDist

Distribution files will be created in build/distributions directory.

Running from source

./gradlew run

git-as-svn's People

Contributors

bozaro avatar dependabot[bot] avatar forcegroup avatar gitter-badger avatar michaeljcole avatar ngenesis avatar slonopotamus avatar tsl0922 avatar zeripath avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

git-as-svn's Issues

Bug: svn up doesnt remove file

bozaro@landfill:/tmp/test/git-as-svn$ echo > test.txt
bozaro@landfill:/tmp/test/git-as-svn$ svn add test.txt 
A         test.txt
bozaro@landfill:/tmp/test/git-as-svn$ svn commit -m "Add new file"
Добавляю          test.txt
Передаю данные .
Committed revision 58.
bozaro@landfill:/tmp/test/git-as-svn$ svn up -r 57
Updating '.':
В редакции 57.
bozaro@landfill:/tmp/test/git-as-svn$ ls -l test.txt
-rw-rw-r-- 1 bozaro bozaro 1 авг.  15 00:50 test.txt
bozaro@landfill:/tmp/test/git-as-svn$ 

svn log <nonexistent> must return error

Real svn:

$ svn log svn://localhost/qwe
svn: E160013: File not found: revision 477903, path '/qwe'
$

git-as-svn:

$ svn log svn://localhost/nonexistent
------------------------------------------------------------------------
$

Invalid unlock-many error response

Original svn:

( success ( ( ) 0: ) )
( failure ( ( 160040 32:No lock on path '/README.md' 0: 0 ) ) )
done
( success ( ) )

Git as svn:

( success ( ( ) 0: ) )
done
( failure ( ( 160040 28:svn: E160040: /README.md 0: 0 ) ) ) 

Improve socket error handling

This should be silently handled, without writing exception to log:

[pool-1-thread-47] ERROR svnserver.server.SvnServer - Command execution error
org.tmatesoft.svn.core.SVNException: svn: E204900: Unknown error
at svnserver.server.command.DeltaCmd$ReportPipeline$1.textDeltaChunk(DeltaCmd.java:379)
at org.tmatesoft.svn.core.io.diff.SVNDeltaGenerator.sendDelta(SVNDeltaGenerator.java:273)
at org.tmatesoft.svn.core.io.diff.SVNDeltaGenerator.sendDelta(SVNDeltaGenerator.java:187)
at svnserver.server.command.DeltaCmd$ReportPipeline.updateFile(DeltaCmd.java:357)
at svnserver.server.command.DeltaCmd$ReportPipeline.updateEntry(DeltaCmd.java:460)
at svnserver.server.command.DeltaCmd$ReportPipeline.updateDir(DeltaCmd.java:301)
at svnserver.server.command.DeltaCmd$ReportPipeline.updateEntry(DeltaCmd.java:458)
at svnserver.server.command.DeltaCmd$ReportPipeline.sendResponse(DeltaCmd.java:215)
at svnserver.server.command.DeltaCmd$ReportPipeline.complete(DeltaCmd.java:183)
at svnserver.server.command.DeltaCmd$ReportPipeline$$Lambda$30/652706217.process(Unknown Source)
at svnserver.server.step.CheckPermissionStep.process(CheckPermissionStep.java:39)
at svnserver.server.SvnServer.serveClient(SvnServer.java:150)
at svnserver.server.SvnServer.lambda$run$0(SvnServer.java:120)
at svnserver.server.SvnServer$$Lambda$8/319518541.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:121)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at svnserver.parser.token.StringToken.write(StringToken.java:49)
at svnserver.parser.SvnServerWriter.binary(SvnServerWriter.java:68)
at svnserver.parser.SvnServerWriter.binary(SvnServerWriter.java:63)
at svnserver.server.command.DeltaCmd$ReportPipeline$1.textDeltaChunk(DeltaCmd.java:374)
... 16 more

Error on commiting binary file (svn:mime-type = "application/octet-stream")

[pool-1-thread-8] WARN svnserver.server.command.DeltaCmd - Found error in cmd close-edit: svn: E165001: Can't commit entry: /46245 1786331720.png
Invalid svn properties found.
Expected:
Actual:
  svn:mime-type = "application/octet-stream"

[pool-1-thread-8] ERROR svnserver.server.SvnServer - Command execution error
org.tmatesoft.svn.core.SVNException: svn: E165001: Can't commit entry: /46245 1786331720.png
Invalid svn properties found.
Expected:
Actual:
  svn:mime-type = "application/octet-stream"

    at svnserver.repository.git.GitRepository$GitPropertyValidator.checkProperties(GitRepository.java:521)
    at svnserver.repository.git.GitRepository$GitCommitBuilder.lambda$saveFile$4(GitRepository.java:630)
    at svnserver.repository.git.GitRepository$GitCommitBuilder$$Lambda$51/1254091218.accept(Unknown Source)
    at svnserver.repository.git.GitRepository$GitCommitBuilder.validateProperties(GitRepository.java:689)
    at svnserver.repository.git.GitRepository$GitCommitBuilder.commit(GitRepository.java:670)
    at svnserver.repository.git.GitRepository$GitCommitBuilder.commit(GitRepository.java:530)
    at svnserver.server.command.CommitCmd$EditorPipeline.closeEdit(CommitCmd.java:498)
    at svnserver.server.command.CommitCmd$EditorPipeline$$Lambda$47/1344807088.processCommand(Unknown Source)
    at svnserver.server.command.LambdaCmd.process(LambdaCmd.java:39)
    at svnserver.server.command.CommitCmd$EditorPipeline.editorCommand(CommitCmd.java:541)
    at svnserver.server.command.CommitCmd$EditorPipeline$$Lambda$49/1774732771.process(Unknown Source)
    at svnserver.server.SvnServer.serveClient(SvnServer.java:150)
    at svnserver.server.SvnServer.lambda$run$5(SvnServer.java:120)
    at svnserver.server.SvnServer$$Lambda$11/2061175267.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Revision 225e2cb from master

Copy detection

We currently forget about copying after commit is made. org.eclipse.jgit.diff.RenameDetector contains detection algorithm. Warning: this feature is very likely to require an on-disk cache (otherwise, performance issues are expected).

Besides internal storage, the following features have to be supported:

  • DeltaParams.sendCopyFromArgs
  • LogCmd.strictNode
  • LogCmd changed-path-entry->copy-path/copy-rev

SvnServer.shutdown doesn't wait for worker threads to exit

Subj. Beware that worker threads are likely to be blocked waiting for I/O and so can't check 'stopped' flag.

Suggestion:

  1. SvnServer.shutdown sets stopped = true
  2. SvnServer.shutdown closes serverSocket to interrupt main server thread
  3. SvnServer.shutdown closes sockets for all worker threads
  4. SvnServer calls ExecutorService.shutdown
  5. SvnServer calls ExecutorService.awaitTermination to ensure all worker threads have stopped
  6. SvnServer.serveClient doesn't need to check stopped flag

svn move doesn't work

$ svn mv -m "move" svn://localhost/README.md svn://localhost/foo.md
svn: E150003: svn: E150003: File revision is not defined: /README.md

java.io.IOException: Unexpected token: String{"svn://localhost/README.md"} (expected: svnserver.parser.token.NumberToken)
at svnserver.parser.SvnServerParser.readItem(SvnServerParser.java:84)
at svnserver.parser.MessageParser.parseInts(MessageParser.java:140)
at svnserver.parser.MessageParser$$Lambda$7/2109934540.parse(Unknown Source)
at svnserver.parser.MessageParser.parse(MessageParser.java:50)
at svnserver.parser.MessageParser.parseObject(MessageParser.java:68)
at svnserver.parser.MessageParser.parse(MessageParser.java:52)
at svnserver.server.command.CommitCmd$EditorPipeline.editorCommand(CommitCmd.java:402)
at svnserver.server.command.CommitCmd$EditorPipeline$$Lambda$39/1400552140.process(Unknown Source)
at svnserver.server.SvnServer.serveClient(SvnServer.java:114)
at svnserver.server.SvnServer.lambda$start$0(SvnServer.java:83)
at svnserver.server.SvnServer$$Lambda$2/1233705144.run(Unknown Source)
at java.lang.Thread.run(Thread.java:744)

svn blame <nonexistent> crashes

$ svn blame svn://localhost/nonexistent
svn: E235000: In file 'subversion/libsvn_client/blame.c' line 731: assertion failed (frb.last_filename != NULL)
$

svn co -r0 crashes client

$ svn co -r0 svn://localhost/
svn: E235000: In file 'subversion/libsvn_wc/wc_db.c' line 1721: assertion failed (SVN_IS_VALID_REVNUM(changed_rev))

On-disk tree cache

We can't handle big repositories because we store trees for all commits in memory. They should be offloaded to disk.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.