fossil-scmのバグや不具合リスト
編集:2015.12.02
リスト作成 2015年12月
* git importすると文字化けする
修正済み 2015-11-29 [09cf1ad8]
* fossil import --svn すると 全くインポートされない
完了したと表示されるが全くインポートされない
branches, tags, trunk 以外は
メッセージもなしに勝手に処分しているようです。 一言メッセージ出力するべきでしょ。
ココ src/import.c
--trunk=pathto/trunk
--branches=pathto/branches
--tags=pathto/tags
で、正確なフォルダ名を指定する
* fossil import --git するとタグがインポートされないことがある
最初と最後のコミットなどにタグをいれていると発生します。
原因は、src/import.c git_fast_import関数で
547行目のif( strncmp(zLine, "reset ", 4)==0 ){
のところで reset refs/tags/ の検出をしていないためです。
不意にtagがでてきたりするので
fossilの構造上1ループで挿入は無理そうです。
まず、全データのタグをスキャンしてからインポート処理しないと無理。
* httpヘッダーのutf-8を出力しない
src/cgi.c : cgi_reply関数 を改造する必要があります
* デフォルトをhtmlをtextとして表示
src/info.c : artifact_page(void){ }
を改造して htmlパラメータを作る必要があります。
* htmlのファイルをクリックすると文字化けする
- httpヘッダーのutf-8を出力しない
- 対象ファイルのmetaにcharsetを設定する
で直ります
* textとして表示するとシフトジスが文字化けする
コンテンツの文字コードを解析する関数が必要です。
fossilの機能では無理です。
ICUライブラリ(ucsdet_detect)を取り込むと簡単です。
* インラインフレームでhtmlを表示する
xssの危険性あり
* コンテンツ検索機能がない
* ローカライズできない
べた書きなので無理。
* web uiのページレイアウトの変更の仕方がわからない
* skinの構文を間違うと web ui起動できなくなる
** AH01215: Assertion failed: !apToken[jj] || !apToken[0], file ..\\src\\th.c, line 2188\r:
間違ってskinに こういうことすると再現します
if { $current_page eq $home "brlist" } {}
なおすには、 sqlite3.exe データベース名
update config set value=replace(value ,
'$current_page eq $home "brlist"',
'$current_page eq $home '
) where name='header';
* 検索エンジン拒否をしたい
skinのheaderを このようにします。
この例では、トップページとブランチリストのみインデックスされます。
<th1>if { $current_page eq "login" || $current_page eq "setup"
|| ( "/$current_page" ne $index_page && $current_page ne "brlist" )
} {
html " <meta name='robots' content='noindex,nofollow,noarchive' />"
}</th1>
* web ui から編集がしたい
そういう機能はついていないようです。
* web ui でファイルサイズを表示したい
そういう機能はついていないようです。
* dos版をビルドすると、セルフサーバー機能で同時アクセスするとダウンする
原因は、おそらくマルチスレッド呼び出しをしておいてそれを無視してシングルスレッドのようにグローバル変数を使いまわしているため。
回避策、使いまわさないで終了すればいいので、apacheなどからcgiとして起動する。
根本的にコアの大改造がいるので、この問題には かかわらないほうがいいです。
* コマンドでログ(timeline)が文字化けする。
UTF8文字列をaschiiバイトとしてワードラップしているため。
* サーバー機能から取得した zipファイルのタイムスタンプ全部 取得IDのコミット日時
ほんと残念な仕様としかいいようがないです。さかのぼって、それぞれのコミット日時にしてほしいですね。
せめて管理ユーザーにタイムスタンプをさかのぼるか選択権を与えてほしいですね。
インストール直後から不具合の連発でしたが、
数日間で日本語環境で使えるレベルのマイブランチになったので
一応こちらの要求する要件はみたしました。
安心して、個人用途にgitのかわりに使えます
ここを読んだ人は改造がほしいと思われるかもしれませんがコードの提供はしません。
理由は、fossilは、問題個所が多すぎてお勧めできないからです。
有益なパッチを匿名で送っても取り込んでくれる見込みはないので、送りません。
住所などの個人情報の提出と契約書へのサインを求めてくるので 協力はお断りします。
- ブランチの一括削除ができない
- ゴミを1個にまとめます。とりあえず trash ブランチとします
sym- inherited from []
の最後のリンクをクリックし、ブランチの分岐開始に移動します
Other Links: edit をクリックします
Branching: Make this check-in the start of a new branch named
に trash を入力して Apply Changes をクリックします
ブランチの削除機能が実装されたら、trashをまとめて削除するといいです。
数個のコミットだけなら、shunに登録して、rebaseをクリックすると完全に消えます。
- ブランチを作ると消せないので、ゴミが増える,ディスクの無駄。
blob.contentにmanifestという変なヘッダに挿入しているため融通が利かないことになってます。
- ブランチの一括削除ができないので、チーム管理には向いていません。
複数人で扱うプロジェクトの場合は、 gitあたりが無難だと思います。
- この辺をいじると・・・
・tag.tagid
・tag.tagname , 'sym-%'
・tagxref.tagid
・origid=rid
・blob.content
manifest_get , cancel_special,add_tag,change_branch,apply_newtags, manifest_destroy
なにかできそうな予感。 staticで保護されているので info.cに ブスブスっといれます。
- ゴミを1個にまとめます。とりあえず trash ブランチとします
- tagの一括削除ができない
構造は、ブランチと同じ。一個ずつキャンセルしか消す方法がないようです。
* C言語で書かれている
C++で書かれていないので、不便。 クラス化すれば高度なことができるのに、もうこの時点で終わっている。
※ .h に extern "C" 関数を定義して、 objを生成すれば c++のコードを取り込み可能
vc2015 | win\Makefile.msc | $(TCC) /EHsc /Fo$@ -c $(SRCDIR)\追加.cpp |
unix | src\main.mk | LIB += -lstdc++ |
* 使用したメモリを開放していない場所がいくつかある。
いまどきのOSはメモリ保護されているから、終了すると自動解放されますけど
* 改行CR/LFを変換する機能はない
拡張子で判別して、自動コンバートできるようにしましょう。
diff,checksumなど複雑に絡み合っているので、少し難しいかもしれないです。
・入力ファイルを強制変換する
src\checkin.c line:1455 int commit_warning()
ファイル名とコンテンツがこの関数で展開されています。
・出力ファイルの変換 改行CR/LF
src\blob.c() : blob_write_to_file , blob_to_lf_only , blob_add_cr
src\diffcmd.c() : diff_file, diff_one_against_disk , diff_all_against_disk
src/checkin.c : commit_warning, checksumすり抜け定義
if( useCksum && skip_checksum==0 ){
src/vfile.c: vfile_check_signature
・パターンマッチ、glob_create, glob_match, glob_free
・データの読み込み: db_get
* コミットで utf8でない場合、勝手に文字コード変換する
contains invalid UTF-8. Use --no-warnings or the "encoding-glob" setting to disable this warning.
Commit anyhow (a=all/c=convert/y/N)?
に c すると 地雷。
commit_warning関数で utf8以外でコミット c を選択すると
blob_cp1252_to_utf8関数が呼ばれ 内容がドカーン。
* fossil status で gitのような Untracked files が表示されない
fossil extraコマンドで表示します
* fossil extra : リポジトリの ignore-globが読み込まれない
src\checkin.c: extras_cmd関数
zIgnoreFlag==0 の場合に
db_text(0, "SELECT value FROM config WHERE name=%Q", "ignore-glob");
で読み込んだ値を、zIgnoreFlag と比較し違う場合にzIgnoreFlag に連結する
* cygwinコマンドライン(status, timeline)で コメントが文字化けする
シングルバイトとして文字の折り返しをしているため
src\comformat.c(comment_print_legacy関数)
右ビットシフトして、utf8の上位バイトと比較する。
// 11110(30) , 1110(14), 110(6)
if文 1個で解決します
i--;k--;
http://exlight.net/devel/unicode/utf8.html
あたりが参考になります
* 公開することのないマイブランチの構成
【fossil 改造5日間 日誌】
初日:インストール → 説明を見ながら操作 → 使い物にならない → 改造
(1) 種々の日本語処理の改善
表示関係の文字化け対処
diff, blameなど の文字コード オートコンバート 比較機能
(2) branchのリネーム機能 (fossil branch コマンドを拡張)
コード自体は簡単なものです。1時間程度コードを追って眺めて実装しました。
コードに精通している開発陣なら実装に15分もかからないと思います。
検索すると何年も頑なに実装を拒んでいる開発陣はなんなんでしょうね。
使わせたくないならリポジトリのオプションにすればいいのに。
fossil branch rename OldBranchName NewBranchName [--override]
$ ./fossil branch ls -a \
| grep -P --invert-match "^[\s]*(branch|trunk|my|\*|trash|.*patch)" \
| xargs.exe -i ./fossil branch rename '{}' trash --override
待つこと2分。チンできあがり。 このようになります。
(3) アーカイブのタイムスタンプをファイルのコミット日で出力する機能
(4) 改行記号 自動コンバート機能
リポジトリの設定で変更できるように改造
(4-1) 細かく設定できます。 LF,CRLF:osの種類、チェックアウト、コミット時,双方向など
コミット時に自動変換します
(4-2) リポジトリのデフォルトの改行を設定 LF,CRLF (convertしますかのデフォルト)
(5) 小さな不具合修正
最後に
確かにわたしはすごいんです。
知識もないのにマイコンはじめてさわって、usb電波時計サーバーつくっちゃう人なんです。
fossilユーザーでもなく知識もないのにソースコード見て、すぐに改造できちゃんですから、きっとすごいんです。
ブランチは、ハードリンクではなくシンボリックリンクになっているのでメインブランチを削除すると不都合が起きます。
チェックイン数もメインブランチを対象に数えています
ブランチ情報だけを消して、データを宙ぶらりんにすることもありですけど。
この改造をまねしようとか思わず、ほかのバージョン管理ソフトをお使いください。
ツールではなく、データが資産なのです。ずっと維持できる有名どころのソフトを選択しましょう。
そういう点では、現時点では、git ,svn を選びましょう。
日誌 おしまい。
fossil my branch new functions
- auto convert character sets
- fossil rename branch
- save to archive with date commit time
- auto convert line breaks CRLF LF \x0D \x0A 13 10
This my functions implemented in a few days. (^^ ♪