On Thu, Oct 14, 2010 at 7:01 PM, Brian Mitchell <[email protected]> wrote:
> couch_* seems a little repetitive. Why not core/, http/, etc?
>

I think its important to keep couch in the app directory name. This
will come into play if people pull in couchdb code into other
packages. For instance, I think it'd make things confusing when people
make packages like BigCouch.

>
>
> On Oct 14, 2010, at 18:52, Robert Dionne <[email protected]> wrote:
>
>> +1 also
>>
>> I think the convention is
>>
>> ./apps/couch_core/ebin
>> ./apps/couch_core/src
>> ./apps/couch_core/include
>> ./apps/couch_core/priv
>> ./apps/couch_http/ebin
>> ....
>>
>> rather than ./src/....
>>
>> I like the idea of still using the existing build, which is awesome, and 
>> have it feed into rebar so we can make use of reltools, etc, and templates 
>> for parameterizing the various .ini files
>>
>> doing it after the next release will be a good time to break everything
>>
>> On Oct 14, 2010, at 4:03 PM, Robert Newson wrote:
>>
>>> Paul,
>>>
>>> Brilliant writeup and proposal. I'd like to see all those things
>>> happen pretty much as you said. Cleaning the cycles out will be much
>>> easier once things are broken out in that style.
>>>
>>> +1
>>>
>>> B.
>>>
>>> On Thu, Oct 14, 2010 at 7:54 PM, Paul Davis <[email protected]> 
>>> wrote:
>>>> On Wed, Oct 13, 2010 at 5:23 PM, Benoit Chesneau <[email protected]> 
>>>> wrote:
>>>>> In an attempt to start some merging with cloudant I would like to
>>>>> start by using rebar in our install process.
>>>>>
>>>>> Like i see it, we could continue to use autotools to create the
>>>>> rebar.config files and other templates an then rebar for the final
>>>>> build and dependencies management. This changes as noticed by @davisp
>>>>> also imply we make our tree a little more OTP compliant. I would like
>>>>> to start this work asap.
>>>>>
>>>>> Thoughts ?
>>>>>
>>>>> - benoit
>>>>>
>>>>
>>>> So there's a couple issues at hand here which seem to be motivated by
>>>> the desire to start using tools like rebar.
>>>>
>>>> Our current source tree is not compliant with some of the basic
>>>> Erlang/OTP conventions. This is both bad technically and socially.
>>>> Technically, it prevents us from easily integrating tools like rebar
>>>> that would help advanced users with things like making Erlang reltools
>>>> packages. Socially, it doesn't reflect well on us to members of the
>>>> Erlang community that may have otherwise become contributors. All
>>>> languages have a standard package layout and Erlang is no different.
>>>>
>>>> The current CouchDB Erlang app has grown considerably. There's been
>>>> general consensus that we need to start splitting it up into smaller
>>>> applications that encompass specific functionality. There's been a bit
>>>> of effort in this direction, but its such a major change to source
>>>> file location it needs to have a community consensus to really start
>>>> working on seriously.
>>>>
>>>> I don't think we should focus directly on the issue of integrating
>>>> rebar. It should definitely be a goal, but not at the cost of our
>>>> current situation. Noah Slater has maintained an excellent build
>>>> system for us as is shown by the number of people building CouchDB
>>>> from source and the number of packages available. While I have argued
>>>> with him on numerous occasions about details, I have come to the
>>>> conclusion that it is not possible for him to be wrong. I personally
>>>> attribute this to the fact that he's most likely an advanced robot
>>>> from the future. That said, Noah has voiced concerns to various ideas
>>>> and we should make sure that any of his concerns are fully addressed.
>>>>
>>>> We should attempt to make sure that any tool support doesn't morph
>>>> into tool requirement. For instance, I think we should make sure that
>>>> its possible to keep compiling CouchDB without rebar and not come to
>>>> rely on it.
>>>>
>>>> While I'd be more than happy to start in on this and handle all of the
>>>> build system refactoring to make this happen, I'm not going to start
>>>> until there's a community consensus on what needs to be done. There
>>>> are a couple paths that I could see us taking to make this happen. We
>>>> could just make the current source tree be rebar compatible and figure
>>>> out the build system to do the optional rebar build or we could also
>>>> take this chance to split the source code into multiple applications.
>>>> Personally, I'd prefer to take this opportunity to organize the code
>>>> with multiple erlang apps.
>>>>
>>>> Too get the conversation rolling here's a first pass at a new app proposal:
>>>>
>>>> etap:
>>>>
>>>>   Nick Gerakines now releases etap as a single .erl file that can be
>>>> dropped into the test directory. This app should be removed in favor
>>>> of that method.
>>>>
>>>> erlang-oauth:
>>>>
>>>>   Should be renamed to just oauth. That erlang- prefix has bugged me
>>>> fore entirely too long.
>>>>
>>>> mochiweb, ibrowse, oauth:
>>>>
>>>>   Refactored to use standard src, include, ebin, priv directories to
>>>> be OTP compliant. This results in directories like
>>>>
>>>>       ./src/$APP/ebin
>>>>       ./src/$APP/incldue
>>>>       ./src/$APP/priv
>>>>       ./src/$APP/src
>>>>
>>>> couchdb:
>>>>
>>>>   Each proposed app will be structured as described above. Proposed apps:
>>>>
>>>>   couch_core: The core Erlang modules for storing docs and managing
>>>> "internal infrastructure"
>>>>   couch_view: The view engine as well as the holder for managing OS 
>>>> processes.
>>>>   couch_rep: couch_rep*.erl
>>>>   couch_externals: couch_external*.erl
>>>>   couch_httpd: couch_http*.erl
>>>>
>>>> At the bottom of this email I made an initial pass through the
>>>> ./src/couchdb tree to classify file by file into the described apps.
>>>> There are also some minor warts in this split. Things like the core
>>>> couchdb classes currently require calling into the couch_view app and
>>>> what not. Given the "interesting" call graph for CouchDb internals, I
>>>> think we should avoid addressing this and aim to minimize the actual
>>>> change to source file contents during this move. After modules have
>>>> been moved we can then start on teasing out the various cyclic
>>>> dependencies as necessary.
>>>>
>>>> Also, on a last note, seeing as this is a major change to the source
>>>> tree (and ideally 0 change to source code) it might be a good idea to
>>>> start this work just after we release 1.1.0.
>>>>
>>>>
>>>> What do you guys think?
>>>>
>>>> Paul Davis
>>>>
>>>>
>>>> List of files by per app:
>>>>
>>>> couch_core:
>>>>
>>>>   ./src/couchdb/couch.erl
>>>>   ./src/couchdb/couch_app.erl
>>>>   ./src/couchdb/couch_auth_cache.erl
>>>>   ./src/couchdb/couch_btree.erl
>>>>   ./src/couchdb/couch_changes.erl
>>>>   ./src/couchdb/couch_config.erl
>>>>   ./src/couchdb/couch_config_writer.erl
>>>>   ./src/couchdb/couch_db.erl
>>>>   ./src/couchdb/couch_db.hrl
>>>>   ./src/couchdb/couch_db_update_notifier.erl
>>>>   ./src/couchdb/couch_db_update_notifier_sup.erl
>>>>   ./src/couchdb/couch_db_updater.erl
>>>>   ./src/couchdb/couch_doc.erl
>>>>   ./src/couchdb/couch_event_sup.erl
>>>>   ./src/couchdb/couch_file.erl
>>>>   ./src/couchdb/couch_key_tree.erl
>>>>   ./src/couchdb/couch_log.erl
>>>>   ./src/couchdb/couch_ref_counter.erl
>>>>   ./src/couchdb/couch_server.erl
>>>>   ./src/couchdb/couch_server_sup.erl
>>>>   ./src/couchdb/couch_stats_aggregator.erl
>>>>   ./src/couchdb/couch_stats_collector.erl
>>>>   ./src/couchdb/couch_stream.erl
>>>>   ./src/couchdb/couch_task_status.erl
>>>>   ./src/couchdb/couch_util.erl
>>>>   ./src/couchdb/couch_uuids.erl
>>>>   ./src/couchdb/priv/icu_driver/couch_icu_driver.c
>>>>   ./src/couchdb/priv/stat_descriptions.cfg.in
>>>>
>>>> couch_view:
>>>>
>>>>   ./src/couchdb/couch_native_process.erl
>>>>   ./src/couchdb/couch_os_process.erl
>>>>   ./src/couchdb/couch_query_servers.erl
>>>>   ./src/couchdb/couch_view.erl
>>>>   ./src/couchdb/couch_view_compactor.erl
>>>>   ./src/couchdb/couch_view_group.erl
>>>>   ./src/couchdb/couch_view_updater.erl
>>>>   ./src/couchdb/couch_work_queue.erl
>>>>   ./src/couchdb/priv/couch_js/http.c
>>>>   ./src/couchdb/priv/couch_js/http.h
>>>>   ./src/couchdb/priv/couch_js/main.c
>>>>   ./src/couchdb/priv/couch_js/utf8.c
>>>>   ./src/couchdb/priv/couch_js/utf8.h
>>>>   ./src/couchdb/priv/spawnkillable/couchspawnkillable.sh
>>>>   ./src/couchdb/priv/spawnkillable/couchspawnkillable_win.c
>>>>
>>>> couch_rep:
>>>>
>>>>   ./src/couchdb/couch_js_functions.hrl
>>>>   ./src/couchdb/couch_rep.erl
>>>>   ./src/couchdb/couch_rep_att.erl
>>>>   ./src/couchdb/couch_rep_changes_feed.erl
>>>>   ./src/couchdb/couch_rep_db_listener.erl
>>>>   ./src/couchdb/couch_rep_httpc.erl
>>>>   ./src/couchdb/couch_rep_missing_revs.erl
>>>>   ./src/couchdb/couch_rep_reader.erl
>>>>   ./src/couchdb/couch_rep_sup.erl
>>>>   ./src/couchdb/couch_rep_writer.erl
>>>>
>>>> couch_externals:
>>>>
>>>>   ./src/couchdb/couch_external_manager.erl
>>>>   ./src/couchdb/couch_external_server.erl
>>>>
>>>> couch_httpd:
>>>>
>>>>   ./src/couchdb/couch_httpd.erl
>>>>   ./src/couchdb/couch_httpd_auth.erl
>>>>   ./src/couchdb/couch_httpd_db.erl
>>>>   ./src/couchdb/couch_httpd_external.erl
>>>>   ./src/couchdb/couch_httpd_misc_handlers.erl
>>>>   ./src/couchdb/couch_httpd_oauth.erl
>>>>   ./src/couchdb/couch_httpd_rewrite.erl
>>>>   ./src/couchdb/couch_httpd_show.erl
>>>>   ./src/couchdb/couch_httpd_stats_handlers.erl
>>>>   ./src/couchdb/couch_httpd_vhost.erl
>>>>   ./src/couchdb/couch_httpd_view.erl
>>>>
>>
>

Reply via email to