以下のコマンドがテーブルや設定ファイルに詳細またはリストされているかどうか知っている人はいますか?
テーブル: tbl_Version フィールド: コマンド
- リスト項目
- 編集 = 2
- タイプ = 4
- フォルダを追加 = 5
- ファイルを追加 = 7
- 名前の変更 = 8
- 名前の変更、編集 = 10
- 削除 = 16
- 削除、名前変更 = 24
- 削除を取り消す = 32
- 削除取り消し、編集 = 34
- 支店 = 68
- ブランチ、削除 = 84
- マージ = 128
- マージ、編集 = 130
- マージ、タイプ、編集 = 134
- 結合、名前変更、編集 = 138
- マージ、削除 = 144
- 結合、削除、名前変更 = 152
- マージ、削除の取り消し = 160
- 結合、削除の取り消し、編集 = 162
- マージ、ブランチ = 196
- マージ、ブランチ、編集 = 198
答え1
誰かがtbl_Version(TFS 2017 Update3)に対してクエリを実行しようとしている場合、列挙ビットジェシーが示したデータベース内の1か所を移動する必要があります。Jesseが説明しているようにChangeType列挙型が設定されている理由がよくわかりません。.NET 設計ガイドライン CA1008'None'=0ではなく1に設定することで常識を破ったようです。これによりリック・ウェブの価値観ほぼ正解です。したがって、DB の「コマンド」列のビット フラグは次のようになります。
(None = 0)
Add = 1,
Edit = 2,
Encoding = 4,
Rename = 8,
Delete = 16,
Undelete = 32
Branch = 64,
Merge = 128,
Lock = 256,
Rollback = 512,
SourceRename = 1024,
Property = 4096
SELECT文でスペース区切りのリストとしてデコードするための、ちょっとお粗末なSQLを次に示します。
SELECT TOP 10 RTRIM(
CASE WHEN Command & 1 = 1 THEN 'Add ' ELSE '' END
+ CASE WHEN Command & 2 = 2 THEN 'Edit ' ELSE '' END
+ CASE WHEN Command & 4 = 4 THEN 'Encoding ' ELSE '' END
+ CASE WHEN Command & 8 = 8 THEN 'Rename ' ELSE '' END
+ CASE WHEN Command & 16 = 16 THEN 'Delete ' ELSE '' END
+ CASE WHEN Command & 32 = 32 THEN 'Undelete ' ELSE '' END
+ CASE WHEN Command & 64 = 64 THEN 'Branch ' ELSE '' END
+ CASE WHEN Command & 128 = 128 THEN 'Merge ' ELSE '' END
+ CASE WHEN Command & 256 = 256 THEN 'Lock ' ELSE '' END
+ CASE WHEN Command & 512 = 512 THEN 'Rollback ' ELSE '' END
+ CASE WHEN Command & 1024 = 1024 THEN 'SourceRename ' ELSE '' END
+ CASE WHEN Command & 2048 = 2048 THEN 'UNKNOWN ' ELSE '' END
+ CASE WHEN Command & 4096 = 4096 THEN 'Property ' ELSE '' END
+ CASE WHEN Command & 8192 = 8192 THEN 'UNKNOWN ' ELSE '' END
+ CASE WHEN Command & 16384 = 16384 THEN 'UNKNOWN ' ELSE '' END
) 'Commands'
FROM tbl_Version
答え2
これらはバイナリフラグです(例:Merge、UndeleteはMerge+Undelete => 128+32 = 160)。基本値はMicrosoft.TeamFoundation.VersionControl.Client.ChangeType
(ドキュメントはこちら) であり、各変更タイプの基本値は、アセンブリを参照するかMicrosoft.TeamFoundation.VersionControl.Client
、ソースを反映することによって見つけることができます。
[Flags]
public enum ChangeType
{
Add = 2,
Branch = 128,
Delete = 32,
Edit = 4,
Encoding = 8,
Lock = 512,
Merge = 256,
None = 1,
Property = 8192,
Rename = 16,
Rollback = 1024,
SourceRename = 2048,
Undelete = 64
}
PS: 元のテーブルにはいくつかのエラーがあるようです。