git-as-svn / git-as-svn

Subversion frontend server for Git repositories

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

If LFS disabled in GitLab project, svn operations fail if fileLfs enabled

wehall opened this issue · comments

With LFS disabled in project settings and !fileLfs enabled in git-as-svn, svn operations fail with "403 Forbidden" while listing LFS locks:

2020-04-30T09:55:56,042  WARN [SvnServer-thread-2] (CommitCmd.java:654) - Exception during in cmd close-edit
ru.bozaro.gitlfs.client.exceptions.ForbiddenException: https://git.isis.vanderbilt.edu/ehall/plain-html.git/info/lfs/locks?refspec=master - 403 (Forbidden)
        at ru.bozaro.gitlfs.client.Client.doRequest(Client.java:132) ~[gitlfs-client-0.16.0.jar:?]
        at ru.bozaro.gitlfs.client.Client.lambda$listLocks$10(Client.java:429) ~[gitlfs-client-0.16.0.jar:?]
        at ru.bozaro.gitlfs.client.Client.doWork(Client.java:93) ~[gitlfs-client-0.16.0.jar:?]
        at ru.bozaro.gitlfs.client.Client.listLocks(Client.java:429) ~[gitlfs-client-0.16.0.jar:?]
        at svnserver.ext.gitlfs.storage.network.LfsHttpStorage.getLocks(LfsHttpStorage.java:124) ~[git-as-svn.jar:?]
        at svnserver.ext.gitlfs.storage.network.LfsHttpStorage.getLocks(LfsHttpStorage.java:228) ~[git-as-svn.jar:?]
        at svnserver.repository.git.GitWriter$GitCommitBuilder.checkLock(GitWriter.java:281) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.lambda$checkLock$10(CommitCmd.java:596) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.updateDir(CommitCmd.java:566) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.lambda$closeEdit$7(CommitCmd.java:527) ~[git-as-svn.jar:?]
        at svnserver.repository.git.GitRepository.wrapLock(GitRepository.java:130) ~[git-as-svn.jar:?]
        at svnserver.repository.git.GitRepository.wrapLockWrite(GitRepository.java:121) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.closeEdit(CommitCmd.java:521) ~[git-as-svn.jar:?]
        at svnserver.server.command.LambdaCmd.process(LambdaCmd.java:40) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.editorCommand(CommitCmd.java:649) ~[git-as-svn.jar:?]
        at svnserver.server.SvnServer.serveClient(SvnServer.java:246) ~[git-as-svn.jar:?]
at svnserver.server.SvnServer.lambda$run$1(SvnServer.java:208) ~[git-as-svn.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_252]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_252]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]
2020-04-30T09:55:56,043  WARN [SvnServer-thread-2] (SvnServer.java:212) - Exception:
ru.bozaro.gitlfs.client.exceptions.ForbiddenException: https://git.isis.vanderbilt.edu/ehall/plain-html.git/info/lfs/locks?refspec=master - 403 (Forbidden)
        at ru.bozaro.gitlfs.client.Client.doRequest(Client.java:132) ~[gitlfs-client-0.16.0.jar:?]
        at ru.bozaro.gitlfs.client.Client.lambda$listLocks$10(Client.java:429) ~[gitlfs-client-0.16.0.jar:?]
        at ru.bozaro.gitlfs.client.Client.doWork(Client.java:93) ~[gitlfs-client-0.16.0.jar:?]
        at ru.bozaro.gitlfs.client.Client.listLocks(Client.java:429) ~[gitlfs-client-0.16.0.jar:?]
        at svnserver.ext.gitlfs.storage.network.LfsHttpStorage.getLocks(LfsHttpStorage.java:124) ~[git-as-svn.jar:?]
        at svnserver.ext.gitlfs.storage.network.LfsHttpStorage.getLocks(LfsHttpStorage.java:228) ~[git-as-svn.jar:?]
        at svnserver.repository.git.GitWriter$GitCommitBuilder.checkLock(GitWriter.java:281) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.lambda$checkLock$10(CommitCmd.java:596) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.updateDir(CommitCmd.java:566) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.lambda$closeEdit$7(CommitCmd.java:527) ~[git-as-svn.jar:?]
        at svnserver.repository.git.GitRepository.wrapLock(GitRepository.java:130) ~[git-as-svn.jar:?]
        at svnserver.repository.git.GitRepository.wrapLockWrite(GitRepository.java:121) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.closeEdit(CommitCmd.java:521) ~[git-as-svn.jar:?]
        at svnserver.server.command.LambdaCmd.process(LambdaCmd.java:40) ~[git-as-svn.jar:?]
        at svnserver.server.command.CommitCmd$EditorPipeline.editorCommand(CommitCmd.java:649) ~[git-as-svn.jar:?]
        at svnserver.server.SvnServer.serveClient(SvnServer.java:246) ~[git-as-svn.jar:?]
        at svnserver.server.SvnServer.lambda$run$1(SvnServer.java:208) ~[git-as-svn.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_252]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_252]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]

We can handle this case by checking whether LFS is enabled for particular repo via GitLab API. Just need to add some caching to avoid too many requests.