日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

fossil bug : can not import tag with first and last commit on fossil import --git

2017-06-02
fossil git import すると欠落がある

執筆:2017.06.02
編集:2022.09.17


[2017.6] 1年近くたっても修正されていないようなのでメモ
[2022.9] version 2.19でも修正されていない

fossil bug : gitからのインポートで最初と最後のコミットに付随するタグが欠落する。

再現コード
# 作業フォルダを作成し移動
mkdir tag-bug
cd tag-bug

# gitの初期設定をする
git init
git config --local user.email test@test
git config --local user.name test

# gitにテストコミットをする(1-3)
git commit -m "1" --allow-empty
git tag tag1

git commit -m "2" --allow-empty
git tag tag2

git commit -m "3" --allow-empty
git tag tag3

# tag is : tag1, tag2, tag3

# gitの内容をダンプして、fossilにインポートする
git fast-export --all > ./dump.txt

fossil import --git test.fossil ./dump.txt

# fossilのタグのリストを確認する
fossil tag list -R ./test.fossil

# Actual Result
tag2, trunk
Missing of tag1, and tag3

# Expected Result
tag1, tag2, tag3, trunk

# 最新版は、masterが追加される



追記: 2017/6/3
直せないかコードを眺めていたら、直せそうな予感がしたので、この不具合を直しました。

問題点
  1. 本来は、2回ループして、from番号、タグとブランチを回収する必要がある。
    1回ループのコードになっているので、強引に挿入する形になり、タグは、Editとなる。(一部例外はある)
  2. fossilのtagが日付と作者を要求する
    これは、テンポラリテーブルxdate,xuserを作りxmarkの保存のタイミングで一緒に保存してあげればいいでしょう。
    src/import.c: fast_insert_tag(), gg.zTag, gg.zFrom, gg.zDate, gg.zUser,
    新規に追加: finish_tag2(), fast_insert_Check_Date_User()

Fix方法
コードが分かりにくかったので、タグが正常に全部取り込めるように修正するのに少し時間がかかってしまいました。
修正コード(挿入)は180行くらいです。
タイムラインでタグのEditが下にくるので、違和感があるのですよね。これも後日修正ですね。(別件になります)

fossilからフォークした多機能マイブランチは、
今のところ、fossilの最新ブランチからmergeできる(多少手作業で競合修正が必要)。
  • 多言語化(英語、日本語)
  • コンテンツの文字コード判定
  • クリック/リンク可能な行数表示(ブラウザで成形処理される)
    数行コードを挿入しただけなので、改造前と転送量はほぼ変わらない。
    転送量、サーバーへの負担を考慮した結果、行の成形はブラウザで全部処理するのが妥当。
  • アーカイブ出力周辺の改造
  • CR/LFをファイルごとに任意に設定できる(リポジトリ、ローカル側ともにOS毎も設定できる)
  • ログイン制限(ドメイン、IPパターン)
  • チェックインURLの削除機能
    /urllist の(チェックボックス形式)個別削除機能
  • その他
いろいろとパワーアップしてます。
本家版から完全にマージできなくなったら、マイブランチはメインテナンスフェーズに移行です。

fossil(,sqlite)の注意点として
fossilってsqliteごろごりのマニアックなSQLコードなので、メイン開発者がやめたらプロジェクト即終了でしょうね。


PR

[PR]