svn commit: r916240 - in /couchdb/branches/0.11.x: ./ etc/default/couchdb share/www/script/futon.js
Author: cmlenz Date: Thu Feb 25 10:48:38 2010 New Revision: 916240 URL: http://svn.apache.org/viewvc?rev=916240view=rev Log: Backport r915530 (Futon: Fix cookie storage for localhost.) Modified: couchdb/branches/0.11.x/ (props changed) couchdb/branches/0.11.x/etc/default/couchdb (props changed) couchdb/branches/0.11.x/share/www/script/futon.js Propchange: couchdb/branches/0.11.x/ -- --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Feb 25 10:48:38 2010 @@ -6,4 +6,4 @@ /couchdb/branches/list-iterator:782292-784593 /couchdb/branches/tail_header:775760-778477 /couchdb/tags/0.10.0:825400 -/couchdb/trunk:909247,910054,910696,910910-910911,911544,911559,911578,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529,915827,916076,916153 +/couchdb/trunk:909247,910054,910696,910910-910911,911544,911559,911578,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153 Propchange: couchdb/branches/0.11.x/etc/default/couchdb -- --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Feb 25 10:48:38 2010 @@ -6,5 +6,5 @@ /couchdb/branches/list-iterator/etc/default/couchdb:782292-784593 /couchdb/branches/tail_header/etc/default/couchdb:775760-778477 /couchdb/tags/0.10.0/etc/default/couchdb:825400 -/couchdb/trunk/etc/default/couchdb:909247,910054,910696,911544,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529,915827,916076,916153 +/couchdb/trunk/etc/default/couchdb:909247,910054,910696,911544,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153 /incubator/couchdb/trunk/etc/default/couchdb:642419-694440 Modified: couchdb/branches/0.11.x/share/www/script/futon.js URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/share/www/script/futon.js?rev=916240r1=916239r2=916240view=diff == --- couchdb/branches/0.11.x/share/www/script/futon.js (original) +++ couchdb/branches/0.11.x/share/www/script/futon.js Thu Feb 25 10:48:38 2010 @@ -337,13 +337,13 @@ var date = new Date(); date.setTime(date.getTime() + 14*24*60*60*1000); // two weeks document.cookie = cookiePrefix + name + = + escape(value) + -; domain= + location.hostname + ; expires= + date.toGMTString(); +; expires= + date.toGMTString(); }, del: function(name) { var date = new Date(); date.setTime(date.getTime() - 24*60*60*1000); // yesterday - document.cookie = cookiePrefix + name + =; domain= + -location.hostname + ; expires= + date.toGMTString(); + document.cookie = cookiePrefix + name + = + +; expires= + date.toGMTString(); } },
svn commit: r916518 - in /couchdb/trunk: share/www/script/test/ src/couchdb/ test/etap/
Author: jchris Date: Fri Feb 26 01:11:02 2010 New Revision: 916518 URL: http://svn.apache.org/viewvc?rev=916518view=rev Log: fdmananas patch for filtered replication via COUCHDB-673 Modified: couchdb/trunk/share/www/script/test/replication.js couchdb/trunk/src/couchdb/Makefile.am couchdb/trunk/src/couchdb/couch_db.hrl couchdb/trunk/src/couchdb/couch_httpd_db.erl couchdb/trunk/src/couchdb/couch_query_servers.erl couchdb/trunk/src/couchdb/couch_rep.erl couchdb/trunk/src/couchdb/couch_rep_changes_feed.erl couchdb/trunk/src/couchdb/couch_rep_missing_revs.erl couchdb/trunk/test/etap/111-replication-changes-feed.t Modified: couchdb/trunk/share/www/script/test/replication.js URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/replication.js?rev=916518r1=916517r2=916518view=diff == --- couchdb/trunk/share/www/script/test/replication.js (original) +++ couchdb/trunk/share/www/script/test/replication.js Fri Feb 26 01:11:02 2010 @@ -377,4 +377,81 @@ T(docFoo666 === null); } + // test filtered replication + + var sourceDb = new CouchDB( +test_suite_filtered_rep_db_a, {X-Couch-Full-Commit:false} + ); + + sourceDb.deleteDb(); + sourceDb.createDb(); + + T(sourceDb.save({_id:foo1,value:1}).ok); + T(sourceDb.save({_id:foo2,value:2}).ok); + T(sourceDb.save({_id:foo3,value:3}).ok); + T(sourceDb.save({_id:foo4,value:4}).ok); + T(sourceDb.save({ +_id: _design/mydesign, +language : javascript, +filters : { + myfilter : (function(doc, req) { +if (doc.value Number(req.query.maxvalue)) { + return true; +} else { + return false; +} + }).toString() +} + }).ok); + + var dbPairs = [ +{source:test_suite_filtered_rep_db_a, + target:test_suite_filtered_rep_db_b}, +{source:test_suite_filtered_rep_db_a, + target:http://; + host + /test_suite_filtered_rep_db_b}, +{source:http://; + host + /test_suite_filtered_rep_db_a, + target:test_suite_filtered_rep_db_b}, +{source:http://; + host + /test_suite_filtered_rep_db_a, + target:http://; + host + /test_suite_filtered_rep_db_b} + ]; + + for (var i = 0; i dbPairs.length; i++) { +var targetDb = new CouchDB(test_suite_filtered_rep_db_b); +targetDb.deleteDb(); +targetDb.createDb(); + +var dbA = dbPairs[i].source; +var dbB = dbPairs[i].target; + +var repResult = CouchDB.replicate(dbA, dbB, { + body: { +filter : mydesign/myfilter, +query_params : { + maxvalue: 3 +} + } +}); + +T(repResult.ok); +T($.isArray(repResult.history)); +T(repResult.history.length === 1); +T(repResult.history[0].docs_written === 2); +T(repResult.history[0].docs_read === 2); +T(repResult.history[0].doc_write_failures === 0); + +var docFoo1 = targetDb.open(foo1); +T(docFoo1 !== null); +T(docFoo1.value === 1); + +var docFoo2 = targetDb.open(foo2); +T(docFoo2 !== null); +T(docFoo2.value === 2); + +var docFoo3 = targetDb.open(foo3); +T(docFoo3 === null); + +var docFoo4 = targetDb.open(foo4); +T(docFoo4 === null); + } + }; Modified: couchdb/trunk/src/couchdb/Makefile.am URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/Makefile.am?rev=916518r1=916517r2=916518view=diff == --- couchdb/trunk/src/couchdb/Makefile.am (original) +++ couchdb/trunk/src/couchdb/Makefile.am Fri Feb 26 01:11:02 2010 @@ -30,6 +30,7 @@ couch.erl \ couch_app.erl \ couch_btree.erl \ +couch_changes.erl \ couch_config.erl \ couch_config_writer.erl \ couch_db.erl \ @@ -86,6 +87,7 @@ couch.beam \ couch_app.beam \ couch_btree.beam \ +couch_changes.beam \ couch_config.beam \ couch_config_writer.beam \ couch_db.beam \ Modified: couchdb/trunk/src/couchdb/couch_db.hrl URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_db.hrl?rev=916518r1=916517r2=916518view=diff == --- couchdb/trunk/src/couchdb/couch_db.hrl (original) +++ couchdb/trunk/src/couchdb/couch_db.hrl Fri Feb 26 01:11:02 2010 @@ -264,3 +264,15 @@ % small value used in revision trees to indicate the revision isn't stored -define(REV_MISSING, []). + +-record(changes_args, { +feed = normal, +dir = fwd, +since = 0, +limit = 1000, +style = main_only, +heartbeat, +timeout, +filter = , +include_docs = false +}). Modified: couchdb/trunk/src/couchdb/couch_httpd_db.erl URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_db.erl?rev=916518r1=916517r2=916518view=diff == --- couchdb/trunk/src/couchdb/couch_httpd_db.erl (original) +++
buildbot failure in ASF Buildbot on couchdb-coverage
The Buildbot has detected a new failure of couchdb-coverage on ASF Buildbot. Full details are available at: http://ci.apache.org/builders/couchdb-coverage/builds/205 Buildbot URL: http://ci.apache.org/ Buildslave for this Build: bb-vm_ubuntu Build Reason: Build Source Stamp: [branch couchdb/trunk] 916518 Blamelist: jchris BUILD FAILED: failed compile_2 sincerely, -The ASF Buildbot
svn commit: r916519 - in /couchdb/branches/0.11.x: ./ etc/default/ share/www/script/test/ src/couchdb/ test/etap/
Author: jchris Date: Fri Feb 26 01:12:48 2010 New Revision: 916519 URL: http://svn.apache.org/viewvc?rev=916519view=rev Log: backport fdmanana's patch from r916518 to 0.11.x Modified: couchdb/branches/0.11.x/ (props changed) couchdb/branches/0.11.x/etc/default/couchdb (props changed) couchdb/branches/0.11.x/share/www/script/test/replication.js couchdb/branches/0.11.x/src/couchdb/Makefile.am couchdb/branches/0.11.x/src/couchdb/couch_db.hrl couchdb/branches/0.11.x/src/couchdb/couch_httpd_db.erl couchdb/branches/0.11.x/src/couchdb/couch_query_servers.erl couchdb/branches/0.11.x/src/couchdb/couch_rep.erl couchdb/branches/0.11.x/src/couchdb/couch_rep_changes_feed.erl couchdb/branches/0.11.x/src/couchdb/couch_rep_missing_revs.erl couchdb/branches/0.11.x/test/etap/111-replication-changes-feed.t Propchange: couchdb/branches/0.11.x/ -- --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Feb 26 01:12:48 2010 @@ -6,4 +6,4 @@ /couchdb/branches/list-iterator:782292-784593 /couchdb/branches/tail_header:775760-778477 /couchdb/tags/0.10.0:825400 -/couchdb/trunk:909247,910054,910696,910910-910911,911544,911559,911578,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153 +/couchdb/trunk:909247,910054,910696,910910-910911,911544,911559,911578,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153,916518 Propchange: couchdb/branches/0.11.x/etc/default/couchdb -- --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Feb 26 01:12:48 2010 @@ -6,5 +6,5 @@ /couchdb/branches/list-iterator/etc/default/couchdb:782292-784593 /couchdb/branches/tail_header/etc/default/couchdb:775760-778477 /couchdb/tags/0.10.0/etc/default/couchdb:825400 -/couchdb/trunk/etc/default/couchdb:909247,910054,910696,911544,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153 +/couchdb/trunk/etc/default/couchdb:909247,910054,910696,911544,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153,916518 /incubator/couchdb/trunk/etc/default/couchdb:642419-694440 Modified: couchdb/branches/0.11.x/share/www/script/test/replication.js URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/share/www/script/test/replication.js?rev=916519r1=916518r2=916519view=diff == --- couchdb/branches/0.11.x/share/www/script/test/replication.js (original) +++ couchdb/branches/0.11.x/share/www/script/test/replication.js Fri Feb 26 01:12:48 2010 @@ -377,4 +377,81 @@ T(docFoo666 === null); } + // test filtered replication + + var sourceDb = new CouchDB( +test_suite_filtered_rep_db_a, {X-Couch-Full-Commit:false} + ); + + sourceDb.deleteDb(); + sourceDb.createDb(); + + T(sourceDb.save({_id:foo1,value:1}).ok); + T(sourceDb.save({_id:foo2,value:2}).ok); + T(sourceDb.save({_id:foo3,value:3}).ok); + T(sourceDb.save({_id:foo4,value:4}).ok); + T(sourceDb.save({ +_id: _design/mydesign, +language : javascript, +filters : { + myfilter : (function(doc, req) { +if (doc.value Number(req.query.maxvalue)) { + return true; +} else { + return false; +} + }).toString() +} + }).ok); + + var dbPairs = [ +{source:test_suite_filtered_rep_db_a, + target:test_suite_filtered_rep_db_b}, +{source:test_suite_filtered_rep_db_a, + target:http://; + host + /test_suite_filtered_rep_db_b}, +{source:http://; + host + /test_suite_filtered_rep_db_a, + target:test_suite_filtered_rep_db_b}, +{source:http://; + host + /test_suite_filtered_rep_db_a, + target:http://; + host + /test_suite_filtered_rep_db_b} + ]; + + for (var i = 0; i dbPairs.length; i++) { +var targetDb = new CouchDB(test_suite_filtered_rep_db_b); +targetDb.deleteDb(); +targetDb.createDb(); + +var dbA = dbPairs[i].source; +var dbB = dbPairs[i].target; + +var repResult = CouchDB.replicate(dbA, dbB, { + body: { +filter : mydesign/myfilter, +query_params : { + maxvalue: 3 +} + } +}); + +T(repResult.ok); +T($.isArray(repResult.history)); +T(repResult.history.length === 1); +T(repResult.history[0].docs_written === 2); +T(repResult.history[0].docs_read === 2); +T(repResult.history[0].doc_write_failures === 0); + +var docFoo1 = targetDb.open(foo1); +T(docFoo1 !== null); +T(docFoo1.value === 1); + +var docFoo2 = targetDb.open(foo2); +T(docFoo2 !== null); +T(docFoo2.value === 2); + +var docFoo3 = targetDb.open(foo3); +T(docFoo3 === null); + +var docFoo4 = targetDb.open(foo4); +T(docFoo4 === null); + } + }; Modified:
svn commit: r916521 - /couchdb/trunk/src/couchdb/couch_changes.erl
Author: jchris Date: Fri Feb 26 01:16:32 2010 New Revision: 916521 URL: http://svn.apache.org/viewvc?rev=916521view=rev Log: I will not forget to run git add, I will not forget to run git add Added: couchdb/trunk/src/couchdb/couch_changes.erl Added: couchdb/trunk/src/couchdb/couch_changes.erl URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_changes.erl?rev=916521view=auto == --- couchdb/trunk/src/couchdb/couch_changes.erl (added) +++ couchdb/trunk/src/couchdb/couch_changes.erl Fri Feb 26 01:16:32 2010 @@ -0,0 +1,257 @@ +% Licensed under the Apache License, Version 2.0 (the License); you may not +% use this file except in compliance with the License. You may obtain a copy of +% the License at +% +% http://www.apache.org/licenses/LICENSE-2.0 +% +% Unless required by applicable law or agreed to in writing, software +% distributed under the License is distributed on an AS IS BASIS, WITHOUT +% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +% License for the specific language governing permissions and limitations under +% the License. + +-module(couch_changes). +-include(couch_db.hrl). + +-export([handle_changes/3]). + +%% @type Req - #httpd{} | {json_req, JsonObj()} +handle_changes(#changes_args{}=Args1, Req, Db) - +Args = Args1#changes_args{filter=make_filter_fun(Args1, Req, Db)}, +StartSeq = case Args#changes_args.dir of +rev - +couch_db:get_update_seq(Db); +fwd - +Args#changes_args.since +end, +if Args#changes_args.feed == continuous orelse +Args#changes_args.feed == longpoll - +fun(Callback) - +start_sending_changes(Callback, Args#changes_args.feed), +Self = self(), +{ok, Notify} = couch_db_update_notifier:start_link( +fun({_, DbName}) when DbName == Db#db.name - +Self ! db_updated; +(_) - +ok +end +), +{Timeout, TimeoutFun} = get_changes_timeout(Args, Callback), +couch_stats_collector:track_process_count( +Self, +{httpd, clients_requesting_changes} +), +try +keep_sending_changes( +Args, +Callback, +Db, +StartSeq, +, +Timeout, +TimeoutFun +) +after +couch_db_update_notifier:stop(Notify), +get_rest_db_updated() % clean out any remaining update messages +end +end; +true - +fun(Callback) - +start_sending_changes(Callback, Args#changes_args.feed), +{ok, {_, LastSeq, _Prepend, _, _, _, _, _}} = +send_changes( +Args#changes_args{feed=normal}, +Callback, +Db, +StartSeq, + +), +end_sending_changes(Callback, LastSeq, Args#changes_args.feed) +end +end. + +%% @type Req - #httpd{} | {json_req, JsonObj()} +make_filter_fun(#changes_args{filter=FilterName}, Req, Db) - +case [list_to_binary(couch_httpd:unquote(Part)) +|| Part - string:tokens(FilterName, /)] of +[] - +fun(DocInfos) - +% doing this as a batch is more efficient for external filters +[{[{rev, couch_doc:rev_to_str(Rev)}]} || +#doc_info{revs=[#rev_info{rev=Rev}|_]} - DocInfos] +end; +[DName, FName] - +DesignId = _design/, DName/binary, +DDoc = couch_httpd_db:couch_doc_open(Db, DesignId, nil, []), +% validate that the ddoc has the filter fun +#doc{body={Props}} = DDoc, +couch_util:get_nested_json_value({Props}, [filters, FName]), +fun(DocInfos) - +Docs = [Doc || {ok, Doc} - [ +{ok, _Doc} = couch_db:open_doc(Db, DInfo, [deleted, conflicts]) +|| DInfo - DocInfos]], +{ok, Passes} = couch_query_servers:filter_docs( +Req, Db, DDoc, FName, Docs +), +[{[{rev, couch_doc:rev_to_str(Rev)}]} +|| #doc_info{revs=[#rev_info{rev=Rev}|_]} - DocInfos, +Pass - Passes, Pass == true] +end; +_Else - +throw({bad_request, +filter parameter must be of the form `designname/filtername`}) +end. + +get_changes_timeout(Args, Callback) - +#changes_args{ +heartbeat = Heartbeat, +timeout = Timeout, +feed = ResponseType +} = Args, +DefaultTimeout = list_to_integer( +couch_config:get(httpd, changes_timeout, 6) +), +case Heartbeat of +undefined - +case Timeout of +undefined - +{DefaultTimeout, fun() - stop end}; +
svn commit: r916522 - in /couchdb/branches/0.11.x: ./ etc/default/couchdb src/couchdb/couch_changes.erl
Author: jchris Date: Fri Feb 26 01:17:36 2010 New Revision: 916522 URL: http://svn.apache.org/viewvc?rev=916522view=rev Log: backport a forgetten file from the last backport. whoops Added: couchdb/branches/0.11.x/src/couchdb/couch_changes.erl - copied unchanged from r916521, couchdb/trunk/src/couchdb/couch_changes.erl Modified: couchdb/branches/0.11.x/ (props changed) couchdb/branches/0.11.x/etc/default/couchdb (props changed) Propchange: couchdb/branches/0.11.x/ -- --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Feb 26 01:17:36 2010 @@ -6,4 +6,4 @@ /couchdb/branches/list-iterator:782292-784593 /couchdb/branches/tail_header:775760-778477 /couchdb/tags/0.10.0:825400 -/couchdb/trunk:909247,910054,910696,910910-910911,911544,911559,911578,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153,916518 +/couchdb/trunk:909247,910054,910696,910910-910911,911544,911559,911578,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153,916518,916521 Propchange: couchdb/branches/0.11.x/etc/default/couchdb -- --- svn:mergeinfo (original) +++ svn:mergeinfo Fri Feb 26 01:17:36 2010 @@ -6,5 +6,5 @@ /couchdb/branches/list-iterator/etc/default/couchdb:782292-784593 /couchdb/branches/tail_header/etc/default/couchdb:775760-778477 /couchdb/tags/0.10.0/etc/default/couchdb:825400 -/couchdb/trunk/etc/default/couchdb:909247,910054,910696,911544,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153,916518 +/couchdb/trunk/etc/default/couchdb:909247,910054,910696,911544,911602,911717,911837,912474,912606,912608,912615,912636,915526,915529-915530,915827,916076,916153,916518,916521 /incubator/couchdb/trunk/etc/default/couchdb:642419-694440
buildbot success in ASF Buildbot on couchdb-coverage
The Buildbot has detected a restored build of couchdb-coverage on ASF Buildbot. Full details are available at: http://ci.apache.org/builders/couchdb-coverage/builds/206 Buildbot URL: http://ci.apache.org/ Buildslave for this Build: bb-vm_ubuntu Build Reason: Build Source Stamp: [branch couchdb/trunk] 916521 Blamelist: jchris Build succeeded! sincerely, -The ASF Buildbot
svn commit: r916527 - /couchdb/branches/0.11.x/etc/Makefile.am
Author: mhammond Date: Fri Feb 26 01:30:58 2010 New Revision: 916527 URL: http://svn.apache.org/viewvc?rev=916527view=rev Log: generate .sha file for windows binary; ensure md5/sha use rel paths Modified: couchdb/branches/0.11.x/etc/Makefile.am Modified: couchdb/branches/0.11.x/etc/Makefile.am URL: http://svn.apache.org/viewvc/couchdb/branches/0.11.x/etc/Makefile.am?rev=916527r1=916526r2=916527view=diff == --- couchdb/branches/0.11.x/etc/Makefile.am (original) +++ couchdb/branches/0.11.x/etc/Makefile.am Fri Feb 26 01:30:58 2010 @@ -28,7 +28,7 @@ EXTRA_DIST = $(init_sysconf_data) if WINDOWS -EXTRA_DIST += windows/setup-couch...@version@.exe.md5 +EXTRA_DIST += windows/setup-couch...@version@.exe.md5 windows/setup-couch...@version@.exe.sha endif CLEANFILES = $(init_DATA) $(default_sysconf_data) $(launchd_DATA) @@ -97,8 +97,10 @@ @echo Windows Installer is at: `cygpath -a -w windows/setup-couch...@version@.exe` windows/setup-couch...@version@.exe.md5: windows/setup-couch...@version@.exe - md5sum $ $@ - @echo Windows Installer is at: `cygpath -a -w windows/setup-couch...@version@.exe` + cd windows md5sum ./$(F) $(@F) + +windows/setup-couch...@version@.exe.sha: windows/setup-couch...@version@.exe + cd windows sha1sum ./$(F) $(@F) FORCE:
svn commit: r916528 - /couchdb/trunk/etc/Makefile.am
Author: mhammond Date: Fri Feb 26 01:32:21 2010 New Revision: 916528 URL: http://svn.apache.org/viewvc?rev=916528view=rev Log: generate .sha file for windows binary; ensure md5/sha use rel paths Modified: couchdb/trunk/etc/Makefile.am Modified: couchdb/trunk/etc/Makefile.am URL: http://svn.apache.org/viewvc/couchdb/trunk/etc/Makefile.am?rev=916528r1=916527r2=916528view=diff == --- couchdb/trunk/etc/Makefile.am (original) +++ couchdb/trunk/etc/Makefile.am Fri Feb 26 01:32:21 2010 @@ -28,7 +28,7 @@ EXTRA_DIST = $(init_sysconf_data) if WINDOWS -EXTRA_DIST += windows/setup-couch...@version@.exe.md5 +EXTRA_DIST += windows/setup-couch...@version@.exe.md5 windows/setup-couch...@version@.exe.sha endif CLEANFILES = $(init_DATA) $(default_sysconf_data) $(launchd_DATA) @@ -97,8 +97,10 @@ @echo Windows Installer is at: `cygpath -a -w windows/setup-couch...@version@.exe` windows/setup-couch...@version@.exe.md5: windows/setup-couch...@version@.exe - md5sum $ $@ - @echo Windows Installer is at: `cygpath -a -w windows/setup-couch...@version@.exe` + cd windows md5sum ./$(F) $(@F) + +windows/setup-couch...@version@.exe.sha: windows/setup-couch...@version@.exe + cd windows sha1sum ./$(F) $(@F) FORCE: