couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jan Lehnardt <...@apache.org>
Subject Re: svn commit: r774474 - in /couchdb/trunk: etc/couchdb/default.ini.tpl.in share/www/script/test/changes.js src/couchdb/couch_httpd_misc_handlers.erl src/couchdb/couch_query_servers.erl
Date Fri, 15 May 2009 15:11:04 GMT

On 15 May 2009, at 16:54, Damien Katz wrote:

>
> On May 13, 2009, at 9:39 PM, Jan Lehnardt wrote:
>
>>
>> On 14 May 2009, at 03:17, Damien Katz wrote:
>>
>>> We have to both block and merge commits? It seems like we should  
>>> only need to do one or the other, but not both.
>>
>> We need block or merge a commit for any stable branch
>> (currently 0.9.x), depending on wether we like to have it
>> in the stable branch or not.
>
> I don't understand why. By default, fixes DO NOT go into the stable  
> branch, unless they fix an critical bug of that branch.
>
> Instead of blocking patches, we should only merge patches that we  
> need in the branch.
>
>>
>> We could just not merge it, but explicitly blocking it makes
>> working with SVN and keeping track of unmerged and
>> unblocked commits easier. I.e. we can differentiate between
>> commits that have been considered to not be backported and
>> commits that have not been considered at all.
>
> I don't see how that makes it easier, unless we decided at some  
> point to merge everything from one branch over to another, but with  
> some exceptions. But that's not how the stable branches should work,  
> the exceptions should be the patches themselves, each one committed  
> must be considered necessary.
>
> Otherwise, we have to do all this extra work it seems, and I don't  
> see the point.


   $ svn mergeinfo trunk branches/0.9.x --show-revs eligible

gives us a list of all commits to trunk that have not yet been merged  
or blocked
for branches/0.9.x. The idea is to use this as a mechanism to make  
sure no
patches fall between cracks that should go into a branch. We can only  
do this
if we explicitly block commits.

This makes separating the roles of committer and release manager  
possible and
the RM's live a bit easier.

I think two additional svn commands are not that much of "extra work".  
We could
make nice aliases that would give you this workflow:

   $ svn commit -m 'new feature' path/to/file
   Committed revision r123456
   $ couchsvn block r123456 branches/0.9.x
   r123456 blocked for branches/0.9.x

or

   $ svn commit -m 'bugfix' path/to/file
   Committed revision r123456
   $ couchsvn merge r123456 branches/0.9.x
   r123456 merged into branches/0.9.x

Would that work?

I'm not too pressed about this procedure, but I think it is useful and  
only a small
burden.

Cheers
Jan
---












>
> -Damien
>
>>
>> Cheers
>> Jan
>> --
>> Or a more geeky answer: A commit can be in one of three
>> states (for any given branch): Merged, blocked, and unprocessed.
>> A binary flag is not sufficient to record three states :)
>>
>>
>>>
>>> -Damien
>>>
>>> On May 13, 2009, at 8:54 PM, Jan Lehnardt wrote:
>>>
>>>> Hi Damien,
>>>>
>>>> Can you take care of blocking / merging commits from / to
>>>> branches/0.9.x or should somebody else look after it? I'd
>>>> volunteer.
>>>>
>>>> Cheers
>>>> Jan
>>>> --
>>>>
>>>>
>>>>
>>>> On 13 May 2009, at 20:27, damien@apache.org wrote:
>>>>
>>>>> Author: damien
>>>>> Date: Wed May 13 18:27:11 2009
>>>>> New Revision: 774474
>>>>>
>>>>> URL: http://svn.apache.org/viewvc?rev=774474&view=rev
>>>>> Log:
>>>>> Adding testing for GET /_changes?continuous=true by adding a  
>>>>> GET /_sleep?time=Msecs call, which allows the browser to process  
>>>>> the waiting data on the other async XHR request.
>>>>>
>>>>> Modified:
>>>>> couchdb/trunk/etc/couchdb/default.ini.tpl.in
>>>>> couchdb/trunk/share/www/script/test/changes.js
>>>>> couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl
>>>>> couchdb/trunk/src/couchdb/couch_query_servers.erl
>>>>>
>>>>> Modified: couchdb/trunk/etc/couchdb/default.ini.tpl.in
>>>>> URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/default.ini.tpl.in?rev=774474&r1=774473&r2=774474&view=diff
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> ==================================================================
>>>>> --- couchdb/trunk/etc/couchdb/default.ini.tpl.in (original)
>>>>> +++ couchdb/trunk/etc/couchdb/default.ini.tpl.in Wed May 13  
>>>>> 18:27:11 2009
>>>>> @@ -60,6 +60,7 @@
>>>>> _restart = {couch_httpd_misc_handlers, handle_restart_req}
>>>>> _stats = {couch_httpd_stats_handlers, handle_stats_req}
>>>>> _log = {couch_httpd_misc_handlers, handle_log_req}
>>>>> +_sleep = {couch_httpd_misc_handlers, handle_sleep_req}
>>>>>
>>>>> [httpd_db_handlers]
>>>>> _compact = {couch_httpd_db, handle_compact_req}
>>>>>
>>>>> Modified: couchdb/trunk/share/www/script/test/changes.js
>>>>> URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/changes.js?rev=774474&r1=774473&r2=774474&view=diff
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> ==================================================================
>>>>> --- couchdb/trunk/share/www/script/test/changes.js (original)
>>>>> +++ couchdb/trunk/share/www/script/test/changes.js Wed May 13  
>>>>> 18:27:11 2009
>>>>> @@ -10,29 +10,85 @@
>>>>> // License for the specific language governing permissions and  
>>>>> limitations under
>>>>> // the License.
>>>>>
>>>>> +
>>>>> couchTests.changes = function(debug) {
>>>>> var db = new CouchDB("test_suite_db");
>>>>> db.deleteDb();
>>>>> db.createDb();
>>>>> if (debug) debugger;
>>>>>
>>>>> -
>>>>> -  var req = CouchDB.newXhr();
>>>>> -
>>>>> -  req.open("GET", "/test_suite_db/_changes", false);
>>>>> -  req.send("");
>>>>> +  var req = CouchDB.request("GET", "/test_suite_db/_changes");
>>>>> var resp = JSON.parse(req.responseText);
>>>>>
>>>>> T(resp.results.length == 0 && resp.last_seq==0)
>>>>>
>>>>> -  var doc = {_id:"foo", bar:1};
>>>>> -  db.save(doc);
>>>>> +  var docFoo = {_id:"foo", bar:1};
>>>>> +  db.save(docFoo);
>>>>>
>>>>> -  req.open("GET", "/test_suite_db/_changes", false);
>>>>> -  req.send("");
>>>>> +  req = CouchDB.request("GET", "/test_suite_db/_changes");
>>>>> var resp = JSON.parse(req.responseText);
>>>>>
>>>>> T(resp.results.length == 1 && resp.last_seq==1)
>>>>> -  T(resp.results[0].changes[0].rev == doc._rev)
>>>>> +  T(resp.results[0].changes[0].rev == docFoo._rev)
>>>>> +
>>>>> +  var xhr;
>>>>> +
>>>>> +  try {
>>>>> +    xhr = CouchDB.newXhr();
>>>>> +  } catch (err) {
>>>>> +  }
>>>>> +
>>>>> +  if (xhr) {
>>>>> +    // Only test the continuous stuff if we have a real XHR  
>>>>> object
>>>>> +    // with real async support.
>>>>> +
>>>>> +    var sleep = function(msecs) {
>>>>> +      // by making a slow sync request, weallows the waiting  
>>>>> XHR request data
>>>>> +      // to be received.
>>>>> +      var req = CouchDB.request("GET", "/_sleep?time=" + msecs);
>>>>> +      T(JSON.parse(req.responseText).ok == true);
>>>>> +    }
>>>>> +
>>>>> +    var parse_changes_line = function(line) {
>>>>> +      if (line.charAt(line.length-1) == ",") {
>>>>> +        line = line.substring(0, line.length-1);
>>>>> +      }
>>>>> +      return JSON.parse(line);
>>>>> +    }
>>>>> +
>>>>> +    xhr.open("GET", "/test_suite_db/_changes?continuous=true",  
>>>>> true);
>>>>> +    xhr.send("");
>>>>> +
>>>>> +    var docBar = {_id:"bar", bar:1};
>>>>> +    db.save(docBar);
>>>>> +
>>>>> +    sleep(100);
>>>>> +    var lines = xhr.responseText.split("\n");
>>>>> +
>>>>> +    T(lines[0]='{"results":[');
>>>>> +
>>>>> +    var change = parse_changes_line(lines[1]);
>>>>> +
>>>>> +    T(change.seq == 1)
>>>>> +    T(change.id == "foo")
>>>>> +
>>>>> +    change = parse_changes_line(lines[2]);
>>>>> +
>>>>> +    T(change.seq == 2)
>>>>> +    T(change.id == "bar")
>>>>> +    T(change.changes[0].rev == docBar._rev)
>>>>> +
>>>>> +    var docBaz = {_id:"baz", baz:1};
>>>>> +    db.save(docBaz);
>>>>> +
>>>>> +    sleep(100);
>>>>> +    var lines = xhr.responseText.split("\n");
>>>>> +
>>>>> +    change = parse_changes_line(lines[3]);
>>>>> +
>>>>> +    T(change.seq == 3);
>>>>> +    T(change.id == "baz");
>>>>> +    T(change.changes[0].rev == docBaz._rev);
>>>>>
>>>>> +  }
>>>>> };
>>>>>
>>>>> Modified: couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl
>>>>> URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl?rev=774474&r1=774473&r2=774474&view=diff
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> ==================================================================
>>>>> --- couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl  
>>>>> (original)
>>>>> +++ couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl Wed  
>>>>> May 13 18:27:11 2009
>>>>> @@ -15,7 +15,7 @@
>>>>> -export([handle_welcome_req/2,handle_favicon_req/ 
>>>>> 2,handle_utils_dir_req/2,
>>>>> handle_all_dbs_req/1,handle_replicate_req/1,handle_restart_req/1,
>>>>> handle_uuids_req/1,handle_config_req/1,handle_log_req/1,
>>>>> -    handle_task_status_req/1]).
>>>>> +    handle_task_status_req/1,handle_sleep_req/1]).
>>>>>
>>>>> -export([increment_update_seq_req/2]).
>>>>>
>>>>> @@ -56,6 +56,12 @@
>>>>> handle_utils_dir_req(Req, _) ->
>>>>> send_method_not_allowed(Req, "GET,HEAD").
>>>>>
>>>>> +handle_sleep_req(#httpd{method='GET'}=Req) ->
>>>>> +    Time = list_to_integer(couch_httpd:qs_value(Req, "time")),
>>>>> +    receive snicklefart -> ok after Time -> ok end,
>>>>> +    send_json(Req, {[{ok, true}]});
>>>>> +handle_sleep_req(Req) ->
>>>>> +    send_method_not_allowed(Req, "GET,HEAD").
>>>>>
>>>>> handle_all_dbs_req(#httpd{method='GET'}=Req) ->
>>>>> {ok, DbNames} = couch_server:all_databases(),
>>>>>
>>>>> Modified: couchdb/trunk/src/couchdb/couch_query_servers.erl
>>>>> URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_query_servers.erl?rev=774474&r1=774473&r2=774474&view=diff
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> = 
>>>>> ==================================================================
>>>>> --- couchdb/trunk/src/couchdb/couch_query_servers.erl (original)
>>>>> +++ couchdb/trunk/src/couchdb/couch_query_servers.erl Wed May 13  
>>>>> 18:27:11 2009
>>>>> @@ -278,7 +278,7 @@
>>>>> [{Pid, Lang}] ->
>>>>>    case Status of
>>>>>    normal -> ok;
>>>>> -        _ -> ?LOG_DEBUG("Linked process died abnromally: ~p  
>>>>> (reason: ~p)", [Pid, Status])
>>>>> +        _ -> ?LOG_DEBUG("Linked process died abnormally: ~p  
>>>>> (reason: ~p)", [Pid, Status])
>>>>>    end,
>>>>>    {ok, {
>>>>>        Langs,
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>


Mime
View raw message