GitServlet Запрос пароля после команды push - PullRequest
0 голосов
/ 13 октября 2019

Я хочу клонировать и изменить репозиторий с помощью jgit. Я хочу использовать протокол HTTP. Для этого jgit предлагает сервлет (GitServlet). Я использую контейнер сервлетов Jetty для запуска сервлета GitServlet. Я реализовал это следующим образом:

public class HttpGitConnection {

    public void start() {
       Server server = new Server(this.port);
       GitServlet gs = new GitServlet();
       gs.setRepositoryResolver(this::handler);
       ServletHandler servletHandler = new ServletHandler();
       servletHandler.addServletWithMapping(new ServletHolder(gs), "/configs/*");
       this.server.setHandler(servletHandler);
       server.start();
       server.join();
    }

    private Repository handler(HttpServletRequest request, String name){
       try {
           Logger.debug("Repository Request {}", name);
           if (name.contains(".git")) {
               String repoName = name.split(".git")[0];
               if (!new File(repoFolder + File.separator + repoName).exists()) {
                  throw new RepositoryNotFoundException(name);
               }
               Repository repository;
               if (repositories.containsKey(repoName)) {
                   Logger.debug("GET REPO");
                   repository = repositories.get(repoName);
               } else {
                   Logger.debug("Open GIT REPO!");
                   repository = Git.open(new File(repoFolder + File.separator + repoName)).getRepository();
                   this.repositories.put(repoName, repository);
               }
               repository.incrementOpen();
               return repository;
            } else {
               Logger.error("Invalid repository name {}", name);
               throw new Exception("Invalid repository name " + name);
            }
         } catch (Exception e) {
            Logger.error(e);
            e.printStackTrace();
            return null;
         }
    }

}

Я запускаю приложение и выполняю следующие команды:

git clone http://localhost:8080/configs/MyService.git
Cloning into 'MyService'...
...
Unpacking objects: 100% (4/4), done.
Checking connectivity... done.

Если я внесу изменение и выполню push, то появится запрос пароляup:

git push
Username for 'http://localhost:8080':

Откуда этот запрос? Запрос приходит с Jetty или с jGit? Если это от Jetty, какое имя пользователя здесь нужно?

1 Ответ

0 голосов
/ 13 октября 2019

Пользовательский запрос пришел из GitServlet / JGit. Сначала необходимо активировать http-соединение, поэтому настройку Git можно легко выполнить следующим образом:

StoredConfig config = repository.getConfig();
config.setBoolean("http", null, "receivepack", true);
config.save();

Теперь изменения в репозитории можно перенести. Я нашел решение на следующей странице: https://www.programcreek.com/java-api-examples/?code=arquillian/smart-testing/smart-testing-master/functional-tests/git-rules/src/main/java/org/arquillian/smart/testing/rules/git/server/EmbeddedHttpGitServer.java

...