SVN: экспорт измененных файлов изменений, зафиксированных с определенным комментарием - PullRequest
2 голосов
/ 09 марта 2012

Я использую комментарии фиксации SVN, чтобы связать некоторые ключевые слова с зафиксированными файлами.Сейчас я пытаюсь найти все зафиксированные файлы - в любой ревизии - с конкретным ключевым словом в комментарии.Возможно ли это?

Заранее спасибо!

РЕДАКТИРОВАТЬ для получения дополнительной информации: я могу использовать TortoiseSVN (из моего локального 64-разрядного Windows 7) или командную строку (с нашего сервера интеграции, linux)

Снова отредактируйте: «показать журнал» в черепахе не позволяет мне искать по любой дате.Прямо сейчас я не могу искать с прошлого года ... но только с 15.02.2012 ... Есть ли способ это исправить?

=============================================================================

ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ: Я наконец-то сделал так, как хотел.Я хотел получить все эти журналы, чтобы использовать их для экспорта SVN.Окончательный сценарий называется ExportAllRevisionsFromKeyword.sh:

    #!/bin/sh
    if [ ! $1 ];then echo "No keyword specified. Needs for example a ticket number : PROJECT-XXX. The command will be : ./SearchCommitsFromComment.sh PROJECT-XXX";exit;fi
    cd /root/PROJETS/myproject/
    SEARCH=$1
    echo "Searching revisions committed with keyword "$SEARCH
    svn log | awk '{
      if ( $1 == "------------------------------------------------------------------------") {
        getline
        REVISION = $1
      }
      else {
        if (match($0, SEARCH)) {
          print "Keyword found in " REVISION ". Export coming..."
          system("./var/batchesFolder/svnxport.sh . " substr(REVISION,2) " var/batchesFolder/sorties/svnExports/" SEARCH)
        }
      }

    }' SEARCH="$SEARCH"

Как видите, я вызываю другой сценарий.Он был вдохновлен учебным пособием Жюльена Фальконе , названным svnxport.sh:

    #!/bin/sh
    # svnxport.sh
    # Export only modified files in SVN
    #
    #  Copyright (C) 2009 by Julien Falconnet
    #  http://www.falconnet.fr
    #
    #  This program is free software; you can redistribute it and/or modify
    #  it under the terms of the GNU General Public License as published by
    #  the Free Software Foundation; either version 2 of the License, or
    #  any later version.
    #
    #
    #BEWARE : This script does not operate correctly with files whose filename contains spaces
    # tests for parameters
    if [ ! $1 ];then echo "svnxport : No source specified. Needs : source revision target_directory";exit;fi
    if [ ! $2 ];then echo "svnxport : No revision specified. Needs : source revision target_directory";exit;fi
    if [ ! $3 ];then echo "svnxport : No target_directory specified. Needs : source revision target_directory";exit;fi
    # check if the target_directory allready exists
    #if [ -d $3 ];then echo "svnxport : target_directory '$3' allready exists. Remove it or change target_directory parameter.";exit;fi


    # we use svn diff to select changed files between $2-1 and $2 revisions and only keep those updated or added.
    sourceDir=$1
    revision=$2
    previous=$(($revision - 1))
    targetDir=$3
    escapedSourceDir=$1
    if [ $escapedSourceDir == '.' ]
    then
      escapedSourceDir='\\.'
    fi


    echo "Processing : source($sourceDir), revision($revision), target_directory($targetDir)"

    # Then the 'for' separate status from filename (here is the problem with file with blanks)
    for myfile in `svn diff -r $previous:$revision --summarize $sourceDir | grep -e '^M ' -e '^A '`
    do
    if  [  "$myfile" = "M"  -o  "$myfile" = "AM" -o "$myfile" = "A" -o "$myfile" = "." -o -d $myfile ]
    then
        # we ignore the status, and the directory to update
        continue
    else
        #we focus on true changed files
        #first we create needed directories for the current file
        #note that we use a relative directory system
        outfile=`echo $myfile |sed "s|$escapedSourceDir||g"`
        dir="$targetDir/$outfile"
        mkdir -p $(dirname $dir)
        #then we export the file
        svn export --force $myfile $targetDir/$outfile >> /dev/null
        echo "export $targetDir/$outfile "
    fi
    done
    # List other files. Changed but not exported. Mainly the deleted ones.
    # Usefull to know which files should be removed and follow weird comportment
    #echo "Watch for : "
    #svn diff -r $previous:$revision --summarize $sourceDir | grep -v -e 'M ' -e 'A ' |sed "s|$sourceDir||g"
    echo $'\n'

И теперь единственное действие, которое нужно сделать, - это перейти в корневой каталог моего версионного сайта и вызвать ./path/to/scripts/ExportAllRevisionsFromKeyword.sh PROJECT-XXX

Он будет искать любую ревизию, зафиксированную с комментарием, содержащим ключевое слово "PROJECT-XXX", и экспортирует ревизию HEAD файлов, модифицированных этой ревизией, в новую папку: path/to/scripts/sorties/svnExports/PROJECT-XXX

Мне нужноСкажите, что Нишант был очень полезен со ссылкой, которую он дал мне.Спасибо вам большое !:)

Ответы [ 4 ]

8 голосов
/ 09 марта 2012

С помощью Tortoise SVN вы можете легко найти свой коммит:

Правый клик => SVN Checkout => Показать журнал

Откроется новое окно, и вы найдете текст aera, введите ключевое слово, и черепаха автоматически найдет ваши коммиты.

Теперь, если вы не используете Черепаху, извините за этот бесполезный ответ.

3 голосов
/ 09 марта 2012

попробуйте что-то вроде

  svn log | grep <my comment>

или сделайте что-то вроде этого

1 голос
/ 09 марта 2012

Предложение о правах хорошей шутки:

Для выполнения сложных запросов по SVN-репо используйте:

  • Mercurial (шаблоны + revsets)
  • HGSubversion (доступ Subversion)
  • на Linux-box (bash, piping, Tux-tools)

В вашем случае (файлы из ревизии с ключевыми словами) вы получите что-то вроде

hg log --templates "{files}\n" -r "keyword(word)"

или, может быть, даже

hg log --template "{join(files, '\n')}" -r "keyword(word)" | sort -u

(последний шаблон должен работать, но сейчас у меня не работает)

0 голосов
/ 09 марта 2012

Попробуйте использовать окно Показать журнал , в котором будут отображены все сделанные коммиты.Теперь вам просто нужно отфильтровать его, используя свой конкретный комментарий к текстовому полю выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...