From: Roland Mas Date: Fri, 23 Nov 2012 12:53:02 +0000 (+0100) Subject: Use a shared table for storing extra SCM repositories (secondary+personal) X-Git-Tag: v5.3-rc1~1675 X-Git-Url: https://scm.fusionforge.org/anonscm/gitweb?p=fusionforge%2Ffusionforge.git;a=commitdiff_plain;h=e00583f28952220764f66e21f052d664242d9edd;hp=1b92d059864101b553936ae4aee8dd318df32118 Use a shared table for storing extra SCM repositories (secondary+personal) --- diff --git a/src/db/20121123-multiple-scm-repositories.sql b/src/db/20121123-multiple-scm-repositories.sql new file mode 100644 index 0000000000..f898053766 --- /dev/null +++ b/src/db/20121123-multiple-scm-repositories.sql @@ -0,0 +1,19 @@ +CREATE TABLE scm_secondary_repos ( + group_id int NOT NULL REFERENCES groups ON DELETE CASCADE ON UPDATE CASCADE, + plugin_id int NOT NULL REFERENCES plugins ON DELETE CASCADE ON UPDATE CASCADE, + repo_name text NOT NULL, + clone_url text NOT NULL, + description text NOT NULL, + next_action int DEFAULT 0 NOT NULL, + CONSTRAINT scm_secondary_repos_unique UNIQUE (group_id, plugin_id, repo_name) +) ; +CREATE INDEX scm_secondary_repos_gid_idx ON plugin_scmgit_secondary_repos (group_id) ; + +CREATE TABLE scm_personal_repos ( + group_id int NOT NULL REFERENCES groups ON DELETE CASCADE ON UPDATE CASCADE, + plugin_id int NOT NULL REFERENCES plugins ON DELETE CASCADE ON UPDATE CASCADE, + user_id int NOT NULL REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE, + next_action int DEFAULT 0 NOT NULL, + CONSTRAINT scm_personal_repos_unique UNIQUE (group_id, plugin_id, user_id) +) ; +CREATE INDEX scm_personal_repos_uid_idx ON plugin_scmgit_secondary_repos (group_id) ; diff --git a/src/plugins/scmgit/common/GitPlugin.class.php b/src/plugins/scmgit/common/GitPlugin.class.php index e2adaded74..c5f49d3a32 100644 --- a/src/plugins/scmgit/common/GitPlugin.class.php +++ b/src/plugins/scmgit/common/GitPlugin.class.php @@ -77,8 +77,9 @@ class GitPlugin extends SCMPlugin { function getInstructionsForAnon($project) { $repo_list = array($project->getUnixName()); - $result = db_query_params ('SELECT repo_name FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND next_action = 0 ORDER BY repo_name', - array ($project->getID())) ; + $result = db_query_params ('SELECT repo_name FROM scm_secondary_repos WHERE group_id=$1 AND next_action = 0 AND plugin_id=$2 ORDER BY repo_name', + array ($project->getID(), + $this->getID())) ; $rows = db_numrows ($result) ; for ($i=0; $i<$rows; $i++) { $repo_list[] = db_result($result,$i,'repo_name'); @@ -101,9 +102,10 @@ class GitPlugin extends SCMPlugin { $b .= '

'; } - $result = db_query_params('SELECT u.user_id, u.user_name, u.realname FROM plugin_scmgit_personal_repos p, users u WHERE p.group_id=$1 AND u.user_id=p.user_id AND u.unix_status=$2', + $result = db_query_params('SELECT u.user_id, u.user_name, u.realname FROM scm_personal_repos p, users u WHERE p.group_id=$1 AND u.user_id=p.user_id AND u.unix_status=$2 AND plugin_id=$3', array ($project->getID(), - 'A')); + 'A', + $this->getID())); $rows = db_numrows($result); if ($rows > 0) { @@ -133,8 +135,9 @@ class GitPlugin extends SCMPlugin { function getInstructionsForRW($project) { $repo_list = array($project->getUnixName()); - $result = db_query_params ('SELECT repo_name FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND next_action = 0 ORDER BY repo_name', - array ($project->getID())) ; + $result = db_query_params ('SELECT repo_name FROM scm_secondary_repos WHERE group_id=$1 AND next_action = 0 AND plugin_id=$2 ORDER BY repo_name', + array ($project->getID(), + $this->getID())); $rows = db_numrows ($result) ; for ($i=0; $i<$rows; $i++) { $repo_list[] = db_result($result,$i,'repo_name'); @@ -229,9 +232,10 @@ class GitPlugin extends SCMPlugin { if (session_loggedin()) { $u =& user_get_object(user_getid()) ; if ($u->getUnixStatus() == 'A') { - $result = db_query_params('SELECT * FROM plugin_scmgit_personal_repos p WHERE p.group_id=$1 AND p.user_id=$2', + $result = db_query_params('SELECT * FROM scm_personal_repos p WHERE p.group_id=$1 AND p.user_id=$2 AND plugin_id=$3', array ($project->getID(), - $u->getID())); + $u->getID(), + $this->getID())); if ($result && db_numrows ($result) > 0) { $b .= '

'; $b .= _('Access to your personal repository'); @@ -407,8 +411,9 @@ class GitPlugin extends SCMPlugin { } // Create project-wide secondary repositories - $result = db_query_params ('SELECT repo_name, description, clone_url FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND next_action = 0', - array ($project->getID())) ; + $result = db_query_params ('SELECT repo_name, description, clone_url FROM scm_secondary_repos WHERE group_id=$1 AND next_action = 0 AND plugin_id=$2', + array ($project->getID(), + $this->getID())); $rows = db_numrows ($result) ; for ($i=0; $i<$rows; $i++) { $repo_name = db_result($result,$i,'repo_name'); @@ -448,8 +453,9 @@ class GitPlugin extends SCMPlugin { } // Delete project-wide secondary repositories - $result = db_query_params ('SELECT repo_name FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND next_action = 1', - array ($project->getID())) ; + $result = db_query_params ('SELECT repo_name FROM scm_secondary_repos WHERE group_id=$1 AND next_action = 1 AND plugin_id=$2', + array ($project->getID(), + $this->getID())); $rows = db_numrows ($result) ; for ($i=0; $i<$rows; $i++) { $repo_name = db_result($result,$i,'repo_name'); @@ -457,15 +463,17 @@ class GitPlugin extends SCMPlugin { if (util_is_valid_repository_name($repo_name)) { system ("rm -rf $repodir"); } - db_query_params ('DELETE FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND repo_name=$2 AND next_action = 1', + db_query_params ('DELETE FROM scm_secondary_repos WHERE group_id=$1 AND repo_name=$2 AND next_action = 1 AND plugin_id=$3', array ($project->getID(), - $repo_name)) ; + $repo_name, + $this->getID())); } // Create users' personal repositories - $result = db_query_params ('SELECT u.user_name FROM plugin_scmgit_personal_repos p, users u WHERE p.group_id=$1 AND u.user_id=p.user_id AND u.unix_status=$2', + $result = db_query_params ('SELECT u.user_name FROM scm_personal_repos p, users u WHERE p.group_id=$1 AND u.user_id=p.user_id AND u.unix_status=$2 AND plugin_id=$3', array ($project->getID(), - 'A')) ; + 'A', + $this->getID())); $rows = db_numrows ($result) ; for ($i=0; $i<$rows; $i++) { system ("mkdir -p $root/users") ; @@ -874,8 +882,10 @@ class GitPlugin extends SCMPlugin { return false; } - $result = db_query_params('SELECT count(*) AS count FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND repo_name = $2', - array ($params['group_id'], $params['repo_name'])); + $result = db_query_params('SELECT count(*) AS count FROM scm_secondary_repos WHERE group_id=$1 AND repo_name = $2 AND plugin_id=$3', + array ($params['group_id'], + $params['repo_name'], + $this->getID())); if (! $result) { $params['error_msg'] = db_error(); return false; @@ -897,7 +907,10 @@ class GitPlugin extends SCMPlugin { $clone = $url; } elseif ($url == $project->getUnixName()) { $clone = $url; - } elseif (($result = db_query_params('SELECT count(*) AS count FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND repo_name = $2', array ($project->getID(), $url))) + } elseif (($result = db_query_params('SELECT count(*) AS count FROM scm_secondary_repos WHERE group_id=$1 AND repo_name = $2 AND plugin_id=$3', + array ($project->getID(), + $url, + $this->getID()))) && db_result($result, 0, 'count')) { // Local repo: try to clone from an existing repo in same project // Repository found @@ -918,8 +931,12 @@ class GitPlugin extends SCMPlugin { $description = "Git repository $params[repo_name] for project ".$project->getUnixName(); } - $result = db_query_params ('INSERT INTO plugin_scmgit_secondary_repos (group_id, repo_name, description, clone_url) VALUES ($1, $2, $3, $4)', - array ($params['group_id'], $params['repo_name'], $description, $clone)); + $result = db_query_params ('INSERT INTO scm_secondary_repos (group_id, repo_name, description, clone_url, plugin_id) VALUES ($1, $2, $3, $4, $5)', + array ($params['group_id'], + $params['repo_name'], + $description, + $clone, + $this->getID())); if (! $result) { $params['error_msg'] = db_error(); return false; @@ -942,8 +959,10 @@ class GitPlugin extends SCMPlugin { return false; } - $result = db_query_params('SELECT count(*) AS count FROM plugin_scmgit_secondary_repos WHERE group_id=$1 AND repo_name = $2', - array ($params['group_id'], $params['repo_name'])); + $result = db_query_params('SELECT count(*) AS count FROM scm_secondary_repos WHERE group_id=$1 AND repo_name = $2 AND plugin_id=$3', + array ($params['group_id'], + $params['repo_name'], + $this->getID())); if (! $result) { $params['error_msg'] = db_error(); return false; @@ -953,8 +972,10 @@ class GitPlugin extends SCMPlugin { return false; } - $result = db_query_params ('UPDATE plugin_scmgit_secondary_repos SET next_action = 1 WHERE group_id=$1 AND repo_name=$2', - array ($params['group_id'], $params['repo_name'])); + $result = db_query_params ('UPDATE scm_secondary_repos SET next_action = 1 WHERE group_id=$1 AND repo_name=$2 AND plugin_id=$3', + array ($params['group_id'], + $params['repo_name'], + $this->getID())); if (! $result) { $params['error_msg'] = db_error(); return false; @@ -996,8 +1017,9 @@ class GitPlugin extends SCMPlugin { $project_name = $project->getUnixName(); $select_repo = '