Это из-за другого стиля Ури.
- 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()
Нет никакого способа переместить файлы с командами только для клиента. Вы нуждаетесь в доступе к файловой системе серверов и можете переместиться", v" файл в репозитории к новому местоположению. Это сохранит всю историю, так как CVS записывает каждый пересмотр и их комментарии в том одном файле.
Следует иметь в виду, что файлы перемещены в подпапку "Attic" (который не может быть замечен от клиента), когда они удалены. Это - то, как файлы могут быть восстановлены после того, как они были удалены.
Обычно нет никаких непосредственных проблем с этим подходом, однако необходимо полагать, что последствия должны Вы решать проверить более раннюю версию своего продукта, который мог бы полагаться на предыдущую структуру каталогов!
Это - то, где другие системы управления версиями как Подверсия имеют категорическое преимущество.
Общепринятый способ достигнуть этого эффекта состоит в том, чтобы выполнить следующие шаги. Технический термин для этого является repocopy.
Эта процедура поддерживает историю файла в своем новом местоположении и также не повреждает обратную непрерывность репозитория. Если Вы попятитесь вовремя, то файл правильно появится в своем старом местоположении. Можно также использовать ту же процедуру для переименования файла.
Руководство CVS онлайн имеет некоторую деталь о том, как сделать это:
Нормальный способ переместить файл состоит в том, чтобы выйти, cvs переименовывают команду.
$ cvs переименовывают старый новый
$ cvs фиксируют-m, "Переименованный старым к новому"Это - самый простой способ переместить файл. Это не подвержено ошибкам, и это сохраняет историю того, что было сделано. Клиенты CVSNT могут получить настоящее имя путем проверки более старой версии репозитория.
Эта функция только поддерживается на серверах CVSNT 2.0.55 и позже.
хорошо самый простой путь состоял бы в том, чтобы получить доступ к cvs серверу, где Ваш repo, и просто переместитесь, Ваши папки/файлы с mv (принимающий *отклоняют машину). тем путем история файла будет сохранена.
Разве эти из известных дефектов с CVS не - никакой встроенный механизм для движущихся файлов? Это было долгое время, так как я использовал его однако, поэтому возможно, существует теперь решение.
Подверсия позволит Вам перемещать файлы, но это будет прослежено также, таким образом, новый файл получит новое число пересмотра.
Это, кажется, сохраняет историю версий, Вы несете чушь для использования-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 и фиксацию.