You are here: Foswiki>Tasks Web>Item13897 (30 Jun 2017, VadimBelman)Edit Attach

Item13897: Implement ImproveOOModel proposal.

pencil
Priority: Enhancement
Current State: Being Worked On
Released In: 3.0.0
Target Release: major
Applies To: Engine
Component:
Branches: Item13897 master Item14152 Item14203 Item14237
Reported By: VadimBelman
Waiting For: VadimBelman
Last Change By: VadimBelman

This task is for supporting branch with implementation of ImproveOOModel.

Major changes not yet reflected in any documentation

Foswiki::Macro role and macro objects.

Few macros are having a bad habit of storing their data on a session object. This way they pollute session namespace and have no control over the data during session shutdown. To overcome this deficiency Foswiki::Macro role has been introduced and a macro object handling mechanism implemented in Fosiki::_expandMacroOnTopicRendering() method. Upon loading of a macro module it's been checked against availability of new() class method. If it's available then macro's module name is been stored on the %macros hash instead of a coderef. The macro object is then created and stored on session's _macros attribute. The object is expected to do expand() method which is enforced by Fosiki::Macro role.

Foswiki::Macro role predefines session attribute which is weakened to avoid circular dependencies.

FORMFIELD is the first macro converted to make use of this technique thus making the session object free of _ffCache key which is now Foswiki::Macros::FORMFIELD attribute.

$Foswiki::PLUGINS::SESSION is weakened. Experimental.

This is done by the session constructor and nowhere else. So far tests are not affected by this change.

Notes for development

TODO

  • Organize exceptions into a meaningful tree.
  • Consider a generic Cache object which would not care about what kind of data is stored and only keeps refcount of add/remove requests and simply deletes an object when the count drops to 0.

To be considered/planned

Implement a Foswiki::Exception::Web

Should be a common ancestor to Oops, AccessControl. Containts web and topic attributes.

Resolve uncertainties over Error::Simple exceptions.

It is necessary to find out if Error::Simple is always interchangeable with Foswiki::Exception or there're some special cases to handle.

ConfigureQueryTests.pm

Three failing tests seemingly are not covered with expect_failure but still considered passed. The very same tests are failing on the master branch too. So, it's either intended behavior and I miss something or it's a bug.

Fn_LANGUAGES test

Doesn't do any testing with Foswiki::I18N::Fallback class.

Foswiki::Meta

save() method relies on rather unreliable method of preserving an exception object in a catch {} clause and rethrowing it later. The code between the catch {} and throw could be covered in a finally {} block including the throw itself.

Foswiki::Prefs

Consider a possibility of converting this class into a role and apply it to entity-family classes like Web, Topic, Plugin, etc.

Foswiki

  • Reimplement ImplementationClasses inheritance chain into a simple queue of instantiated objects. Something similar to Plugins.

  • Idea for a proposal: Consider unicode-enabled macro names.

Foswiki::UserMapping

Needs its own exception to replace the default Foswiki::Exception (formerly Error::Simple).

Foswiki::MetaCache and Foswiki::Meta

Seriously reconsider interaction of MetaCache and Meta objecs within Moo object destruction model. Now when a newly created Foswiki::Meta object goes out of its scope and gets destroyed it removes itself from MetaCache (methods sequence DEMOLISH -> finish -> unload -> Foswiki::MetaCache::removeMeta). For a web it means that all topics from this web are getting wiped out of the cache! Even though they're still needed somewhere (by search in particular).

I have workarounded this problem by adding inMetaCache attribute to the Foswiki::Meta class. The attribute is set and reset by Foswiki::MetaCache only (methods addMeta and removeMeta). It's been checked by Foswiki::Meta::unload to determine if removal from the cache should be initiated. But there must be better solution. For example, for each key in metacache there might be a counter of object loads which would be increased with each call to Foswiki::Meta::load and decreased as upon unload.

%Foswiki::cfg to OO

Replace %Foswiki::cfg with a OO implementation and instantiate it in Foswiki::Object. Advantages:

  • Future PSGI compatibility - DONE.
  • Better flexibility of tests – ease of config localization depending on current test needs - DONE.
  • Separate config implementation from usage allowing multiple config sources like DBI, JSON, etc...

Status: Partially done: all but the last item.

Foswiki::Config

Bootstrapping is better get use of engine's API instead of referring directly to the environment whenever possible. Almost done

Extract bootstrap code into a separate module to be loaded only when really needed.

CRITICAL BUGS/PROBLEMS

  • Foswiki::UI::Rest is using pathInfo attribute directly – insecure.
  • Foswiki::Request::Rest must not use it's SUPER class for parsing request because it may fetch web name from pathInfo which is totally incorrect.
  • Web interface failing with The method 'BUILDARGS' is not found in the inheritance hierarchy for class Foswiki::Exception::Engine Stack trace:
    The method 'BUILDARGS' is not found in the inheritance hierarchy for class Foswiki::Exception::Engine at /usr/share/perl5/Class/Method/Modifiers.pm line 46.
            Class::Method::Modifiers::install_modifier("Foswiki::Exception::Engine", "around", "BUILDARGS") called at /usr/share/perl5/Moo/_Utils.pm line 39
            Moo::_Utils::_install_modifier("Foswiki::Exception::Engine", "around", "BUILDARGS", CODE(0x16d1a48)) called at /usr/share/perl5/Moo.pm line 65
            Moo::around("BUILDARGS", CODE(0x16d1a48)) called at /var/www/foswiki/distro/core/lib/Foswiki/Exception.pm line 507
            require Foswiki/Exception.pm called at /var/www/foswiki/distro/core/lib/Foswiki/Object.pm line 25
            Foswiki::Object::BEGIN() called at /var/www/foswiki/distro/core/lib/Foswiki/Exception.pm line 0
    
    -
    FIXED by replacing use Foswiki::Exception in Foswiki::Object with require Foswiki::Exception.
  • LoginManaqer::complete() is called after the Config hash has been destroyed, fails with view: Use of uninitialized value in numeric gt (>) at /var/www/foswiki/distro/core/lib/Foswiki/LoginManager.pm line 761 during global destruction.
    FIXED by calling LoginManager complete() method in Foswiki::App DEMOLISH. Not sure if it's a good thing to do, would need to be reviewed.
  • See Security task Item14090. The userInitializationHandler is called after Loginmanager has established identity. This needs some architectural work.

-- VadimBelman - 15 Dec 2015

Comments

Excellent work.

-- MichaelDaum - 11 Jan 2016

Thanks Michael, but these are just basics. I'm more worried about future merges from master. So far they're conflict-less but that's won't last long. And still I'll be looking for a lot of help on reworking the internals.

-- VadimBelman - 11 Jan 2016

By me, Foswiki could have one common cache handler, let call it as Foswiki::Cache and (IMHO) it should be a subclass of the CPAN:CHI . CPAN:CHI is one very nice and fast caching system (best on the CPAN - by me), which could use various backends like: plain files, memory, memory mapped files, DBI, memcached, Redis etc... It even could be used (by using the CPAN:CHI::Memoize) as replacement for the CPAN:Memoize (which is extremely useful by itself and could be used to speed up some repeated method-calls). CHI has even built-in logging and much more.

Using CPAN:CHI we could move another subsystem into some (well tested and more powerful) CPAN module and lowering the our source-code maintenance needs.

BTW, logging - another subsystem, for which we could use more CPAN - e.g. by refactoring the Foswiki::Logger to have something like $logger = $foswiki->get_logger( ... ) and it based on configuration could return an logger for example: our inhouse logger(s) /aka, PlainFile or Compatibility/, but also CPAN:Log::Any based logger - and use them all (any) by an unified logging interface... (the CPAN:Log::Any could by using CPAN:Log::Any::Adapter use many other logging routines, like CPAN:Log::Dispatch or CPAN:Log::Log4perl)

Of course, all the above - as usually - is just an another view - for brainstorming... smile

-- JozefMojzis - 13 Feb 2016

We have LogDispatchContrib which was supposed to be part of Foswiki 2.0, but was dropped because of dependency issues and missing packages on some platforms.

-- GeorgeClark - 13 Feb 2016

The main idea is the get_logger method which should return the logger and this logger should use an unified logging interface... (e.g. the Log::Dispatch is only one of the more possibilities... - with other words, the Log::Any is one level "above" of the Log::Dispatch.) The CPAN:Log::Any doesn't have any required logger dependecies. (But The user could use any of many adapters). I could imagine an -==Log::Any::Adapter::Foswiki::Plainfile== module. smile

-- JozefMojzis - 13 Feb 2016

Jozef, we're talking about different kind of caches here, I'm afraid. MetaCache is about keeping pre-fetched objects in memory to spare on construction time which often involves slow disk operations.

Other caches are to be considered separately. Though I would presume that as soon as lifespan of most of Foswiki objects (not only in OO terms but in wide sense of this term) is limited to request processing use of different kind of caches is quite doubtful. But I don't have enough info yet to make well-grounded judgments.

-- VadimBelman - 13 Feb 2016

Vadim, CHI also could caching in the memory. (driver=>memory). With other words, "keeps prefetched data in the memory". So, it is perfectly usable to MetaCache (or if you want - caching any objects) and also for any other caches - but, with unified caching interface (which is alway good thing). And also could persisting the data - if need - using the serialised objects, with the same caching interface. Please read CPAN:CHI::Driver::Memory and CPAN:CHI::Driver::RawMemory. Implememting many different "pseudo-caches" (as object attribues) could seem be an good idea, but it isn't - the result is usually and overcomplicated mess - instead of having an simple unified interface for all caching needs. Also, implementing an sole caching role - you can bring (in-memory and any other) caching capabality to ANY object - using a simple with Foswiki::Cache . But - as i told - just an another view.

-- JozefMojzis - 14 Feb 2016

I will need to read the docs more thoroughly when have time. I've got an impression that it requires object serialization/deserialization what makes its use overcomplicated. But perhaps I'm wrong.

-- VadimBelman - 14 Feb 2016

Everybody has his own view to the solutions. That's ok and it is a base of any brainstorming. This was just one "another idea"... smile Use it or not - doesn't matter - the decision is on you - because you're the developer. wink

-- JozefMojzis - 14 Feb 2016

Regarding Meta and MetaCache, there are several other proposals that may be worth reviewing regarding design of these. There are a lot of other discussions here and there about the Meta design beyond the above. I'm not suggesting that any of these get wrapped into your work, but they may explain better some of the thinking behind what's currently implemented and what others see as areas for improvement.

-- GeorgeClark - 14 Feb 2016
 

ItemTemplate edit

Summary Implement ImproveOOModel proposal.
ReportedBy VadimBelman
Codebase
SVN Range
AppliesTo Engine
Component
Priority Enhancement
CurrentState Being Worked On
WaitingFor VadimBelman
Checkins distro:61f8697ff3dc distro:d81582ba7d0f distro:87cd58885911 distro:696e71faa2c0 distro:bcec3f03d8f9 distro:cd395e0a5d57 distro:711b69fbd980 distro:ebcaff110ce0 distro:bb5fbe1b932f distro:e6ccabaad024 distro:2e4489ef0466 distro:36ab9512ae8b distro:e094e02bf606 distro:6166c33a3839 distro:9a3dac3ec33b distro:4e2c72874eeb distro:8dd7e422259f distro:35365e3b06ef distro:90965a8f33f9 distro:7d66fb5f46e6 distro:44a6257e2894 distro:d4974a318f9c distro:2897df2d277c distro:f7b7053f782c distro:cd9a15eaf15a distro:0f8803f650e5 distro:0d7c7eaeec17 distro:ab11afb87c6c distro:0bb52bd46143 distro:b86b5503684e distro:be0e7c16ae95 distro:901a48ce0923 distro:6c5d460ec0a6 distro:68a426419051 distro:63ebdfa2a8ba distro:613f64d14112 distro:6af4d5c365d1 distro:6dcd00a3aa15 distro:98d3d9f63c09 distro:e3f7e7ec84eb distro:14b92543f497 distro:1b7ae1d20a48 distro:9a02e79a4d1b distro:54fddfbc1e1d distro:e38b588b1565 distro:1cf40687c68d distro:2b3bf6579b7a distro:73cc52f0fafe distro:f7b3e6b14ef0 distro:725524846238 distro:b1caeaca851f distro:b5d4db580b11 distro:8c02395f56df distro:250991f65f19 distro:dae8e37ad14d distro:4976d5984d91 distro:6c23e5e15f03 distro:610a26498d27 distro:be425e93734c distro:a5c6cc82d3a0 distro:3736ccf3a121 distro:fd9900db4309 distro:6028ade50190 distro:cca8703a2f93 distro:74b0669db142 distro:aa07ddce2bac distro:8f9eb1d96c56 distro:c52ebb2b8a0a distro:47a977586c52 distro:2a64d3196678 distro:50c138219d49 distro:4c3f125b2395 distro:a75b8b830fd7 distro:cb4a63d0887b distro:4551def4aabd distro:bbfbbf03059d distro:1b1eab53c4f3 distro:3ebf44b05fac distro:6b0ee4286999 distro:1d1854400154 distro:319b9f12d9c1 distro:11a5c62100f9 distro:fac2dbeca5f5 distro:352bc985bbf9 distro:353f23dcfc04 distro:be55502bdb8b distro:4deb63dd015a distro:5f383d3f9550 distro:7b4fbd4c5344 distro:03b87ac3f272 distro:29b087434539 distro:c8a6fae89aa6 distro:05fc0050c224 distro:cf86898415bc distro:4c523cbe59f2 distro:5225f6c81a73 distro:ad1bedc7a558 distro:a6c1ab8c6853 distro:b2278298e587 distro:73f92abed3ad distro:7d3ef0bf30eb distro:aa29949e3482 distro:16ef3251ea52 distro:ff0a2f4bf45b distro:cb0c591a1416 distro:69fe7157b833 distro:a6db13d739a6 distro:11a27f86e865 distro:3b55f9ca7f87 distro:faa9592eeeda distro:60e14b1f6a4d distro:8d82ef16797b distro:d1e0cad14d59 distro:7f4cf4de9afe distro:4ac91aa4b691 distro:ab6036444647 distro:2d96be24bd17 distro:b613253f0933 distro:2cc6e72ebbe6 distro:13b037ce5bef distro:638145697eef distro:6f876959cfd8 distro:6603b85f3341 distro:aff6e759a7b0 distro:2b56d1a60d67 distro:000aece05ecf distro:0a8defa2750b distro:cdbd23a15c3d distro:3bc94ec53355 distro:2c6d1ac58cbe distro:76d5836409e6 distro:fdf6de10d0a5 distro:a1577446df9e distro:f2793beacbb7 distro:9a734a272b01 distro:685db8d096a7 distro:5cc983825b17 distro:d1674bad6d34 distro:45c4131fee43 distro:9163df45b4ff distro:741f73cb4899 distro:5ef4f45bc66c distro:6fd129f2ba15 distro:9329820ace53 distro:06435e6b71c6 distro:a33e0ff95e21 distro:e9fecba12515 distro:0753fd2d07d3 distro:f9504fd59fc0 distro:cfb5a2716a2d distro:5fcac8515555 distro:2905c8483650 distro:6b8472da8ef2 distro:4a9953bf746f distro:1e1712f9b4b5 distro:883e7cb2ae20 distro:3f9dcc1daac3 distro:4eef383f3c03 distro:55bb1bdea0d7 distro:493732d8f259 distro:2d8970c468a8 distro:8e054779ecd5 distro:f4d4dbc42bf5 distro:56cf018df162 distro:65af9d9029b0 distro:d5fa68831663 distro:d48bdb3e52f1 distro:23a12a56c745 distro:3e701d4fe490 distro:8151e0d20de5 distro:82bcacf2285a distro:04265160dc8c distro:bf1f07a46d32 distro:24826b5cdd1a distro:a517114a8d0f distro:fbf6a84b1393 distro:29fb139746e7 distro:706e34c60107 distro:6eefe9805106 distro:ff3d6d5dfd1e distro:180b4955cffa distro:777c33451ff6 distro:9c9c49b32c4a distro:4aafe0854794 distro:f798fe266f44 distro:213d909f1639 distro:2e93bc1a3db9 distro:05f7777b252a distro:fd070b692aed distro:95e8a9577649 distro:2c1cef504d8a distro:76d259797d33 distro:e1cc0e19bf48 distro:76007f035e21 distro:16ebecaf5fbb distro:6dd4c917c5cd distro:5a6253057192 distro:9ea06bb970fa distro:c77e8e402f05 distro:e3423f4a87b1 distro:c442117a368c distro:9cbca2f03b90 distro:dd0cf5de7d45 distro:a3f81ed25d9c distro:f62f4a53c1f6 distro:b99177d118b9 distro:476ee6369f02 distro:cddb9d75e6c3 distro:06c6883883a5 distro:0636277a6868 distro:f4ea0f9286fd distro:5346abead384 distro:497c5bc4e151 distro:05ba030cbd07 distro:16ad2a5b7b84 distro:76cd640e3f66 distro:ae0a1b60e2bb distro:7af0924a8f9b distro:006964710049 distro:f023a40bc3c3 distro:5e2e07cecf10 distro:f67d1772cc7d distro:c6dc8aed3954 distro:2ecbed8ac20c distro:43b778ca51f5 distro:260a67ee7f5d distro:dbdb98a5384e distro:0cb9233aac01 distro:a1d2d13b062c distro:7851f88a6ba0 distro:a6d5c5da009d distro:f0d4247e045b distro:8623246d57a7 distro:31ed244376a7 distro:741239d20ea0 distro:53a8e927837e distro:8daa1729c1e4 distro:cfb0a448fb8f distro:6bab37a3f953 distro:e0c160aa371d distro:dd9b500dddfd distro:99294e8f73d5 distro:1c1672f91ac4 distro:616ad79b4af4 distro:9817646f8c63 distro:9bdfe545ed62 distro:e284891ddf76 distro:c8884849de4c distro:ceff4cf294e5 distro:aec4010bc456 distro:eb65efc9f0ac distro:ed0744222c35 distro:5c01e2fa4c3d distro:6dccd6952e51 distro:128af377dc5e distro:334de392750e distro:3e0a4285f9ab distro:94d21b3b857f distro:a652224e05f3 distro:0dcf5d6b521a distro:704c0f0bc13d distro:7f153adfb86e distro:4999580bb29c distro:d85280c914f5 distro:7d6d754d5484 distro:2d242cf615d7 distro:6efeda280e01 distro:68d1d55462b6 distro:4cd6272b5755 distro:df1fdae4b4dc distro:9af3ece7dc3c
TargetRelease major
ReleasedIn 3.0.0
CheckinsOnBranches Item13897 master Item14152 Item14203 Item14237
trunkCheckins
masterCheckins distro:36ab9512ae8b distro:9a3dac3ec33b distro:4e2c72874eeb
ItemBranchCheckins distro:61f8697ff3dc distro:d81582ba7d0f distro:87cd58885911 distro:696e71faa2c0 distro:bcec3f03d8f9 distro:cd395e0a5d57 distro:711b69fbd980 distro:ebcaff110ce0 distro:bb5fbe1b932f distro:e6ccabaad024 distro:2e4489ef0466 distro:e094e02bf606 distro:6166c33a3839 distro:36ab9512ae8b distro:9a3dac3ec33b distro:4e2c72874eeb distro:8dd7e422259f distro:35365e3b06ef distro:90965a8f33f9 distro:7d66fb5f46e6 distro:44a6257e2894 distro:d4974a318f9c distro:2897df2d277c distro:f7b7053f782c distro:cd9a15eaf15a distro:0f8803f650e5 distro:0d7c7eaeec17 distro:ab11afb87c6c distro:0bb52bd46143 distro:b86b5503684e distro:be0e7c16ae95 distro:901a48ce0923 distro:6c5d460ec0a6 distro:68a426419051 distro:63ebdfa2a8ba distro:613f64d14112 distro:6af4d5c365d1 distro:6dcd00a3aa15 distro:98d3d9f63c09 distro:e3f7e7ec84eb distro:14b92543f497 distro:1b7ae1d20a48 distro:9a02e79a4d1b distro:54fddfbc1e1d distro:e38b588b1565 distro:1cf40687c68d distro:2b3bf6579b7a distro:73cc52f0fafe distro:f7b3e6b14ef0 distro:725524846238 distro:b1caeaca851f distro:b5d4db580b11 distro:8c02395f56df distro:250991f65f19 distro:dae8e37ad14d distro:4976d5984d91 distro:6c23e5e15f03 distro:610a26498d27 distro:be425e93734c distro:a5c6cc82d3a0 distro:3736ccf3a121 distro:fd9900db4309 distro:6028ade50190 distro:cca8703a2f93 distro:74b0669db142 distro:aa07ddce2bac distro:8f9eb1d96c56 distro:c52ebb2b8a0a distro:47a977586c52 distro:2a64d3196678 distro:50c138219d49 distro:4c3f125b2395 distro:a75b8b830fd7 distro:cb4a63d0887b distro:4551def4aabd distro:bbfbbf03059d distro:1b1eab53c4f3 distro:3ebf44b05fac distro:6b0ee4286999 distro:1d1854400154 distro:319b9f12d9c1 distro:11a5c62100f9 distro:fac2dbeca5f5 distro:352bc985bbf9 distro:353f23dcfc04 distro:be55502bdb8b distro:4deb63dd015a distro:5f383d3f9550 distro:7b4fbd4c5344 distro:03b87ac3f272 distro:29b087434539 distro:c8a6fae89aa6 distro:05fc0050c224 distro:cf86898415bc distro:4c523cbe59f2 distro:5225f6c81a73 distro:ad1bedc7a558 distro:a6c1ab8c6853 distro:b2278298e587 distro:73f92abed3ad distro:7d3ef0bf30eb distro:aa29949e3482 distro:16ef3251ea52 distro:ff0a2f4bf45b distro:cb0c591a1416 distro:69fe7157b833 distro:a6db13d739a6 distro:11a27f86e865 distro:3b55f9ca7f87 distro:faa9592eeeda distro:60e14b1f6a4d distro:8d82ef16797b distro:d1e0cad14d59 distro:7f4cf4de9afe distro:4ac91aa4b691 distro:ab6036444647 distro:2d96be24bd17 distro:b613253f0933 distro:2cc6e72ebbe6 distro:13b037ce5bef distro:638145697eef distro:6f876959cfd8 distro:6603b85f3341 distro:aff6e759a7b0 distro:2b56d1a60d67 distro:000aece05ecf distro:0a8defa2750b distro:cdbd23a15c3d distro:3bc94ec53355 distro:2c6d1ac58cbe distro:76d5836409e6 distro:fdf6de10d0a5 distro:a1577446df9e distro:f2793beacbb7 distro:9a734a272b01 distro:685db8d096a7 distro:5cc983825b17 distro:d1674bad6d34 distro:45c4131fee43 distro:9163df45b4ff distro:741f73cb4899 distro:5ef4f45bc66c distro:6fd129f2ba15 distro:9329820ace53 distro:06435e6b71c6 distro:a33e0ff95e21 distro:e9fecba12515 distro:0753fd2d07d3 distro:f9504fd59fc0 distro:cfb5a2716a2d distro:5fcac8515555 distro:2905c8483650 distro:6b8472da8ef2 distro:4a9953bf746f distro:1e1712f9b4b5 distro:883e7cb2ae20 distro:3f9dcc1daac3 distro:4eef383f3c03 distro:55bb1bdea0d7 distro:493732d8f259 distro:2d8970c468a8 distro:8e054779ecd5 distro:f4d4dbc42bf5 distro:56cf018df162 distro:65af9d9029b0 distro:d5fa68831663 distro:d48bdb3e52f1 distro:23a12a56c745 distro:3e701d4fe490 distro:8151e0d20de5 distro:82bcacf2285a distro:04265160dc8c distro:bf1f07a46d32 distro:24826b5cdd1a distro:a517114a8d0f distro:fbf6a84b1393 distro:29fb139746e7 distro:706e34c60107 distro:6eefe9805106 distro:ff3d6d5dfd1e distro:180b4955cffa distro:777c33451ff6 distro:9c9c49b32c4a distro:4aafe0854794 distro:f798fe266f44 distro:213d909f1639 distro:2e93bc1a3db9 distro:05f7777b252a distro:fd070b692aed distro:95e8a9577649 distro:2c1cef504d8a distro:76d259797d33 distro:e1cc0e19bf48 distro:76007f035e21 distro:16ebecaf5fbb distro:6dd4c917c5cd distro:5a6253057192 distro:9ea06bb970fa distro:c77e8e402f05 distro:e3423f4a87b1 distro:c442117a368c distro:9cbca2f03b90 distro:dd0cf5de7d45 distro:a3f81ed25d9c distro:f62f4a53c1f6 distro:b99177d118b9 distro:476ee6369f02 distro:cddb9d75e6c3 distro:06c6883883a5 distro:0636277a6868 distro:f4ea0f9286fd distro:5346abead384 distro:497c5bc4e151 distro:05ba030cbd07 distro:16ad2a5b7b84 distro:76cd640e3f66 distro:ae0a1b60e2bb distro:7af0924a8f9b distro:006964710049 distro:f023a40bc3c3 distro:5e2e07cecf10 distro:f67d1772cc7d distro:c6dc8aed3954 distro:2ecbed8ac20c distro:43b778ca51f5 distro:260a67ee7f5d distro:dbdb98a5384e distro:0cb9233aac01 distro:a1d2d13b062c distro:7851f88a6ba0 distro:a6d5c5da009d distro:f0d4247e045b distro:8623246d57a7 distro:31ed244376a7 distro:741239d20ea0 distro:53a8e927837e distro:8daa1729c1e4 distro:cfb0a448fb8f distro:6bab37a3f953 distro:e0c160aa371d distro:dd9b500dddfd distro:99294e8f73d5 distro:1c1672f91ac4 distro:616ad79b4af4 distro:9817646f8c63 distro:9bdfe545ed62 distro:e284891ddf76 distro:c8884849de4c distro:ceff4cf294e5 distro:aec4010bc456 distro:eb65efc9f0ac distro:ed0744222c35 distro:5c01e2fa4c3d distro:6dccd6952e51 distro:128af377dc5e distro:334de392750e distro:3e0a4285f9ab distro:94d21b3b857f distro:a652224e05f3 distro:0dcf5d6b521a distro:704c0f0bc13d distro:7f153adfb86e distro:4999580bb29c distro:d85280c914f5 distro:7d6d754d5484 distro:2d242cf615d7 distro:6efeda280e01 distro:68d1d55462b6 distro:4cd6272b5755 distro:df1fdae4b4dc distro:9af3ece7dc3c
Release02x01Checkins
Release02x00Checkins
Release01x01Checkins
Topic revision: r221 - 30 Jun 2017, VadimBelman
The copyright of the content on this website is held by the contributing authors, except where stated elsewhere. See Copyright Statement. Creative Commons License    Legal Imprint    Privacy Policy