summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CGI.pl46
-rw-r--r--bug_form.pl8
-rwxr-xr-xprocess_bug.cgi43
-rwxr-xr-xshow_activity.cgi29
4 files changed, 94 insertions, 32 deletions
diff --git a/CGI.pl b/CGI.pl
index 68bb7edca..1b122aa73 100644
--- a/CGI.pl
+++ b/CGI.pl
@@ -509,6 +509,52 @@ sub PutHeader {
}
+sub DumpBugActivity {
+ my ($id, $starttime) = (@_);
+ my $datepart = "";
+ if (defined $starttime) {
+ $datepart = "and bugs_activity.when >= $starttime";
+ }
+ my $query = "
+ select bugs_activity.field, bugs_activity.when,
+ bugs_activity.oldvalue, bugs_activity.newvalue,
+ profiles.login_name
+ from bugs_activity,profiles
+ where bugs_activity.bug_id = $id $datepart
+ and profiles.userid = bugs_activity.who
+ order by bugs_activity.when";
+
+ SendSQL($query);
+
+ print "<table border cellpadding=4>\n";
+ print "<tr>\n";
+ print " <th>Who</th><th>What</th><th>Old value</th><th>New value</th><th>When</th>\n";
+ print "</tr>\n";
+
+ my @row;
+ while (@row = FetchSQLData()) {
+ my ($field,$when,$old,$new,$who) = (@row);
+ $old = value_quote($old);
+ $new = value_quote($new);
+ if ($old eq "") {
+ $old = "&nbsp;";
+ }
+ if ($new eq "") {
+ $new = "&nbsp;";
+ }
+ print "<tr>\n";
+ print "<td>$who</td>\n";
+ print "<td>$field</td>\n";
+ print "<td>$old</td>\n";
+ print "<td>$new</td>\n";
+ print "<td>$when</td>\n";
+ print "</tr>\n";
+ }
+ print "</table>\n";
+}
+
+
+
diff --git a/bug_form.pl b/bug_form.pl
index 14ec779a6..1c9ecb1e0 100644
--- a/bug_form.pl
+++ b/bug_form.pl
@@ -126,7 +126,8 @@ select
qa_contact,
status_whiteboard,
date_format(creation_ts,'Y-m-d'),
- groupset
+ groupset,
+ delta_ts
from bugs
where bug_id = $::FORM{'id'}
and bugs.groupset & $::usergroupset = bugs.groupset";
@@ -141,7 +142,7 @@ if (@row = FetchSQLData()) {
"bug_severity", "component", "assigned_to", "reporter",
"bug_file_loc", "short_desc", "target_milestone",
"qa_contact", "status_whiteboard", "creation_ts",
- "groupset") {
+ "groupset", "delta_ts") {
$bug{$field} = shift @row;
if (!defined $bug{$field}) {
$bug{$field} = "";
@@ -172,6 +173,7 @@ if (@row = FetchSQLData()) {
$bug{'assigned_to'} = DBID_to_name($bug{'assigned_to'});
$bug{'reporter'} = DBID_to_name($bug{'reporter'});
$bug{'long_desc'} = GetLongDescription($::FORM{'id'});
+my $longdesclength = length($bug{'long_desc'});
GetVersionTable();
@@ -206,6 +208,8 @@ print "
<HEAD><TITLE>Bug $::FORM{'id'} -- " . html_quote($bug{'short_desc'}) .
"</TITLE></HEAD><BODY>
<FORM NAME=changeform METHOD=POST ACTION=\"process_bug.cgi\">
+<INPUT TYPE=HIDDEN NAME=\"delta_ts\" VALUE=\"$bug{'delta_ts'}\">
+<INPUT TYPE=HIDDEN NAME=\"longdesclength\" VALUE=\"$longdesclength\">
<INPUT TYPE=HIDDEN NAME=\"id\" VALUE=$::FORM{'id'}>
<INPUT TYPE=HIDDEN NAME=\"was_assigned_to\" VALUE=\"$bug{'assigned_to'}\">
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0><TR>
diff --git a/process_bug.cgi b/process_bug.cgi
index c671a90c2..3c1852d1d 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -260,12 +260,15 @@ if ($::comma eq "") {
}
my $basequery = $::query;
+my $delta_ts;
sub SnapShotBug {
my ($id) = (@_);
- SendSQL("select " . join(',', @::log_columns) .
+ SendSQL("select delta_ts, " . join(',', @::log_columns) .
" from bugs where bug_id = $id");
- return FetchSQLData();
+ my @row = FetchSQLData();
+ $delta_ts = shift @row;
+ return @row;
}
@@ -273,6 +276,42 @@ foreach my $id (@idlist) {
SendSQL("lock tables bugs write, bugs_activity write, cc write, profiles write");
my @oldvalues = SnapShotBug($id);
+ if (defined $::FORM{'delta_ts'} && $::FORM{'delta_ts'} ne $delta_ts) {
+ print "
+<H1>Mid-air collision detected!</H1>
+Someone else has made changes to this bug at the same time you were trying to.
+The changes made were:
+<p>
+";
+ DumpBugActivity($id, $delta_ts);
+ my $longdesc = GetLongDescription($id);
+ my $longchanged = 0;
+ if (length($longdesc) > $::FORM{'longdesclength'}) {
+ $longchanged = 1;
+ print "<P>Added text to the long description:<blockquote><pre>";
+ print html_quote(substr($longdesc, $::FORM{'longdesclength'}));
+ print "</pre></blockquote>\n";
+ }
+ SendSQL("unlock tables");
+ print "You have the following choices: <ul>\n";
+ $::FORM{'delta_ts'} = $delta_ts;
+ print "<li><form method=post>";
+ foreach my $i (keys %::FORM) {
+ my $value = value_quote($::FORM{$i});
+ print qq{<input type=hidden name="$i" value="$value">\n};
+ }
+ print qq{<input type=submit value="Submit my changes anyway">\n};
+ print " (This will cause all of the above changes to be overwritten";
+ if ($longchanged) {
+ print ", except for the changes to the description";
+ }
+ print qq{.)</form>\n<li><a href="show_bug.cgi?id=$id">Throw away my changes, and go revisit bug $id</a></ul>\n};
+ navigation_header();
+ exit;
+ }
+
+
+
my $query = "$basequery\nwhere bug_id = $id";
# print "<PRE>$query</PRE>\n";
diff --git a/show_activity.cgi b/show_activity.cgi
index 70f4c253f..fbcdcc687 100755
--- a/show_activity.cgi
+++ b/show_activity.cgi
@@ -29,35 +29,8 @@ print "Content-type: text/html\n\n";
PutHeader("Changes made to bug $::FORM{'id'}", "Activity log",
"Bug $::FORM{'id'}");
-my $query = "
- select bugs_activity.field, bugs_activity.when,
- bugs_activity.oldvalue, bugs_activity.newvalue,
- profiles.login_name
- from bugs_activity,profiles
- where bugs_activity.bug_id = $::FORM{'id'}
- and profiles.userid = bugs_activity.who
- order by bugs_activity.when";
-
ConnectToDatabase();
-SendSQL($query);
-print "<table border cellpadding=4>\n";
-print "<tr>\n";
-print " <th>Who</th><th>What</th><th>Old value</th><th>New value</th><th>When</th>\n";
-print "</tr>\n";
+DumpBugActivity($::FORM{'id'});
-my @row;
-while (@row = FetchSQLData()) {
- my ($field,$when,$old,$new,$who) = (@row);
- $old = value_quote($old);
- $new = value_quote($new);
- print "<tr>\n";
- print "<td>$who</td>\n";
- print "<td>$field</td>\n";
- print "<td>$old</td>\n";
- print "<td>$new</td>\n";
- print "<td>$when</td>\n";
- print "</tr>\n";
-}
-print "</table>\n";
print "<hr><a href=show_bug.cgi?id=$::FORM{'id'}>Back to bug $::FORM{'id'}</a>\n";