1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-04-27 19:15:07 +00:00

Add column type to RepoInfo (#660)

* Add column type to RepoInfo

* Go fileserver check repo type

---------

Co-authored-by: 杨赫然 <heran.yang@seafile.com>
This commit is contained in:
feiniks 2024-06-19 12:20:38 +08:00 committed by GitHub
parent 84eb58f01c
commit cd9bae2002
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 120 additions and 47 deletions

View File

@ -412,6 +412,7 @@ type SharedRepo struct {
Permission string `json:"permission"`
Type string `json:"type"`
Owner string `json:"owner"`
RepoType string `json:"-"`
}
// GetReposByOwner get repos by owner
@ -419,7 +420,7 @@ func GetReposByOwner(email string) ([]*SharedRepo, error) {
var repos []*SharedRepo
query := "SELECT o.repo_id, b.commit_id, i.name, " +
"i.version, i.update_time, i.last_modifier FROM " +
"i.version, i.update_time, i.last_modifier, i.type FROM " +
"RepoOwner o LEFT JOIN Branch b ON o.repo_id = b.repo_id " +
"LEFT JOIN RepoInfo i ON o.repo_id = i.repo_id " +
"LEFT JOIN VirtualRepo v ON o.repo_id = v.repo_id " +
@ -443,10 +444,10 @@ func GetReposByOwner(email string) ([]*SharedRepo, error) {
for rows.Next() {
repo := new(SharedRepo)
var repoName, lastModifier sql.NullString
var repoName, lastModifier, repoType sql.NullString
if err := rows.Scan(&repo.ID, &repo.HeadCommitID,
&repoName, &repo.Version, &repo.MTime,
&lastModifier); err == nil {
&lastModifier, &repoType); err == nil {
if repo.HeadCommitID == "" {
continue
@ -458,6 +459,9 @@ func GetReposByOwner(email string) ([]*SharedRepo, error) {
continue
}
repo.Name = repoName.String
if repoType.Valid {
repo.RepoType = repoType.String
}
repos = append(repos, repo)
}
}
@ -473,7 +477,7 @@ func GetReposByOwner(email string) ([]*SharedRepo, error) {
func ListInnerPubRepos() ([]*SharedRepo, error) {
query := "SELECT InnerPubRepo.repo_id, " +
"owner_id, permission, commit_id, i.name, " +
"i.update_time, i.version " +
"i.update_time, i.version, i.type " +
"FROM InnerPubRepo " +
"LEFT JOIN RepoInfo i ON InnerPubRepo.repo_id = i.repo_id, RepoOwner, Branch " +
"WHERE InnerPubRepo.repo_id=RepoOwner.repo_id AND " +
@ -495,10 +499,10 @@ func ListInnerPubRepos() ([]*SharedRepo, error) {
var repos []*SharedRepo
for rows.Next() {
repo := new(SharedRepo)
var repoName sql.NullString
var repoName, repoType sql.NullString
if err := rows.Scan(&repo.ID, &repo.Owner,
&repo.Permission, &repo.HeadCommitID, &repoName,
&repo.MTime, &repo.Version); err == nil {
&repo.MTime, &repo.Version, &repoType); err == nil {
if !repoName.Valid {
continue
@ -507,6 +511,9 @@ func ListInnerPubRepos() ([]*SharedRepo, error) {
continue
}
repo.Name = repoName.String
if repoType.Valid {
repo.RepoType = repoType.String
}
repos = append(repos, repo)
}
}
@ -525,7 +532,7 @@ func ListShareRepos(email, columnType string) ([]*SharedRepo, error) {
if columnType == "from_email" {
query = "SELECT sh.repo_id, to_email, " +
"permission, commit_id, " +
"i.name, i.update_time, i.version FROM " +
"i.name, i.update_time, i.version, i.type FROM " +
"SharedRepo sh LEFT JOIN RepoInfo i ON sh.repo_id = i.repo_id, Branch b " +
"WHERE from_email=? AND " +
"sh.repo_id = b.repo_id AND " +
@ -534,7 +541,7 @@ func ListShareRepos(email, columnType string) ([]*SharedRepo, error) {
} else if columnType == "to_email" {
query = "SELECT sh.repo_id, from_email, " +
"permission, commit_id, " +
"i.name, i.update_time, i.version FROM " +
"i.name, i.update_time, i.version, i.type FROM " +
"SharedRepo sh LEFT JOIN RepoInfo i ON sh.repo_id = i.repo_id, Branch b " +
"WHERE to_email=? AND " +
"sh.repo_id = b.repo_id AND " +
@ -561,10 +568,10 @@ func ListShareRepos(email, columnType string) ([]*SharedRepo, error) {
for rows.Next() {
repo := new(SharedRepo)
var repoName sql.NullString
var repoName, repoType sql.NullString
if err := rows.Scan(&repo.ID, &repo.Owner,
&repo.Permission, &repo.HeadCommitID,
&repoName, &repo.MTime, &repo.Version); err == nil {
&repoName, &repo.MTime, &repo.Version, &repoType); err == nil {
if !repoName.Valid {
continue
@ -573,6 +580,9 @@ func ListShareRepos(email, columnType string) ([]*SharedRepo, error) {
continue
}
repo.Name = repoName.String
if repoType.Valid {
repo.RepoType = repoType.String
}
repos = append(repos, repo)
}
@ -599,7 +609,7 @@ func GetGroupReposByUser(user string, orgID int) ([]*SharedRepo, error) {
if orgID < 0 {
sqlBuilder.WriteString("SELECT g.repo_id, " +
"user_name, permission, commit_id, " +
"i.name, i.update_time, i.version " +
"i.name, i.update_time, i.version, i.type " +
"FROM RepoGroup g " +
"LEFT JOIN RepoInfo i ON g.repo_id = i.repo_id, " +
"Branch b WHERE g.repo_id = b.repo_id AND " +
@ -607,7 +617,7 @@ func GetGroupReposByUser(user string, orgID int) ([]*SharedRepo, error) {
} else {
sqlBuilder.WriteString("SELECT g.repo_id, " +
"owner, permission, commit_id, " +
"i.name, i.update_time, i.version " +
"i.name, i.update_time, i.version, i.type " +
"FROM OrgGroupRepo g " +
"LEFT JOIN RepoInfo i ON g.repo_id = i.repo_id, " +
"Branch b WHERE g.repo_id = b.repo_id AND " +
@ -631,10 +641,13 @@ func GetGroupReposByUser(user string, orgID int) ([]*SharedRepo, error) {
var repos []*SharedRepo
for rows.Next() {
gRepo := new(SharedRepo)
var repoType sql.NullString
if err := rows.Scan(&gRepo.ID, &gRepo.Owner,
&gRepo.Permission, &gRepo.HeadCommitID,
&gRepo.Name, &gRepo.MTime, &gRepo.Version); err == nil {
&gRepo.Name, &gRepo.MTime, &gRepo.Version, &repoType); err == nil {
if repoType.Valid {
gRepo.RepoType = repoType.String
}
repos = append(repos, gRepo)
}
}

View File

@ -352,6 +352,9 @@ func getAccessibleRepoListCB(rsp http.ResponseWriter, r *http.Request) *appError
var repoObjects []*share.SharedRepo
for _, repo := range repos {
if repo.RepoType != "" {
continue
}
if _, ok := obtainedRepos[repo.ID]; !ok {
obtainedRepos[repo.ID] = repo.ID
}
@ -370,6 +373,9 @@ func getAccessibleRepoListCB(rsp http.ResponseWriter, r *http.Request) *appError
if _, ok := obtainedRepos[sRepo.ID]; ok {
continue
}
if sRepo.RepoType != "" {
continue
}
sRepo.Type = "srepo"
sRepo.Owner = strings.ToLower(sRepo.Owner)
repoObjects = append(repoObjects, sRepo)
@ -402,6 +408,9 @@ func getAccessibleRepoListCB(rsp http.ResponseWriter, r *http.Request) *appError
if _, ok := obtainedRepos[sRepo.ID]; ok {
continue
}
if sRepo.RepoType != "" {
continue
}
sRepo.Type = "grepo"
sRepo.Owner = "Organization"
@ -428,6 +437,9 @@ func filterGroupRepos(repos []*share.SharedRepo) map[string]*share.SharedRepo {
table := make(map[string]*share.SharedRepo)
for _, repo := range repos {
if repo.RepoType != "" {
continue
}
if repoPrev, ok := table[repo.ID]; ok {
if repo.Permission == "rw" && repoPrev.Permission == "r" {
table[repo.ID] = repo

View File

@ -41,6 +41,7 @@ public class Repo : Object {
public string head_cmmt_id { get; set; }
public string root { get; set; }
public int status { get; set; }
public string repo_type { get; set; }
// To be compatible with obsoleted SharedRepo object
public string repo_id { get; set; }

View File

@ -178,7 +178,9 @@ CREATE TABLE IF NOT EXISTS RepoInfo (id BIGINT NOT NULL PRIMARY KEY AUTO_INCREME
is_encrypted INTEGER,
last_modifier VARCHAR(255),
status INTEGER DEFAULT 0,
UNIQUE INDEX(repo_id)
type VARCHAR(10),
UNIQUE INDEX(repo_id),
INDEX (type)
) ENGINE=INNODB;
CREATE TABLE IF NOT EXISTS RepoOwner (

View File

@ -42,7 +42,8 @@ CREATE TABLE IF NOT EXISTS FolderGroupPerm (repo_id CHAR(36) NOT NULL, path TEXT
CREATE INDEX IF NOT EXISTS folder_group_perm_idx ON FolderGroupPerm(repo_id);
CREATE TABLE IF NOT EXISTS FolderPermTimestamp (repo_id CHAR(36) PRIMARY KEY, timestamp INTEGER);
CREATE TABLE IF NOT EXISTS WebUploadTempFiles (repo_id CHAR(40) NOT NULL, file_path TEXT NOT NULL, tmp_file_path TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS RepoInfo (repo_id CHAR(36) PRIMARY KEY, name VARCHAR(255) NOT NULL, update_time INTEGER, version INTEGER, is_encrypted INTEGER, last_modifier VARCHAR(255), status INTEGER DEFAULT 0);
CREATE TABLE IF NOT EXISTS RepoInfo (repo_id CHAR(36) PRIMARY KEY, name VARCHAR(255) NOT NULL, update_time INTEGER, version INTEGER, is_encrypted INTEGER, last_modifier VARCHAR(255), status INTEGER DEFAULT 0, type VARCHAR(10));
CREATE INDEX IF NOT EXISTS RepoInfoTypeIndex on RepoInfo (type);
CREATE TABLE IF NOT EXISTS RepoStorageId (repo_id CHAR(40) NOT NULL, storage_id VARCHAR(255) NOT NULL);
CREATE TABLE IF NOT EXISTS UserQuota (user VARCHAR(255) PRIMARY KEY, quota BIGINT);
CREATE TABLE IF NOT EXISTS UserShareQuota (user VARCHAR(255) PRIMARY KEY, quota BIGINT);

View File

@ -2482,6 +2482,7 @@ fill_obj_from_seafilerepo (SeafileRepo *srepo, GHashTable *table)
char *repo_name = NULL;
char *permission = NULL;
char *owner = NULL;
char *type = NULL;
gint64 last_modify = 0;
json_t *obj = NULL;
@ -2492,10 +2493,15 @@ fill_obj_from_seafilerepo (SeafileRepo *srepo, GHashTable *table)
"last_modify", &last_modify,
"permission", &permission,
"user", &owner,
"repo_type", &type,
NULL);
if (!repo_id)
goto out;
if (type) {
g_free (repo_id);
goto out;
}
//the repo_id will be free when the table is destroyed.
if (g_hash_table_lookup (table, repo_id)) {
g_free (repo_id);
@ -2516,6 +2522,7 @@ out:
g_free (repo_name);
g_free (permission);
g_free (owner);
g_free (type);
return obj;
}
@ -2532,6 +2539,7 @@ filter_group_repos (GList *repos)
char *permission = NULL;
char *permission_prev = NULL;
char *repo_id = NULL;
char *type = NULL;
table = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free,
@ -2541,7 +2549,15 @@ filter_group_repos (GList *repos)
srepo = iter->data;
g_object_get (srepo, "id", &repo_id,
"permission", &permission,
"repo_type", &type,
NULL);
if (type) {
g_free (repo_id);
g_free (permission);
g_free (type);
g_object_unref (srepo);
continue;
}
srepo_tmp = g_hash_table_lookup (table, repo_id);
if (srepo_tmp) {
g_object_get (srepo_tmp, "permission", &permission_prev,
@ -2557,10 +2573,11 @@ filter_group_repos (GList *repos)
} else {
g_hash_table_insert (table, g_strdup (repo_id), srepo);
}
g_free (repo_id);
g_free (permission);
g_free (type);
}
g_free (repo_id);
g_free (permission);
return table;
}
@ -2627,6 +2644,10 @@ get_accessible_repo_list_cb (evhtp_request_t *req, void *arg)
for (iter = repos; iter; iter = iter->next) {
repo = iter->data;
if (repo->type) {
seaf_repo_unref (repo);
continue;
}
if (!repo->is_corrupted) {
if (!g_hash_table_lookup (obtained_repos, repo->id)) {

View File

@ -92,6 +92,7 @@ seaf_repo_free (SeafRepo *repo)
g_free (repo->last_modifier);
g_free (repo->pwd_hash_algo);
g_free (repo->pwd_hash_params);
g_free (repo->type);
g_free (repo);
}
@ -680,6 +681,7 @@ create_repo_fill_size (SeafDBRow *row, void *data)
const char *vrepo_id = seaf_db_row_get_column_text (row, 3);
gint64 file_count = seaf_db_row_get_column_int64 (row, 7);
int status = seaf_db_row_get_column_int(row, 8);
const char *type = seaf_db_row_get_column_text (row, 9);
*repo = seaf_repo_new (repo_id, NULL, NULL);
if (!*repo)
@ -712,6 +714,9 @@ create_repo_fill_size (SeafDBRow *row, void *data)
} else {
memcpy ((*repo)->store_id, repo_id, 36);
}
if (type) {
(*repo)->type = g_strdup(type);
}
return TRUE;
}
@ -724,7 +729,7 @@ get_repo_from_db (SeafRepoManager *mgr, const char *id, gboolean *db_err)
if (seaf_db_type(mgr->seaf->db) != SEAF_DB_TYPE_PGSQL)
sql = "SELECT r.repo_id, s.size, b.commit_id, "
"v.repo_id, v.origin_repo, v.path, v.base_commit, fc.file_count, i.status FROM "
"v.repo_id, v.origin_repo, v.path, v.base_commit, fc.file_count, i.status, i.type FROM "
"Repo r LEFT JOIN Branch b ON r.repo_id = b.repo_id "
"LEFT JOIN RepoSize s ON r.repo_id = s.repo_id "
"LEFT JOIN VirtualRepo v ON r.repo_id = v.repo_id "
@ -1083,7 +1088,8 @@ create_tables_mysql (SeafRepoManager *mgr)
sql = "CREATE TABLE IF NOT EXISTS RepoInfo (id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT, "
"repo_id CHAR(36), "
"name VARCHAR(255) NOT NULL, update_time BIGINT, version INTEGER, "
"is_encrypted INTEGER, last_modifier VARCHAR(255), status INTEGER DEFAULT 0, UNIQUE INDEX(repo_id)) ENGINE=INNODB";
"is_encrypted INTEGER, last_modifier VARCHAR(255), status INTEGER DEFAULT 0, type VARCHAR(10), "
"UNIQUE INDEX(repo_id), INDEX(type)) ENGINE=INNODB";
if (seaf_db_query (db, sql) < 0)
return -1;
@ -2248,6 +2254,7 @@ collect_repos_fill_size_commit (SeafDBRow *row, void *data)
gboolean is_encrypted = seaf_db_row_get_column_int (row, 6) ? TRUE : FALSE;
const char *last_modifier = seaf_db_row_get_column_text (row, 7);
int status = seaf_db_row_get_column_int (row, 8);
const char *type = seaf_db_row_get_column_text (row, 9);
repo = seaf_repo_new (repo_id, NULL, NULL);
if (!repo)
@ -2259,8 +2266,8 @@ collect_repos_fill_size_commit (SeafDBRow *row, void *data)
}
repo->size = size;
if (seaf_db_row_get_column_count (row) == 10) {
gint64 file_count = seaf_db_row_get_column_int64 (row, 9);
if (seaf_db_row_get_column_count (row) == 11) {
gint64 file_count = seaf_db_row_get_column_int64 (row, 10);
repo->file_count = file_count;
}
head = seaf_branch_new ("master", repo_id, commit_id);
@ -2273,6 +2280,9 @@ collect_repos_fill_size_commit (SeafDBRow *row, void *data)
repo->last_modifier = g_strdup (last_modifier);
repo->status = status;
}
if (type) {
repo->type = g_strdup(type);
}
out:
*prepos = g_list_prepend (*prepos, repo);
@ -2297,7 +2307,7 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
if (start == -1 && limit == -1) {
if (db_type != SEAF_DB_TYPE_PGSQL)
sql = "SELECT o.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type FROM "
"RepoOwner o LEFT JOIN RepoSize s ON o.repo_id = s.repo_id "
"LEFT JOIN Branch b ON o.repo_id = b.repo_id "
"LEFT JOIN RepoInfo i ON o.repo_id = i.repo_id "
@ -2325,7 +2335,7 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
} else {
if (db_type != SEAF_DB_TYPE_PGSQL)
sql = "SELECT o.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type FROM "
"RepoOwner o LEFT JOIN RepoSize s ON o.repo_id = s.repo_id "
"LEFT JOIN Branch b ON o.repo_id = b.repo_id "
"LEFT JOIN RepoInfo i ON o.repo_id = i.repo_id "
@ -2412,7 +2422,7 @@ seaf_repo_manager_get_repos_by_id_prefix (SeafRepoManager *mgr,
if (start == -1 && limit == -1) {
if (db_type != SEAF_DB_TYPE_PGSQL)
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN VirtualRepo v ON i.repo_id = v.repo_id "
@ -2437,7 +2447,7 @@ seaf_repo_manager_get_repos_by_id_prefix (SeafRepoManager *mgr,
} else {
if (db_type != SEAF_DB_TYPE_PGSQL)
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN VirtualRepo v ON i.repo_id = v.repo_id "
@ -2482,7 +2492,7 @@ seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name)
switch (seaf_db_type(seaf->db)) {
case SEAF_DB_TYPE_MYSQL:
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status, fc.file_count FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type, fc.file_count FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN RepoFileCount fc ON i.repo_id = fc.repo_id "
@ -2506,7 +2516,7 @@ seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name)
break;
case SEAF_DB_TYPE_SQLITE:
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status, fc.file_count FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type, fc.file_count FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN RepoFileCount fc ON i.repo_id = fc.repo_id "
@ -2559,7 +2569,7 @@ seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit, con
switch (seaf_db_type(mgr->seaf->db)) {
case SEAF_DB_TYPE_MYSQL:
g_string_append (sql, "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status, f.file_count FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type, f.file_count FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN RepoFileCount f ON i.repo_id = f.repo_id "
@ -2577,7 +2587,7 @@ seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit, con
break;
case SEAF_DB_TYPE_SQLITE:
g_string_append (sql, "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status, f.file_count FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type, f.file_count FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN RepoFileCount f ON i.repo_id = f.repo_id "
@ -2605,7 +2615,7 @@ seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit, con
switch (seaf_db_type(mgr->seaf->db)) {
case SEAF_DB_TYPE_MYSQL:
g_string_append (sql, "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status, f.file_count FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type, f.file_count FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN RepoFileCount f ON i.repo_id = f.repo_id "
@ -2623,7 +2633,7 @@ seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit, con
break;
case SEAF_DB_TYPE_SQLITE:
g_string_append (sql, "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status, f.file_count FROM "
"i.version, i.is_encrypted, i.last_modifier, i.status, i.type, f.file_count FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"LEFT JOIN RepoFileCount f ON i.repo_id = f.repo_id "
@ -3298,6 +3308,7 @@ get_group_repos_cb (SeafDBRow *row, void *data)
gboolean is_encrypted = seaf_db_row_get_column_int (row, 12) ? TRUE : FALSE;
const char *last_modifier = seaf_db_row_get_column_text (row, 13);
int status = seaf_db_row_get_column_int (row, 14);
const char *type = seaf_db_row_get_column_text (row, 15);
char *user_name_l = g_ascii_strdown (user_name, -1);
@ -3319,7 +3330,7 @@ get_group_repos_cb (SeafDBRow *row, void *data)
if (vrepo_id) {
const char *origin_repo_id = seaf_db_row_get_column_text (row, 7);
const char *origin_path = seaf_db_row_get_column_text (row, 8);
const char *origin_repo_name = seaf_db_row_get_column_text (row, 15);
const char *origin_repo_name = seaf_db_row_get_column_text (row, 16);
g_object_set (srepo, "store_id", origin_repo_id,
"origin_repo_id", origin_repo_id,
"origin_repo_name", origin_repo_name,
@ -3336,6 +3347,9 @@ get_group_repos_cb (SeafDBRow *row, void *data)
"encrypted", is_encrypted,
"last_modifier", last_modifier, NULL);
}
if (type) {
g_object_set (srepo, "repo_type", type, NULL);
}
*p_list = g_list_prepend (*p_list, srepo);
}
@ -3411,7 +3425,7 @@ seaf_repo_manager_get_repos_by_group (SeafRepoManager *mgr,
sql = "SELECT RepoGroup.repo_id, v.repo_id, "
"group_id, user_name, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i2.name "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, i2.name "
"FROM RepoGroup LEFT JOIN VirtualRepo v ON "
"RepoGroup.repo_id = v.repo_id "
"LEFT JOIN RepoInfo i ON RepoGroup.repo_id = i.repo_id "
@ -3449,7 +3463,7 @@ seaf_repo_manager_get_group_repos_by_owner (SeafRepoManager *mgr,
sql = "SELECT RepoGroup.repo_id, v.repo_id, "
"group_id, user_name, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i2.name "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, i2.name "
"FROM RepoGroup LEFT JOIN VirtualRepo v ON "
"RepoGroup.repo_id = v.repo_id "
"LEFT JOIN RepoInfo i ON RepoGroup.repo_id = i.repo_id "
@ -3600,6 +3614,7 @@ collect_public_repos (SeafDBRow *row, void *data)
gboolean is_encrypted = seaf_db_row_get_column_int (row, 11) ? TRUE : FALSE;
const char *last_modifier = seaf_db_row_get_column_text (row, 12);
int status = seaf_db_row_get_column_int (row, 13);
const char *type = seaf_db_row_get_column_text (row, 14);
char *owner_l = g_ascii_strdown (owner, -1);
@ -3636,6 +3651,9 @@ collect_public_repos (SeafDBRow *row, void *data)
"encrypted", is_encrypted,
"last_modifier", last_modifier, NULL);
}
if (type) {
g_object_set (srepo, "repo_type", type, NULL);
}
*ret = g_list_prepend (*ret, srepo);
}
@ -3652,7 +3670,7 @@ seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr, gboolean *db_err)
sql = "SELECT InnerPubRepo.repo_id, VirtualRepo.repo_id, "
"owner_id, permission, commit_id, s.size, "
"VirtualRepo.origin_repo, VirtualRepo.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type "
"FROM InnerPubRepo LEFT JOIN VirtualRepo ON "
"InnerPubRepo.repo_id=VirtualRepo.repo_id "
"LEFT JOIN RepoInfo i ON InnerPubRepo.repo_id = i.repo_id "
@ -3696,7 +3714,7 @@ seaf_repo_manager_list_inner_pub_repos_by_owner (SeafRepoManager *mgr,
sql = "SELECT InnerPubRepo.repo_id, VirtualRepo.repo_id, "
"owner_id, permission, commit_id, s.size, "
"VirtualRepo.origin_repo, VirtualRepo.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type "
"FROM InnerPubRepo LEFT JOIN VirtualRepo ON "
"InnerPubRepo.repo_id=VirtualRepo.repo_id "
"LEFT JOIN RepoInfo i ON InnerPubRepo.repo_id = i.repo_id "
@ -4575,7 +4593,7 @@ seaf_get_group_shared_repo_by_path (SeafRepoManager *mgr,
sql = "SELECT RepoGroup.repo_id, v.repo_id, "
"group_id, user_name, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i2.name "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, i2.name "
"FROM RepoGroup LEFT JOIN VirtualRepo v ON "
"RepoGroup.repo_id = v.repo_id "
"LEFT JOIN RepoInfo i ON RepoGroup.repo_id = i.repo_id "
@ -4589,7 +4607,7 @@ seaf_get_group_shared_repo_by_path (SeafRepoManager *mgr,
sql = "SELECT OrgGroupRepo.repo_id, v.repo_id, "
"group_id, owner, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i2.name "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, i2.name "
"FROM OrgGroupRepo LEFT JOIN VirtualRepo v ON "
"OrgGroupRepo.repo_id = v.repo_id "
"LEFT JOIN RepoInfo i ON OrgRepoGroup.repo_id = i.repo_id "
@ -4648,7 +4666,7 @@ seaf_get_group_repos_by_user (SeafRepoManager *mgr,
g_string_printf (sql, "SELECT g.repo_id, v.repo_id, "
"group_id, %s, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i2.name "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, i2.name "
"FROM %s g LEFT JOIN VirtualRepo v ON "
"g.repo_id = v.repo_id "
"LEFT JOIN RepoInfo i ON g.repo_id = i.repo_id "

View File

@ -42,6 +42,7 @@ struct _SeafRepo {
gint64 last_modify;
gint64 size;
gint64 file_count;
gchar *type;
int status;

View File

@ -189,7 +189,8 @@ collect_repos (SeafDBRow *row, void *data)
gboolean is_encrypted = seaf_db_row_get_column_int (row, 11) ? TRUE : FALSE;
const char *last_modifier = seaf_db_row_get_column_text (row, 12);
int status = seaf_db_row_get_column_int (row, 13);
const char *origin_repo_name = seaf_db_row_get_column_text (row, 14);
const char *type = seaf_db_row_get_column_text (row, 14);
const char *origin_repo_name = seaf_db_row_get_column_text (row, 15);
char *email_l = g_ascii_strdown (email, -1);
@ -226,6 +227,9 @@ collect_repos (SeafDBRow *row, void *data)
"encrypted", is_encrypted,
"last_modifier", last_modifier, NULL);
}
if (type) {
g_object_set (repo, "repo_type", type, NULL);
}
*p_repos = g_list_prepend (*p_repos, repo);
}
@ -303,7 +307,7 @@ seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
sql = "SELECT sh.repo_id, v.repo_id, "
"to_email, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, "
"i2.name FROM "
"SharedRepo sh LEFT JOIN VirtualRepo v ON "
"sh.repo_id=v.repo_id "
@ -318,7 +322,7 @@ seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
sql = "SELECT sh.repo_id, v.repo_id, "
"from_email, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, "
"i2.name FROM "
"SharedRepo sh LEFT JOIN VirtualRepo v ON "
"sh.repo_id=v.repo_id "
@ -353,7 +357,7 @@ seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
sql = "SELECT sh.repo_id, v.repo_id, "
"to_email, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, "
"i2.name FROM "
"SharedRepo sh LEFT JOIN VirtualRepo v ON "
"sh.repo_id=v.repo_id "
@ -369,7 +373,7 @@ seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
sql = "SELECT sh.repo_id, v.repo_id, "
"from_email, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, "
"i2.name FROM "
"SharedRepo sh LEFT JOIN VirtualRepo v ON "
"sh.repo_id=v.repo_id "
@ -813,7 +817,7 @@ seaf_get_shared_repo_by_path (SeafRepoManager *mgr,
sql = "SELECT sh.repo_id, v.repo_id, "
"from_email, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, "
"i2.name FROM "
"SharedRepo sh LEFT JOIN VirtualRepo v ON "
"sh.repo_id=v.repo_id "
@ -827,7 +831,7 @@ seaf_get_shared_repo_by_path (SeafRepoManager *mgr,
sql = "SELECT sh.repo_id, v.repo_id, "
"from_email, permission, commit_id, s.size, "
"v.origin_repo, v.path, i.name, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, "
"i.update_time, i.version, i.is_encrypted, i.last_modifier, i.status, i.type, "
"i2.name FROM "
"OrgSharedRepo sh LEFT JOIN VirtualRepo v ON "
"sh.repo_id=v.repo_id "