Подвижный - Как я создаю .zip файлов, измененных между двумя изменениями?

Я плохо знаком с программированием на Mac, и я пропускаю способность запустить gui программы от удара..., таким образом, я должен создать функции как это:

function macvim
{
/Applications/MacVim.app/Contents/MacOS/Vim "$@" -gp &
}
8
задан Joe Schneider 14 April 2010 в 05:56
поделиться

5 ответов

Лучшим сценарием является оказание надлежащего давления на этих людей, чтобы они получили Mercurial, но без этого патч, вероятно, лучше, чем заархивированный набор файлов, поскольку патч будет отслеживать удаление и переименование. Если вам все еще нужен zip-файл, я написал короткий сценарий, который создает zip-файл:

import os, subprocess, sys
from zipfile import ZipFile, ZIP_DEFLATED

def main(revfrom, revto, destination, *args):
    root, err = getoutput("hg root")
    if "no Merurial repository" in err:
        print "This script must be run from within an Hg repository"
        return
    root = root.strip()

    filelist, _ = getoutput("hg status --rev %s:%s" % (revfrom, revto))
    paths = []

    for line in filelist.split('\n'):
        try:
            (status, path) = line.split(' ', 1)
        except ValueError:
            continue
        if status != 'D':
            paths.append(path)

    if len(paths) < 1:
        print "No changed files could be found."
        return

    z = ZipFile(destination, "w", ZIP_DEFLATED)
    os.chdir(root)
    for path in paths:
        z.write(path)
    z.close()

    print "Done."


def getoutput(cmd):
    p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return p.communicate()


if __name__ == '__main__':
    main(*sys.argv[1:])

Будет использоваться имя nameofscript.py fromrevision torevision destination. Например, nameofscript.py 45 51 c: \ updates.zip

Извините за плохой интерфейс командной строки, но, эй, скрипт был написан всего за 25 минут.

Примечание: это следует запускать из рабочего каталога в репозитории.

13
ответ дан 3 November 2019 в 12:49
поделиться

Хорошо. hg export $ base: tip> patch.diff создаст стандартный файл патча, читаемый большинством инструментов.

В частности, команда GNU patch может применить весь патч по сравнению с предыдущими файлами. Разве этого не достаточно? Я не понимаю, зачем вам нужен набор файлов: мне кажется, применить патч проще, чем извлекать файлы из zip-архива и копировать их в нужное место. Плюс , если у вашего соавтора есть локальные изменения, вы их перезапишете. Вы не используете инструмент управления версиями, чтобы прямо заставить другого человека объединить вручную изменения, верно? Пусть с этим справится патч , честно :)

10
ответ дан 3 November 2019 в 12:49
поделиться

Насколько мне известно, для этого нет удобного инструмента (хотя ртутный плагин может быть выполнимым). Вы можете экспортировать патч для набора файлов, используя hg export from: to (откуда и для идентификации ревизий). Если вам действительно нужны все файлы, как показано на подсказке, вы можете возможно, что-нибудь взломайте вместе, основываясь на выводе команды hg diff --stat -r from: to , которая выводит список файлов с аннотациями о том, сколько строк было изменено, например:

 ...
 src/test/scala/RegressionTest.scala                        |  25 +++++++++++++----------
 src/test/scala/SLDTest.scala                               |   2 +-
 15 files changed, 111 insertions(+), 143 deletions(-)

Если ни одна из ваших В именах файлов есть пробелы или специальные символы, вы можете использовать что-то вроде:

hg diff -r156:159 --stat | head - --lines=-1 | sed 's!|.*$!!' | xargs zip ../diffed.zip

Я оставлю работу со специальными символами в качестве упражнения для читателя;)

1
ответ дан 3 November 2019 в 12:49
поделиться

Вот небольшой и уродливый сценарий bash, который выполнит свою работу, по крайней мере, если вы работаете в среде Linux. Здесь нет абсолютно никаких проверок, и, скорее всего, он сломается, когда вы переместите файл, но это только начало.

Команда:

zipChanges.sh REVISION REPOSITORY DESTINATION
zipChanges.sh 3 /home/hg/repo /home/hg/files.tgz

Код:

#!/bin/sh
REV=$1
SRC_REPO=$2
DST_ZIP=$3

cd $SRC_REPO
FILES=$(hg status --rev $1 $SRC_REPO | cut -c3-)

IFS=$'\n'
FILENAMES=""
for line in ${FILES}
do
    FILENAMES=$FILENAMES" \""$SRC_REPO"/"$line"\""
done

CMD="tar czf \"$DST_ZIP\" $FILENAMES"

eval $CMD
1
ответ дан 3 November 2019 в 12:49
поделиться

Я знаю, что у вас уже есть несколько ответов на этот вопрос, но у моего друга была аналогичная проблема, и я создал простую программу на VB.Net, чтобы сделать это для него, возможно, это могло бы помочь и вам, прога и копия источника находятся внизу статьи, указанной ниже.

http://www.simianenterprises.co.uk/blog/mercurial-export-changed-files-80.html

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

надеюсь, что это поможет либо вам, либо кому-либо еще, кому нужна эта функциональность.

1
ответ дан 3 November 2019 в 12:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: