0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

scm-manager で作るsvnリポジトリのバックアップは一筋縄でいかない

0
Last updated at Posted at 2023-10-11

svnmanager とか使って svn リポジトリとか管理してたけど os の入れ替えとかなんだとかで 新しい php(8.0とか8.2とか)では動作しないので別の管理ツールを使おうとしてバックアップ体制を構築できずはまってしまう。

scm-manager が ui もそれなりに行けてるしインストールも簡単そうなので使ってはみたが、gitlab のようにまとめてバックアップする手段が提供されていないので自力でスクリプトを書くとかしなければならないが。

 $ ls /var/lib/scm/repositories/
27TsGaLhaD  9lTsGaDSvA

こんな感じで「つけた名前とは違う名前のディレクトリ」に配置されてしまい、foo リポジトリって名前を付けたはずなのにバックアップが foo/back.gz とかにできない。

幸い REST API が提供されているので

import os
import requests
from requests.auth import HTTPBasicAuth
import subprocess
import json

url = "http://scm-server/scm/api/v2/repositories"  # 取得したいJSONデータのURLに置き換える
username = "scmadmin"
password = "xxxxxxxx"
backup_directory_root = "/home/vagrant/backup"
backup_cmd='/usr/local/bin/svn-backup-dumps.py'

try:
    response = requests.get(url, auth=HTTPBasicAuth(username, password))

    # ステータスコードが200 (OK) であるか確認
    if response.status_code == 200:
        # JSONデータを辞書に変換
        data = response.json()

        repositories = data["_embedded"]["repositories"]
        for repo in repositories:
            repo_name = repo["name"]
            repo_url = repo["_links"]["protocol"][0]["href"]

            backup_directory = f"{backup_directory_root}/{repo_name}"
            if not os.path.exists(backup_directory):
                os.mkdir(backup_directory)

            subprocess.run([backup_cmd, "-i", "-z", "-q", repo_url, backup_directory], shell=True)
            print(f"{repo_name} {repo_url}");

    else:
        print(f"HTTPエラー {response.status_code}: リクエストに失敗しました")

except requests.exceptions.RequestException as e:
    print(f"リクエストエラー: {e}")


こんな感じで ChatGPT に提案されたので使ってみたが、href は当然 http:// なので svn-backup-dumps.py の引数として使えない。

結局 https://qiita.com/okadabasso/items/20ea792ca82f0ba9bafb のように metadata.xml を解析する羽目になった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?