Index: trac/ticket/web_ui.py
===================================================================
--- trac/ticket/web_ui.py	(revision 6737)
+++ trac/ticket/web_ui.py	(working copy)
@@ -72,6 +72,9 @@
     default_priority = Option('ticket', 'default_priority', 'major',
         """Default priority for newly created tickets.""")
 
+    default_resolution = Option('ticket', 'default_resolution', 'fixed',
+        """Default resolution when closing tickets.""")
+
     default_milestone = Option('ticket', 'default_milestone', '',
         """Default milestone for newly created tickets.""")
 
Index: trac/ticket/default_workflow.py
===================================================================
--- trac/ticket/default_workflow.py	(revision 6737)
+++ trac/ticket/default_workflow.py	(working copy)
@@ -263,8 +263,13 @@
                              resolutions[0])
             else:
                 id = action + '_resolve_resolution'
+<<<<<<< .mine
+                default = self.config.get('ticket', 'default_resolution')
+                selected_option = req.args.get(id, default)
+=======
                 selected_option = req.args.get(id,
                         self.config.get('ticket', 'default_resolution'))
+>>>>>>> .r6363
                 control.append(tag(['as ', tag.select(
                     [tag.option(x, selected=(x == selected_option or None))
                      for x in resolutions],
Index: trac/ticket/model.py
===================================================================
--- trac/ticket/model.py	(revision 6737)
+++ trac/ticket/model.py	(working copy)
@@ -62,12 +62,18 @@
     def _init_defaults(self, db=None):
         for field in self.fields:
             default = None
+<<<<<<< .mine
+            field_name = field['name']
+            if not field.get('custom'):
+=======
             if field['name'] in ['resolution', 'status']:
                 # Ignore for new - only change through workflow
                 pass
             elif not field.get('custom'):
-                default = self.env.config.get('ticket',
-                                              'default_' + field['name'])
+>>>>>>> .r6363
+                if field_name != 'resolution':
+                    default = self.env.config.get('ticket',
+                                                  'default_' + field_name)
             else:
                 default = field.get('value')
                 options = field.get('options')
@@ -77,9 +83,9 @@
                     except (ValueError, IndexError):
                         self.env.log.warning('Invalid default value "%s" '
                                              'for custom field "%s"'
-                                             % (default, field['name']))
+                                             % (default, field_name))
             if default:
-                self.values.setdefault(field['name'], default)
+                self.values.setdefault(field_name, default)
 
     def _fetch_ticket(self, tkt_id, db=None):
         db = self._get_db(db)
Index: trac/ticket/query.py
===================================================================
--- trac/ticket/query.py	(revision 6737)
+++ trac/ticket/query.py	(working copy)
@@ -41,7 +41,7 @@
                             INavigationContributor, Chrome
 from trac.wiki.api import IWikiSyntaxProvider, parse_args
 from trac.wiki.macros import WikiMacroBase # TODO: should be moved in .api
-from trac.config import Option 
+from trac.config import Option
 
 class QuerySyntaxError(Exception):
     """Exception raised when a ticket query cannot be parsed from a string."""
@@ -94,7 +94,7 @@
         for filter_ in filters:
             filter_ = filter_.split('=')
             if len(filter_) != 2:
-                raise QuerySyntaxError('Query filter requires field and ' 
+                raise QuerySyntaxError('Query filter requires field and '
                                        'constraints separated by a "="')
             field,values = filter_
             if not field:
@@ -254,6 +254,7 @@
         # shorter in the common case where we just want the default columns.
         if cols == self.get_default_columns():
             cols = None
+                                for idx, col in enumerate(cols)))
         return href.query(report=id,
                           order=order, desc=desc and 1 or None,
                           group=self.group or None,
@@ -637,6 +638,17 @@
                       rows,
                       req.args.get('limit'))
 
+        if cols:
+            for idx, col in enumerate(cols):
+                if 'up_' + col in req.args:
+                    query.cols[idx] = cols[idx-1]
+                    query.cols[idx-1] = col
+                    req.redirect(query.get_href(req.href))
+                elif 'down_' + col in req.args:
+                    query.cols[idx] = cols[idx+1]
+                    query.cols[idx+1] = col
+                    req.redirect(query.get_href(req.href))
+
         if 'update' in req.args:
             # Reset session vars
             for var in ('query_constraints', 'query_time', 'query_tickets'):
@@ -779,9 +791,13 @@
         data.setdefault('description', None)
         data['title'] = title
 
-        data['all_columns'] = query.get_all_columns()
+        all_columns = query.get_all_columns()
+        all_columns.sort(key=lambda x: (not x in query.cols,
+                                        x in query.cols and 
+                                        query_cols.index(x)))
         # Don't allow the user to remove the id column        
-        data['all_columns'].remove('id')
+        all_columns.remove('id')
+        data['all_columns'] = all_columns
         data['all_textareas'] = query.get_all_textareas()
 
         add_stylesheet(req, 'common/css/report.css')
Index: trac/ticket/templates/query.html
===================================================================
--- trac/ticket/templates/query.html	(revision 6737)
+++ trac/ticket/templates/query.html	(working copy)
@@ -136,14 +136,24 @@
         <fieldset id="columns">
           <legend>Columns</legend>
           <div>
-            <py:for each="column in all_columns">
-              <label>
-                <input type="checkbox" name="col" value="$column"
-                       checked="${any([(value == column) for value in col])
-                                  and 'checked' or None}" />
-                ${labels.get(column, column or 'none')}
-              </label>
-            </py:for>
+            <table>
+              <tbody>
+                <tr py:for="idx, column in enumerate(all_columns)">
+                  <td>
+                    <input type="checkbox" name="col" value="$column"
+                           checked="${any([(value == column) for value in col])
+                                      and 'selected' or None}" />
+                  </td>
+                  <td>${labels.get(column, column or 'none')}</td>
+                  <td>
+                    <input type="submit" name="up_${column}" value="Up"
+                           disabled="${not idx or None}" />&nbsp;
+                    <input type="submit" name="down_${column}" value="Down"
+                           disabled="${idx == len(all_columns)-1 or None}" />
+                  </td>
+                </tr>
+              </tbody>
+            </table>
           </div>
         </fieldset>
 
Index: trac/htdocs/js/query.js
===================================================================
--- trac/htdocs/js/query.js	(revision 6737)
+++ trac/htdocs/js/query.js	(working copy)
@@ -273,6 +273,38 @@
       }
       select.selectedIndex = 0;
     }
+
+    $("input[@name^='up_']").click(function() {
+      var row = $(this).parents('tr');
+      if (row.prev().length) {
+        var prev = row.prev();
+        if (!row.next().length) {
+          prev.find("input[@name^='down_']").attr("disabled", true);
+        }
+        prev.find("input[@name^='up_']").attr("disabled", false);
+        row.insertBefore(row.prev());
+        if (!row.prev().length) {
+          $(this).attr("disabled", true);
+        }
+        row.find("input[@name^='down_']").attr("disabled", false);
+      }
+      return false;
+    });
+    $("input[@name^='down_']").click(function() {
+      var row = $(this).parents('tr');
+      if (row.next().length) {
+        var next = row.next();
+        if (!row.prev().length) {
+          next.find("input[@name^='up_']").attr("disabled", true);
+        }
+        next.find("input[@name^='down_']").attr("disabled", false);
+        row.insertAfter(row.next());
+        if (!row.next().length) {
+          $(this).attr("disabled", true);
+        }
+        row.find("input[@name^='up_']").attr("disabled", false);
+      }
+      return false;
+    });
   }
-
-})(jQuery);
\ No newline at end of file
+})(jQuery);
Index: trac/htdocs/js/expand_dir.js
===================================================================
--- trac/htdocs/js/expand_dir.js	(revision 6737)
+++ trac/htdocs/js/expand_dir.js	(working copy)
@@ -1,5 +1,46 @@
 // Enable expanding/folding folders in TracBrowser
 
+<<<<<<< .mine
+var FOLDERID_COUNTER = 0;
+var SUBFOLDER_INDENT = 20;
+
+// enableExpandDir adds the capability to folder rows to be expanded and folded
+// It also teach the rows about their ancestors. It expects:
+//  - `parent_tr`, the logical parent row (`null` if there's no ancestor)
+//  - a `rows` jQuery object matching the newly created entry rows
+//  - `qargs`, additional parameters to send to the server when expanding
+
+function enableExpandDir(parent_tr, rows, qargs) {
+  // the ancestors folder ids are present in the parent_tr class attribute
+  var ancestor_folderids = [];
+  if (parent_tr)
+    ancestor_folderids = $.grep(parent_tr.attr("class").split(" "), 
+                                function(c) { return c.match(/^f\d+$/)});
+  var space = ($.browser.msie && $.browser.version == "6.0" ? "&nbsp;" :
+                                                              "&#x200b;");
+  rows.each(function () {
+    var a = $(this).find("a.dir");
+
+    if (a.length) { // then the entry is a folder
+      // create new folder id
+      var folderid = "f" + FOLDERID_COUNTER++;
+      this.id = folderid;
+      $(this).addClass(folderid);
+
+      // add the expander icon
+      a.wrap('<div></div>');
+<<<<<<< .mine
+      var expander = a.before('<span class="expander">' + space +
+                              '</span>').prev();
+=======
+      var expander = a.before('<span class="expander">&nbsp;</span>').prev();
+>>>>>>> .r6391
+      expander.attr("title", "Expand sub-directory in place")
+        .click(function() { toggleDir($(this), qargs); });
+    }
+
+    // tie that row to ancestor folders
+=======
 (function($){
   var FOLDERID_COUNTER = 0;
   var SUBFOLDER_INDENT = 20;
@@ -13,6 +54,7 @@
   window.enableExpandDir = function(parent_tr, rows, qargs) {
     // the ancestors folder ids are present in the parent_tr class attribute
     var ancestor_folderids = [];
+>>>>>>> .r6737
     if (parent_tr)
       ancestor_folderids = $.grep(parent_tr.attr("class").split(" "), 
                                   function(c) { return c.match(/^f\d+$/)});
Index: trac/htdocs/css/report.css
===================================================================
--- trac/htdocs/css/report.css	(revision 6737)
+++ trac/htdocs/css/report.css	(working copy)
@@ -41,6 +41,13 @@
 #filters td.filter label { padding-right: 1em }
 #filters td.actions { text-align: right; white-space: nowrap }
 
+#columns div {
+ height: 15em;
+ overflow: -moz-scrollbars-vertical;
+ overflow-x: hidden;
+ overflow-y: scroll;
+}
+
 #columns div label { 
  display: block;
  float: left;
Index: trac/wiki/web_ui.py
===================================================================
--- trac/wiki/web_ui.py	(revision 6737)
+++ trac/wiki/web_ui.py	(working copy)
@@ -43,10 +43,6 @@
 from trac.wiki.formatter import format_to_oneliner
 from trac.wiki.model import WikiPage
 
-class InvalidWikiPage(TracError):
-    """Exception raised when a Wiki page fails validation."""
-
-
 class WikiModule(Component):
 
     implements(IContentConverter, INavigationContributor, IPermissionRequestor,
@@ -131,7 +127,8 @@
                     if a in req.args:
                         action = a
                         break
-                if action == 'edit' and not has_collision:
+                valid = self._validate(context)
+                if action == 'edit' and not has_collision and valid:
                     self._do_save(req, versioned_page)
                 else:
                     return self._render_editor(req, page, action, has_collision)
@@ -167,8 +164,32 @@
 
     # Internal methods
 
+<<<<<<< .mine
+    def _validate(self, context):
+        req = context.req
+        page = context.resource
+        
+        valid = True
+        # Give the manipulators a pass at post-processing the page
+        for manipulator in self.page_manipulators:
+            for field, message in manipulator.validate_wiki_page(req, page):
+                valid = False
+                if field:
+                    req.warning(_("The Wiki page field '%(field)s' is "
+                                  "invalid: %(message)s",
+                                  field=field, message=message))
+                else:
+                    req.warning(_("Invalid Wiki page: %(message)s",
+                                  message=message))
+        return valid
+
+    def _page_data(self, context, action=''):
+        page_name = context.name()
+        title = context.summary()
+=======
     def _page_data(self, req, page, action=''):
         title = get_resource_summary(self.env, page.resource)
+>>>>>>> .r6363
         if action:
             title += ' (%s)' % action
         return {'page': page, 'action': action, 'title': title}
@@ -240,17 +261,6 @@
             # WIKI_ADMIN
             page.readonly = int('readonly' in req.args)
 
-        # Give the manipulators a pass at post-processing the page
-        for manipulator in self.page_manipulators:
-            for field, message in manipulator.validate_wiki_page(req, page):
-                if field:
-                    raise InvalidWikiPage(_("The Wiki page field '%(field)s' "
-                                            "is invalid: %(message)s",
-                                            field=field, message=message))
-                else:
-                    raise InvalidWikiPage(_("Invalid Wiki page: %(message)s",
-                                            message=message))
-
         try:
             page.save(get_reporter_id(req, 'author'),
                             req.args.get('comment'),
