cvs diff: Diffing modules/cvslog
Index: modules/cvslog/cvs.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cvslog/cvs.module,v
retrieving revision 1.106.2.18
diff -u -p -r1.106.2.18 cvs.module
--- modules/cvslog/cvs.module 10 Sep 2006 06:33:49 -0000 1.106.2.18
+++ modules/cvslog/cvs.module 18 Sep 2006 02:48:09 -0000
@@ -384,39 +384,155 @@ function cvs_nodeapi(&$node, $op, $arg =
*/
function cvs_form_alter($form_id, &$form) {
if ($form_id == 'project_project_node_form') {
- $node = $form['#node'];
- $result = db_query("SELECT rid, name FROM {cvs_repositories}");
- while ($repository = db_fetch_object($result)) {
- $repositories[$repository->rid] = $repository->name;
- }
- $form['cvs_nodeapi'] = array(
- '#type' => 'fieldset',
- '#title' => t('CVS integration'),
- '#collapsible' => TRUE,
- '#collapsed' => $node->cvs_directory ? TRUE : FALSE,
+ return cvs_alter_project_project_form($form);
+ }
+ if ($form_id == 'project_release_node_form') {
+ return cvs_alter_project_release_form($form);
+ }
+}
+
+/**
+ * Alters the project_project node form to add CVS integration
+ * @see cvs_form_alter
+ */
+function cvs_alter_project_project_form(&$form) {
+ $node = $form['#node'];
+ $result = db_query("SELECT rid, name FROM {cvs_repositories}");
+ while ($repository = db_fetch_object($result)) {
+ $repositories[$repository->rid] = $repository->name;
+ }
+ $form['cvs_nodeapi'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('CVS integration'),
+ '#collapsible' => TRUE,
+ '#collapsed' => $node->cvs_directory ? TRUE : FALSE,
+ );
+ $projects_allowing_repo = explode(',', strtolower(variable_get('cvs_allow_repo_selection', '')));
+ $allow_repo = in_array(strtolower($node->title), $projects_allowing_repo);
+ $default_repo = $node->cvs_repository ? $node->cvs_repository : variable_get('cvs_default_repo', '');
+ if (!empty($repositories)) {
+ $form['cvs_nodeapi']['cvs_repository'] = array(
+ '#type' => 'select',
+ '#title' => t('Repository'),
+ '#default_value' => $default_repo,
+ '#options' => $allow_repo ? $repositories : array($default_repo => $repositories[$default_repo]),
+ '#description' => t("Specify the project's CVS repository."),
);
- $projects_allowing_repo = explode(',', strtolower(variable_get('cvs_allow_repo_selection', '')));
- $allow_repo = in_array(strtolower($node->title), $projects_allowing_repo);
- $default_repo = $node->cvs_repository ? $node->cvs_repository : variable_get('cvs_default_repo', '');
- if (!empty($repositories)) {
- $form['cvs_nodeapi']['cvs_repository'] = array(
- '#type' => 'select',
- '#title' => t('Repository'),
- '#default_value' => $default_repo,
- '#options' => $allow_repo ? $repositories : array($default_repo => $repositories[$default_repo]),
- '#description' => t("Specify the project's CVS repository."),
- );
- }
- $form['cvs_nodeapi']['cvs_directory'] = array(
- '#type' => 'textfield',
- '#title' => t('CVS directory'),
- '#default_value' => $node->cvs_directory,
- '#size' => 40,
- '#maxlength' => 255,
- '#description' => t("Specify the project's directory within the specified CVS repository. Directory names should start with a leading slash and end with a trailing slash, and must be unique for each project. For example: /modules/foo/
, /themes/foo/
or /translations/foo/
."),
+ }
+ $form['cvs_nodeapi']['cvs_directory'] = array(
+ '#type' => 'textfield',
+ '#title' => t('CVS directory'),
+ '#default_value' => $node->cvs_directory,
+ '#size' => 40,
+ '#maxlength' => 255,
+ '#description' => t("Specify the project's directory within the specified CVS repository. Directory names should start with a leading slash and end with a trailing slash, and must be unique for each project. For example: /modules/foo/
, /themes/foo/
or /translations/foo/
."),
+ '#required' => TRUE,
+ );
+}
+
+/**
+ * Alters the project_release node to add build tag UI
+ * @see cvs_form_alter
+ */
+function cvs_alter_project_release_form(&$form) {
+ $release = $form['#node'];
+ $project = $form['project']['#value'];
+
+ if (!isset($project->releases)) {
+ // This project has no releases, nothing to alter
+ return $form;
+ }
+
+ $tags = array();
+ $result = db_query("SELECT c.nid, c.tag, c.branch FROM {cvs_tags} c LEFT JOIN {project_release_nodes} p ON c.nid = p.pid AND p.tag = c.tag WHERE c.nid = %d AND p.tag IS NULL ORDER BY branch DESC", $release->pid);
+ while ($tag = db_fetch_object($result)) {
+ $version = project_release_get_version(cvs_get_version_from_tag($tag), $project);
+ $tags[$tag->tag] = $tag->tag .' ('. $version .')';
+ }
+
+ if (!empty($tags)) {
+ $form['cvs_tag'] = array(
+ '#type' => 'select',
+ '#title' => t('CVS tag'),
+ '#options' => $tags,
+ '#weight' => -10,
'#required' => TRUE,
+ '#description' => t("Select the CVS tag (and therefore version number) for this release."),
);
}
+ else {
+ // TODO: print out something reasonable
+ }
+
+ // Clear out all the existing verison number field UI elements
+ $form['version_super_major'] = array(
+ '#type' => 'value',
+ '#value' => $release->version_super_major,
+ );
+ $form['version_super_minor'] = array(
+ '#type' => 'value',
+ '#value' => $release->version_super_minor,
+ );
+ $form['version_major'] = array(
+ '#type' => 'value',
+ '#value' => $release->version_major,
+ );
+ $form['version_minor'] = array(
+ '#type' => 'value',
+ '#value' => $release->version_minor,
+ );
+ $form['version_patch'] = array(
+ '#type' => 'value',
+ '#value' => $release->version_patch,
+ );
+ $form['version_extra'] = array(
+ '#type' => 'value',
+ '#value' => $release->version_extra,
+ );
+}
+
+/**
+ * Returns an array of version number values based on the given tag.
+ */
+function cvs_get_version_from_tag($tag) {
+
+ // TODO: make all of this flexible with settable regular expressions?
+ /*
+ if ($project->tag_regexp) {
+ $regexp = $project->tag_regexp;
+ }
+ elseif ($regexp_setting = variable_get('cvs_tag_version_regexp', '')) {
+ $regexp = $regexp_setting;
+ }
+ else {
+ // TODO: default regexp?
+ }
+ */
+
+ // BEWARE: this is entirely drupal.org specific. Other sites should
+ // modify this logic for their own needs.
+
+ // First, split on '_' to separate "super" version from "base" version.
+ list($super_ver, $base_ver) = explode('_', $tag->tag);
+ $super = explode('-', $super_ver, 5);
+ $base = empty($base_ver) ? array() : explode('-', $base_ver);
+ if (!empty($super[3])) {
+ // Has the form "DRUPAL-X-Y-Z", it must be a core release tag
+ // Ignore the 'DRUPAL' part in $super[0]
+ $version->version_major = $super[1];
+ $version->version_minor = $super[2];
+ $version->version_patch = $super[3];
+ $version->version_extra = $super[4];
+ }
+ else {
+ $version->version_super_major = $super[1];
+ $version->version_super_minor = $super[2];
+ $version->version_major = $base[0] ? $base[0] : 1;
+ $version->version_minor = $tag->branch ? 'X' : $base[1];
+ $version->version_extra = $tag->branch ? '-branch' : $base[2];
+ }
+ // TODO: add code to validate we parsed something reasonable, and ignore bad tags.
+ return $version;
}
/**
cvs diff: Diffing modules/cvslog/xcvs