Pergunta

Queremos índice nossos (bastante grande coleção de) repositórios git usando OpenGrok, e uma coisa que eu não tenho sido capaz de descobrir é como índice de todos os ramos.Do que posso ver, parece que eu preciso para ter feito o check-out cópias de cada ramo que eu quero índice, de modo que, se um repositório tem, digamos, uma dúzia de ramos, eu preciso ter uma dúzia de cópias, uma para cada ramo, por exemplo,

git-repo-with-many-branches-master/
git-repo-with-many-branches-branch1/
git-repo-with-many-branches-branch2/
       :
git-repo-with-many-branches-branch12/

Será que é verdade?Ou existe uma maneira de dizer OpenGrok olhar todos os ramos ao criar o seu índice?

Foi útil?

Solução

As outras camadas do OpenGrok foram projetadas para funcionar em vários sistemas SCM que não funcionam como o Git; portanto, infelizmente para você, você deve conferir cada ramo que deseja indexar como um repositório Git separado :-(

Você sempre pode registrar um RFE para obter suporte para navegar em várias filiais em um repositório Git.

Outras dicas

Eu escrevi um script exatamente para esta finalidade: daun.Você vai precisar usar daun cli em vez de git cli em sua tarefa cron.Note que ele não oferece suporte OpenGrok git história no momento da escrita como estamos interessados apenas em OpenGrok pesquisa rápida capacidade.Nós, do ponto de nosso OpenGrok aos usuários ferramentas como o GitHub/Bitbucket para web baseada em git história.

Aqui está um script bash que eu escrevi para fazer exatamente isso.Ele vai clonar qualquer nova ramada, atualização de qualquer existente ramos, e eliminar os ramos que não existem mais.Aqui estão as instruções que o "trabalho";você pode escolher para tornar as coisas mais seguras, mas isso é bom o suficiente se o seu servidor só é acessível na sua LAN.Eu tenho um trabalho do cron configuração que só ele é executado a cada 30 minutos no servidor.Para configurar o cron job para ser executado como root, execute:

sudo crontab -e

Em seguida, cole os seguintes conteúdos:

*/30 * * * * /usr/local/bin/opengrok_index.sh

Em seguida, escrever e fechar:

:wq

Você precisará instalar o "esperar" que o script usa para introduzir a sua chave ssh senha.Um desses dois comandos irá funcionar dependendo do sistema operacional linux que você está usando:

sudo yum install expect
sudo apt-get install expect

Em seguida, crie um arquivo em /usr/local/bin/opengrok_index.sh:

sudo vi /usr/local/bin/opengrok_index.sh

Em seguida, cole o conteúdo do script (a partir do final deste post), e altere as variáveis no topo de acordo com o seu sistema.Em seguida, altere as permissões para que apenas o root pode ler (tem senhas nela):

sudo chmod 700 /usr/local/bin/opengrok_index.sh

Você provavelmente vai querer testar executando o script manualmente e fazê-lo funcionar, antes de esperar que o cron job para o trabalho.Este é um script em particular que eu escrevi para a minha configuração particular, então você pode precisar para colocar em algum instruções de eco e fazer alguma depuração para fazê-lo funcionar corretamente:

sudo /usr/local/bin/opengrok_index.sh

Notas adicionais:

  • Este script de logon no GIT através de SSH (não HTTPS).Como tal, a sua GIT_USER deve existir no sistema, e tem uma chave SSH em /home/usuario/.ssh/id_rsa que tem acesso ao repositório GIT.Este é padrão GIT login coisas assim que eu não vou passar por isso aqui.O script irá digite o GIT_USER_SSH_PASSWORD quando solicitado
  • O script verifica todos os arquivos como GIT_USER, então você pode precisar de "chown" seu CHECKOUT_LOCATION para que o usuário

Script:

#!/bin/bash

SUDO_PASSWORD="password"
CHECKOUT_LOCATION="/var/opengrok/src/"
GIT_PROJECT_NAME="Android"
GIT_USER="username"
GIT_USER_SSH_PASSWORD="password"
GIT_URL="yourgit.domain.com"
OPENGROK_BINARY_FILE="/usr/local/opengrok-0.12.1.6/bin/OpenGrok"

# Run command as GIT_USER which has Git access
function runGitCommand {
  git_command="$@"

  expect_command="
    spawn sudo -u $GIT_USER $git_command
    expect {
        \"*password for*\" {
            send \"$SUDO_PASSWORD\"
            send \"\r\"
            exp_continue
        }
        \"*Enter passphrase for key*\" {
            send \"$GIT_USER_SSH_PASSWORD\"
            send \"\r\"
            exp_continue
        }
    }"

  command_result=$(expect -c "$expect_command" || exit 1)
}

# Checkout the specified branch over the network (slow)
function checkoutBranch {
  branch=$1

  # Check out branch if it does not exist
  if [ ! -d "$branch" ]; then
    runGitCommand git clone ssh://$GIT_URL/$GIT_PROJECT_NAME
    # Rename project to the branch name
    mv $GIT_PROJECT_NAME $branch || exit 1
  # Otherwise update the existing branch
  else
    cd $branch || exit 1
    runGitCommand git fetch
    runGitCommand git pull origin $branch || exit 1
    cd ..
  fi
}

# If the branch directory does not exist, copy the master
# branch directory then switch to the desired branch.
# This is faster than checkout out over the network.
# Otherwise, update the exisiting branch directory
function updateBranch {
  branch=$1

  if [ ! -d "$branch" ]; then
    mkdir $branch || exit 1
    rsync -av master/ $branch || exit 1
    cd $branch || exit 1
    runGitCommand git checkout -b $branch origin/$branch
    cd ..
  else
    cd $branch || exit 1
    runGitCommand git pull origin $branch || exit 1
    cd ..
  fi
}

# Change to the OpenGrok indexing location to checkout code
cd $CHECKOUT_LOCATION || exit 1

# Check out master branch
checkoutBranch master

# Get a list of all remote branches
cd master || exit 1
old_ifs=$IFS
IFS=$'\n'
origin_branches=( $(git branch -r) )
IFS=$old_ifs
origin_branches_length=${#origin_branches[@]}
cd .. # Move out of "master" directory

# Loop through and check out all branches
branches=(master)
for origin_branch in "${origin_branches[@]}"
do
  # Strip the "origin/" prefix from the branch name
  branch=${origin_branch#*/}

  # Ignore the "HEAD" branch
  # Also skip master since it has already been updated
  if [[ $branch == HEAD* ]] || [[ $branch == master* ]]; then
    continue
  fi

  branches+=("$branch")
  updateBranch $branch
done

# Get list of branches currently in OpenGrok
old_ifs=$IFS
IFS=$'\n'
local_branches=( $(ls -A1) )
size=${#local_branches[@]}
IFS=$old_ifs

# Get list of branches that are in OpenGrok, but do not exist
# remotely. These are branches that have been deleted
deleted_branches=()
for local_branch in "${local_branches[@]}"
do
  skip=0

  for branch in "${branches[@]}"
  do
    if [[ $local_branch == $branch ]]; then
      skip=1;
      break;
    fi
  done

  if [[ $skip == "0" ]]; then
    deleted_branches+=("$local_branch")
  fi
done

# Change to checkout directory again, in case some future code
# change brings us somewhere else. We are deleting recursively
# here and cannot make a mistake!
cd $CHECKOUT_LOCATION
# Delete any branches that no longer exist remotely
for deleted_branch in ${deleted_branches[@]}
do
  rm -rf ./$deleted_branch
done

# Reindex OpenGrok
$OPENGROK_BINARY_FILE index

Não sei nada sobre o OpenGrok, mas é claro que você pode alterar as filiais usando o Git:

git checkout master
# do the indexing here
git checkout branch1
# indexing
git checkout branch2
# and so on...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top