| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | syntax = "proto3";message Metadata {    // this format is versioned    int32 version = 1;    // complete command line used to write this message    string cmdline = 2;    // repository's name    string repository = 3;    // timestamp of the first analysed commit    int64 begin_unix_time = 4;    // timestamp of the last analysed commit    int64 end_unix_time = 5;    // how many days are in each band [burndown_project, burndown_file, burndown_developer]    int32 granularity = 6;    // how frequently we measure the state of each band [burndown_project, burndown_file, burndown_developer]    int32 sampling = 7;}message BurndownSparseMatrixRow {    // the first `len(column)` elements are stored,    // the rest `number_of_columns - len(column)` values are zeros    repeated uint32 column = 1;}message BurndownSparseMatrix {    string name = 1;    int32 number_of_rows = 2;    int32 number_of_columns = 3;    // `len(row)` matches `number_of_rows`    repeated BurndownSparseMatrixRow row = 4;}message CompressedSparseRowMatrix {    int32 number_of_rows = 1;    int32 number_of_columns = 2;    // https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR.2C_CRS_or_Yale_format.29    repeated int64 data = 3;    repeated int32 indices = 4;    repeated int64 indptr = 5;}message Couples {    // name of each `matrix`'s row and column    repeated string index = 1;    // is always square    CompressedSparseRowMatrix matrix = 2;}message TouchedFiles {    repeated int32 file = 1;  // values correspond to `file_couples::index`}message DeveloperTouchedFiles {    // order corresponds to `developer_couples::index`    repeated TouchedFiles developer = 1;}message AnalysisResults {    // these two are always included    Metadata header = 1;    BurndownSparseMatrix burndown_project = 2;    // this is included if `-files` was specified    repeated BurndownSparseMatrix burndown_file = 3;    // these two are included if `-people` was specified    repeated BurndownSparseMatrix burndown_developer = 4;    // rows and cols order correspond to `burndown_developer`    CompressedSparseRowMatrix developers_interaction = 5;    // these three are included if `-couples` was specified    Couples file_couples = 6;    Couples developer_couples = 7;    DeveloperTouchedFiles touched_files = 8;}
 |