]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Avoid mid-air collisions (implementing a suggestion by
authorterry%mozilla.org <>
Wed, 26 May 1999 02:22:30 +0000 (02:22 +0000)
committerterry%mozilla.org <>
Wed, 26 May 1999 02:22:30 +0000 (02:22 +0000)
py8ieh=bugzilla@bath.ac.uk).

CGI.pl
bug_form.pl
process_bug.cgi
show_activity.cgi

diff --git a/CGI.pl b/CGI.pl
index 68bb7edcac228af4ba4be6e50a16c4f84e8fd4da..1b122aa7390ddc1598a5b2aee5660aa8cbf8e27d 100644 (file)
--- 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";
+}
+
+
+
 
 
 
index 14ec779a62d0c55922df84d5323936dc0ec68cf4..1c9ecb1e03b591374f2583ca586a6e1ab2c56ec0 100644 (file)
@@ -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>
index c671a90c2fe10f7530560153f3c54e5c6b6bdd6b..3c1852d1d6d67f4150da2284e56415b110aabd3e 100755 (executable)
@@ -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";
index 70f4c253ff87391701f71235eba666090d4893d5..fbcdcc6879cb92c69297a423fabe9b2a39be8395 100755 (executable)
@@ -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";