Переместите файл в CVS, не сбрасывая число пересмотра

Это из-за другого стиля Ури.

 - https://www.google.com
 - https://google.com
 - http://www.google.com
 - http://google.com
 - //www.google.com
 - //google.com
 - www.google.com

Эти семь ссылок имеют один и тот же адрес, но он не проверяется, пока не войдет в блок if select_in_return == 0:. После выполнения запроса INSERT INTO они станут одним и тем же адресом, но при выполнении запроса SELECT они будут рассматриваться как разные ссылки, поэтому дублированная ссылка сохраняется.

Решение:

def add_external_links(bs_obj, scheme, exclude_url, title):
    for link in bs_obj.find_all("a", href=re.compile("^(https|http|www|\/\/)((?!" + exclude_url + ").)*$")):
        # Remove protocol(https:// or http:// or //) and host(www.) from URI
        if link.attrs["href"].startswith("//"):
            link.attrs["href"] = link.attrs["href"][2:]
            if "www" in link.attrs["href"]:
                link.attrs["href"] = link.attrs["href"].replace("www.", "")
        elif "https" in link.attrs["href"]:
            link.attrs["href"] = link.attrs["href"].replace("https://", "")
            if "www" in link.attrs["href"]:
                link.attrs["href"] = link.attrs["href"].replace("www.", "")
        elif "http" in link.attrs["href"]:
            link.attrs["href"] = link.attrs["href"].replace("http://", "")
            if "www" in link.attrs["href"]:
                link.attrs["href"] = link.attrs["href"].replace("www.", "")
        elif "www" in link.attrs["href"]:
            link.attrs["href"] = link.attrs["href"].replace("www.", "")

        # Remove trailing slash
        if link.attrs["href"].endswith("/"):
            link.attrs["href"] = link.attrs["href"][:-1]

        # Reassemble URI
        link.attrs["href"] = scheme + "://" + link.attrs["href"]

        # Get rows matching with URI
        select_in_return = cur.execute("SELECT * FROM external_links WHERE href=%s;", (link.attrs["href"],))

        # Add URI to database if it is not duplicated
        if select_in_return == 0:
            cur.execute("INSERT INTO external_links (idx, href, title, contents) VALUES (%s, %s, %s, %s);",
                        (0, link.attrs["href"], title, "Temp contents",))
            conn.commit()
9
задан Kevin Gale 25 September 2008 в 15:23
поделиться

6 ответов

Нет никакого способа переместить файлы с командами только для клиента. Вы нуждаетесь в доступе к файловой системе серверов и можете переместиться", v" файл в репозитории к новому местоположению. Это сохранит всю историю, так как CVS записывает каждый пересмотр и их комментарии в том одном файле.

Следует иметь в виду, что файлы перемещены в подпапку "Attic" (который не может быть замечен от клиента), когда они удалены. Это - то, как файлы могут быть восстановлены после того, как они были удалены.

Обычно нет никаких непосредственных проблем с этим подходом, однако необходимо полагать, что последствия должны Вы решать проверить более раннюю версию своего продукта, который мог бы полагаться на предыдущую структуру каталогов!

Это - то, где другие системы управления версиями как Подверсия имеют категорическое преимущество.

9
ответ дан 4 December 2019 в 06:17
поделиться

Общепринятый способ достигнуть этого эффекта состоит в том, чтобы выполнить следующие шаги. Технический термин для этого является repocopy.

  1. Вход в систему на сервере, размещающем репозиторий CVS и копию (не перемещаются) файл хранилища от местоположения, Вы хотите это к новому местоположению.
  2. На стороне клиента cvs удаляют файл из старого местоположения.
  3. На стороне клиента cvs обновляют содержание каталога в новом месте (так, чтобы файл появился там).
  4. На стороне клиента выполняют принудительную фиксацию cvs (использующий флаг-f) скопированного файла для входа того, что это был repocopied (добавьте комментарий журнала к тому эффекту).

Эта процедура поддерживает историю файла в своем новом местоположении и также не повреждает обратную непрерывность репозитория. Если Вы попятитесь вовремя, то файл правильно появится в своем старом местоположении. Можно также использовать ту же процедуру для переименования файла.

22
ответ дан 4 December 2019 в 06:17
поделиться

Руководство CVS онлайн имеет некоторую деталь о том, как сделать это:

Нормальный способ переместить файл состоит в том, чтобы выйти, cvs переименовывают команду.

$ cvs переименовывают старый новый
$ cvs фиксируют-m, "Переименованный старым к новому"

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

Эта функция только поддерживается на серверах CVSNT 2.0.55 и позже.

3
ответ дан 4 December 2019 в 06:17
поделиться

хорошо самый простой путь состоял бы в том, чтобы получить доступ к cvs серверу, где Ваш repo, и просто переместитесь, Ваши папки/файлы с mv (принимающий *отклоняют машину). тем путем история файла будет сохранена.

3
ответ дан 4 December 2019 в 06:17
поделиться

Разве эти из известных дефектов с CVS не - никакой встроенный механизм для движущихся файлов? Это было долгое время, так как я использовал его однако, поэтому возможно, существует теперь решение.

Подверсия позволит Вам перемещать файлы, но это будет прослежено также, таким образом, новый файл получит новое число пересмотра.

2
ответ дан 4 December 2019 в 06:17
поделиться

Это, кажется, сохраняет историю версий, Вы несете чушь для использования-v опции, когда перемещение видит ниже

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

mv oldfile.c newfile.c cvs удаляют oldfile.c cvs, добавляют newfile.c

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

CP oldfile.c, v newfile.c, v

теперь перейдите к своему рабочему каталогу и сделайте обновление cvs; newfile.c появится как новый файл. Теперь Вы можете cvs удалять oldfile.c и фиксацию.

2
ответ дан 4 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

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