Обновлять номер версии при каждом коммите - PullRequest
0 голосов
/ 21 января 2020

Я следую рекомендациям по Как написать Python заголовок сценария . Мне понравилась идея включить номер версии, чтобы каждый моих Python файлов содержал строку с надписью: __version__ = '1.0.0', отличающиеся друг от друга (версии файлов не связаны друг с другом). Тем не менее, изменение каждого файла вручную для изменения номера версии перед фиксацией очень утомительно, и я в конечном итоге перестану это делать.

Есть ли способ найти каждый файл, который изменился в новом коммите, и обновить его версию число?


Этот вопрос был помечен как дубликат Automati c номера версии как в файле setup.py (setuptools), так и в исходном коде? . Однако этот случай отличается из-за следующего:

  1. У меня есть несколько файлов, каждый файл имеет свою собственную версию (на самом деле у меня даже нет setup.py) , Код должен изменять версию каждого файла в отдельности, то есть один файл может иметь версию 50.3.4, а другой - 0.0.2.
  2. Мне плевать на тег git. Я вообще не сохраняю версии на git.
  3. Я хочу избежать установки номера версии самостоятельно. Вопрос, который он хочет, чтобы установить версию на Setup или git, а затем другой будет тот же. Я хочу, чтобы номер версии увеличивался автоматически. Пример. Если версия была 1.0.2, я хочу, чтобы она была 1.0.3 после фиксации (если этот конкретный файл действительно изменился).

Вопрос хотел либо выбрать (вручную) версию при настройке. py файл или git, а затем обновите другой соответственно. У меня вообще нет версии на git.

Принятое решение (которое действительно является решением вопроса) вообще не помогает, например, потому что мне нужно вручную изменить версию файла, и тогда оно будет добавьте эту версию к git (что не имеет ничего общего с тем, что я хочу по всем перечисленным причинам).

1 Ответ

0 голосов
/ 21 января 2020

Итак, я сделал свой собственный скрипт оболочки. Сценарий проверяет строку версии каждого файла из вывода git status, чтобы увидеть файлы, которые изменились, и увеличивает число на единицу.

if [ "$1" != '' ]; then
IFS="
"
git status -s
for p in `git status -s`    # For each file in git status
do
    file=`echo "$p" | rev | cut -d ' ' -f1 | rev`       # Take the name of the file
    if [ "$file" != "auto-version-commit.sh" ]; then    # Ignores himself
        if grep -q "__version__ = " $file; then     # Check version is in the file
            echo "Increasing version of file $file"
            oldver=`grep "__version__ = " $file`    # oldver=__version__ = 'z.y.x'
            verf1=`echo $oldver | cut -d '.' -f1`   # __version__ = 'z
            verf2=`echo $oldver | cut -d '.' -f2`   # y
            verf3=`echo $oldver | cut -d '.' -f3`   # x'
            oldnum=`echo $verf3 | sed 's/.$//'` # removes the quote from verf3
            newnum=`expr $oldnum + 1`       # x += 1
            newver="$verf1.$verf2.$newnum\'"    # joins string again.
            sed -i "s/$oldver\$/$newver/g" $file    # replaces line with the new one
        fi
    fi
done

git add -A
git commit -m $1
else
echo No commit message found, please add a message.
fi

Я понимаю, что этот код УЖАСНЫЙ. Я не очень хорош с Linux командами и сценариями оболочки в целом. Пожалуйста, любые исправления в коде будут очень благодарны (и, конечно, любое альтернативное решение). Я считаю, что при лучшем понимании Regex этот файл может быть значительно уменьшен.

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