Compare commits

...

139 Commits

Author SHA1 Message Date
Sebastien Ros
8be940fe8d Reviving the SQLite 2015-09-04 17:44:54 -07:00
Sebastien Ros
4491ab8467 Fixing WorkContext resolution
c.f. https://github.com/OrchardCMS/Orchard/pull/5723#issuecomment-137846843
2015-09-04 16:31:09 -07:00
Sebastien Ros
3f5c6e49ef Revert "Fixing ShapeDesigner"
This reverts commit 6eb32a93df.
2015-09-04 16:20:02 -07:00
Sebastien Ros
a1d06ec89e Adding missing changes to specflow web.config 2015-09-04 15:58:10 -07:00
Sebastien Ros
ee149191b9 Formatting web.config 2015-09-04 15:53:39 -07:00
Sebastien Ros
3f8e063d9c Fixing OrchardHost unit tests 2015-09-04 15:53:11 -07:00
Sebastien Ros
cb25be4444 More Json.NET binding redirections 2015-09-04 14:47:51 -07:00
Sebastien Ros
428b44a900 Merge branch '1.9.x' into dev
Conflicts:
	src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs
	src/Orchard.Web/Modules/Orchard.Autoroute/Migrations.cs
	src/Orchard.Web/Modules/Orchard.Search/Drivers/AdminSearchSettingsPartDriver.cs
	src/Orchard/Environment/DefaultOrchardShell.cs
	src/Orchard/Mvc/HttpContextAccessor.cs
	src/Orchard/Orchard.Framework.csproj
	src/Orchard/Tasks/BackgroundService.cs
2015-09-04 13:15:43 -07:00
Sebastien Ros
c2194381f8 Removing unused usings 2015-09-04 12:12:13 -07:00
Sebastien Ros
c860b89e23 Removed erroneous HttpContextBase registrations 2015-09-04 12:12:02 -07:00
Sebastien Ros
04f29ba70c Revert "Cherry picked ce630f980c7a79ae17b36598f3834c4ffd523739."
This reverts commit aba53e122d.

Conflicts:
	src/Orchard.Web/Modules/Orchard.Layouts/Handlers/LayoutPartHandler.cs
	src/Orchard/Mvc/HttpContextAccessor.cs
	src/Orchard/Mvc/IHttpContextAccessor.cs
	src/Orchard/Mvc/MvcModule.cs
	src/Orchard/Orchard.Framework.csproj
	src/Orchard/Tasks/BackgroundService.cs
2015-09-04 10:59:31 -07:00
Sébastien Ros
e118695ea7 Merge pull request #5738 from harmony7/4852-orchardshellevents-workcontext
#4852: Wrap IOrchardShellEvents in a work context
2015-09-04 10:09:36 -07:00
Sebastien Ros
1c3e253edb Remove broken tests 2015-09-03 15:37:27 -07:00
Sébastien Ros
65c3b2ab2e Merge pull request #5734 from OrchardCMS/feature/morelocking
Refactoring locking strategy
2015-09-03 15:05:42 -07:00
Sebastien Ros
9ea87837c3 Refactoring locking strategy
Adding support for tenants
Removed ThreadId field
Removed Count field
Optimized db access by using Monitor for the local machine/tenant checks
Removed Machine/Thread scopes
2015-09-03 15:03:42 -07:00
Sébastien Ros
f3d08d61c4 Merge pull request #5741 from mvarblow/patch-2
Mark the npm repository as private
2015-09-03 14:24:05 -07:00
Sébastien Ros
22697edeec Merge pull request #5742 from mvarblow/patch-3
Suppressed warning CS0436 in Orchard.Framework
2015-09-03 14:23:26 -07:00
mvarblow
e0fc576f9e Suppressed warning CS0436 in Orchard.Framework
Daniel changed the Orchaard.Framework project to ignore the JetBrains.Annotations conflicts for debug builds several months back. See http://orchard.codeplex.com/workitem/21056 and 78901ba . However, the problem still exists for release builds. This pull request applies the same fix (ignoring the warning) to release builds.
2015-09-03 16:07:06 -04:00
mvarblow
ef9e5de8f4 Mark the npm repository as private
'npm install' was generating several warnings about missing properties in package.json. Marking the repository as private clears up the warnings.
2015-09-03 16:03:39 -04:00
harmony7@pex2.jp
5878611817 Wrap IOrchardShellEvents in a work context. 2015-09-03 22:19:21 +09:00
Sipke Schoorstra
e02bf2dacb Merge pull request #5680 from OrchardCMS/feature/initializing-tenant
Implemented Initializing status.
2015-09-03 13:15:42 +02:00
Sipke Schoorstra
d0ad5de25c Rebuilt assets with Gulp. 2015-09-02 17:29:36 +01:00
Sipke Schoorstra
902021c686 Fixed default dashboard layout data string. 2015-09-02 14:40:15 +01:00
Sipke Schoorstra
ce15e438ca Getting rid of a compiler warning regarding deprecated ExportOptions type. 2015-09-02 14:10:41 +01:00
Sipke Schoorstra
748a354632 Merge pull request #5628 from OrchardCMS/feature/distributed-locking
Feature/distributed locking
2015-09-02 12:49:38 +02:00
Sipke Schoorstra
db03498cfa Deletes lock records when Count reaches 0.
Also some minor polishing and changed ObjectDisposedException to OrchardException in case a lock was already released.
2015-09-02 11:43:12 +01:00
Sipke Schoorstra
553a0e260a Merge branch 'dev' into feature/distributed-locking
Conflicts:
	src/Orchard/Orchard.Framework.csproj
2015-09-02 10:20:57 +01:00
Sipke Schoorstra
e9799d5537 Fixed a potential "ValueFactory attempted to access the Value property of this instance" issue.
The underlying cause of such an error is a recursive call issue, where some code in a background task accesses the current http context (which is a stand in), while its construction also (indirectly) accesses the http context in order to get the site content item and query the configured BaseUrl. In theory we could access this information straight from the database without loading the Site content item, but since the URL value doesn't really matter it is better to keep it simple.
2015-09-01 15:05:28 +01:00
Lombiq
fcc4a944bb Fixing that Projection Elements with the Default Layout selected weren't exported 2015-08-30 22:29:12 +02:00
Sebastien Ros
a0d61c67b8 Refactoring Import methods 2015-08-28 17:06:34 -07:00
Sébastien Ros
638c05b5ff Merge pull request #5720 from jtkech/patch-4
#5715: Feature key checking in CompositionStrategy
2015-08-28 15:42:45 -07:00
jtkech
46de0273d5 Update CompositionStrategy.cs 2015-08-29 00:27:09 +02:00
Lombiq
42ff708da8 #5664: Lucene should page operations with the highest possible page size 2015-08-28 23:38:30 +02:00
Sipke Schoorstra
735ab882b2 Removed unnecessary feature from setup context. 2015-08-28 12:25:35 +01:00
Sebastien Ros
b52a846c5f #5664: Lucene should page operations
Fixes #5664
2015-08-27 15:31:39 -07:00
Sébastien Ros
9a8b64393e Merge pull request #5671 from RoyalVeterinaryCollege/4352
#4352: orphaned awaitingactivities

Fixes #4352
2015-08-27 12:39:24 -07:00
Sébastien Ros
035ad949a8 Merge pull request #5687 from planetClaire/5686
Fix user defined outcome connections in Branching activities
2015-08-27 12:08:02 -07:00
Sebastien Ros
6eb32a93df Fixing ShapeDesigner
Fixes #5647
2015-08-27 11:30:52 -07:00
Sebastien Ros
becc4abf23 Fixing Visual Studio warnings on web.config files 2015-08-27 11:11:10 -07:00
Sebastien Ros
2750b04173 Fixing feature name case 2015-08-27 11:10:35 -07:00
Sebastien Ros
935d07bb1b Fixing duplicate overload 2015-08-27 11:09:56 -07:00
Sebastien Ros
3729bac266 Removing unnecessary usings 2015-08-27 11:09:40 -07:00
Sebastien Ros
4a2d3aeb7c Merge branch '1.9.x' into dev
Conflicts:
	src/Orchard.Web/Modules/Orchard.ImportExport/Orchard.ImportExport.csproj
	src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/DataRecipeHandler.cs
	src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs
	src/Orchard.Web/Modules/Orchard.Themes/Drivers/DisableThemePartDriver.cs
	src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj
2015-08-27 10:45:16 -07:00
Sebastien Ros
6abb7d5459 Revert "Fixed broken setup due to auto-enabling features."
This reverts commit 8f2bd16fed.
2015-08-27 10:42:51 -07:00
Sebastien Ros
6d8460ad9c Removing Core dependency from jQuery
The auto-enable feature code would load it and replace
the SafeModeSiteService by its implementation.
2015-08-27 10:41:43 -07:00
Sipke Schoorstra
8f2bd16fed Fixed broken setup due to auto-enabling features.
This change will only auto-enable features for already running shells.
2015-08-27 14:32:43 +01:00
Jeff
bd1f14eeb0 Fix Issue #4352: Added prompt on workflow save to give choice of stopping running workflows. 2015-08-27 10:59:50 +01:00
Sebastien Ros
4b59569013 #5490 Fixing HttpRequestBase DependenciesShouldBeUpgradedFirst
Fixes #5490
2015-08-26 17:19:04 -07:00
Sébastien Ros
a603c7e07a Merge pull request #5678 from jchenga/issues/5618
#5618 taxonomy in autoroute needs to be saved twice

Fixes #5618
2015-08-26 16:48:13 -07:00
Sebastien Ros
96f6cb36fd Reverting session factory changes 2015-08-26 16:40:02 -07:00
Sébastien Ros
3d63c6d333 Merge pull request #5544 from yw80/patch-2
Remove the blank line at the bottom of every page after the default theme rendering.
2015-08-26 16:11:35 -07:00
Sébastien Ros
4cdb081c9d Merge pull request #5543 from yw80/patch-1
Correct CSS class name of MediaLibraryPickerField field
2015-08-26 16:05:16 -07:00
Sébastien Ros
9ed6b4261d Merge pull request #5542 from jtkech/patch-2
##5369: Allows simple properties null checking on a dynamic ContentItem or ContentPart

Fixes #5369
2015-08-26 16:04:09 -07:00
Sébastien Ros
a0e78f2eb0 Merge pull request #5571 from jersiovic/patch-6
Fixed #5140 Recipe from Migrations didn't work
2015-08-26 15:59:03 -07:00
Sébastien Ros
af4e41a717 Merge pull request #5667 from qt1/IBN-Labs/ItemEditLink_htmlAttributes
Support htmlAttributes in ItemEditLink

Fixes #5666
2015-08-26 15:54:13 -07:00
Sébastien Ros
914423a345 Merge pull request #5634 from OrchardCMS/feature/auto-enable-dependencies
Auto enable dependencies

Fixes #3132
2015-08-26 15:47:02 -07:00
Sébastien Ros
247009d07a Merge pull request #5685 from planetClaire/5684
Add missing activity, fixes #5684
2015-08-26 15:28:30 -07:00
Sebastien Ros
7f91e787de Adding debug log when content item is imported 2015-08-26 14:44:56 -07:00
Sebastien Ros
6810cf473f Updating indexing tasks when content is imported or restored 2015-08-26 14:44:50 -07:00
Sebastien Ros
79a0ae86e8 Create index command should not delete existing index 2015-08-26 14:44:40 -07:00
Sebastien Ros
4cec35daf8 Disposing the session when a transaction is rolled back 2015-08-26 14:44:32 -07:00
Sebastien Ros
8d4cb98d59 Adding missing content handler Restore events 2015-08-26 14:44:25 -07:00
Sebastien Ros
e6424e2589 Removing empty folder 2015-08-26 14:44:15 -07:00
Sebastien Ros
dcc7783f12 Adding storage filter events for Import/Export 2015-08-26 09:47:39 -07:00
Sebastien Ros
d35ebe04e7 Adding User identity resolver
To improve import step for Users
2015-08-26 09:47:26 -07:00
Sebastien Ros
c80f2d4baa Fixing Search settings export 2015-08-26 09:46:46 -07:00
Sébastien Ros
9a4e0c1741 Merge pull request #5694 from dcinzona/patch-2
Fixes #5693 - DisableTheme Part breaks admin theme
2015-08-25 09:56:31 -07:00
Gustavo Tandeciarz
47d3d2b738 Fixes #5693
Will not disable the admin theme.
2015-08-25 12:54:26 -04:00
Daniel Stolt
a8db54d994 Added missing PDF file. 2015-08-25 16:24:29 +02:00
Daniel Stolt
d6f3bfd419 Updated to Newtonsoft.Json 7.0 and Azure SDK 2.7. 2015-08-25 16:17:32 +02:00
Sipke Schoorstra
e0e600a6ce Merge pull request #5688 from Codinlab/issue/5475
Fixes #5475 : Add missing properties to HttpRequestPlaceholder
2015-08-24 10:42:51 +01:00
Thierry Fleury
21875b98cc Fixes #5475 : Add missing properties to HttpRequestPlaceholder 2015-08-24 11:39:01 +02:00
marshy
e46af0f757 Fix user defined outcome connections in Branching activities - fixes #5686 2015-08-24 16:36:28 +08:00
marshy
bccdc0337e Add missing activity, fixes #5684 2015-08-24 10:21:32 +08:00
Sipke Schoorstra
7fae246341 Added convenience overload taking a default value factory method.
This overload is useful in scenarios where you want to provide a default value but is relatively expensive to execute.
Using the overload, the factory method is only executed if the infoset does not contain an entry for the requested key.
2015-08-23 22:40:34 +01:00
Sipke Schoorstra
81adb78818 Implemented Initializing status. 2015-08-23 18:27:36 +01:00
Sipke Schoorstra
b560a4c3d0 Corrected labels on import screen. 2015-08-22 23:35:45 +01:00
Sipke Schoorstra
ec0c071ab6 Refactored minor internal affairs. 2015-08-22 23:07:55 +01:00
Sipke Schoorstra
86bae087fa Added support for eternal distributed locks.
Eternal locks never expire until they are explicitly released.
2015-08-22 22:55:00 +01:00
Sipke Schoorstra
c5b0cac24a Removed unnecessary lock statements and updated tests.
The updated test needs to refresh the lock record entity since the DB record is updated using different connections (from child lifetime scopes).
2015-08-22 20:15:20 +01:00
Sipke Schoorstra
5f4cd14937 Changed the lifetime of DB services to match their lifetime scope.
This enables tests that involve multi threading and child lifetime scopes.
2015-08-22 20:13:46 +01:00
Sipke Schoorstra
7673e2e12f Non-functional change but more explicit.
Perhaps a bit subjective, but passing in a null value or a zero value controls whether the AcquireLockInternal will block or not, so probably better to provide an explicit Zero value from TryAcquireLock instead.
2015-08-22 18:10:43 +01:00
Sipke Schoorstra
3615cbe6db Added table index to DistributedLockRecord. 2015-08-22 18:04:12 +01:00
Sipke Schoorstra
5dcbad2235 Formatted code.
Moved static members to top of class.
2015-08-22 17:51:34 +01:00
Sipke Schoorstra
079fb1f84b Narrowed the lock scope to per-thread. 2015-08-22 17:11:03 +01:00
Sipke Schoorstra
1cf2b6cf27 Corrected message on ObsoleteAttribute applied to ITaskLeaseService/TaskLeaseService. 2015-08-22 17:05:42 +01:00
Jack Cheng
28a1b4d663 #5618 taxonomy in autoroute needs to be saved twice
Fixes 5618
2015-08-21 19:27:29 -07:00
Sebastien Ros
9e95f96195 Supporting .. syntax in watched assets 2015-08-21 16:01:44 -07:00
Daniel Stolt
ff6cb5688d Removed incorrect unique constraints and added missing ones. 2015-08-21 23:43:33 +01:00
Sipke Schoorstra
2555302ed7 Removed unintentionally added file. 2015-08-21 23:21:13 +01:00
Sipke Schoorstra
811001143e Corrected interface name.
Potentially breaking, but I highly doubt anyone implemented this interface.
2015-08-21 23:14:37 +01:00
Sipke Schoorstra
412c531027 Merge branch 'dev' into feature/auto-enable-dependencies
Conflicts:
	src/Orchard/Orchard.Framework.csproj
2015-08-21 19:45:53 +01:00
Sipke Schoorstra
81bf5d94fd Updated usages of ITaskLeaseService with IDistributedLockService. 2015-08-21 19:35:42 +01:00
Sipke Schoorstra
6c712a9840 Fixed bugs, refactored and polished distributed lock service.
- Added machine and thread scoped locking.
- Added support for blocking acquisitions.
- Added thread synchronization when creating and committing nested transactions for lock record creation and updates.
2015-08-21 15:22:32 +01:00
qt1
d9a3db1ebf Support htmlAttributes in ItemEditLink 2015-08-21 03:09:50 +03:00
Sébastien Ros
5b42c707b1 Merge pull request #5627 from Codinlab/fixes/ContentTypeEncoding
Fixes 5591 : ContentType's name encoding
2015-08-20 13:03:28 -07:00
Sébastien Ros
73683ec057 Merge pull request #5640 from jtkech/patch-4
#5552: ContentPicker Search Route issue

Fixes #5552
2015-08-20 12:26:09 -07:00
Sébastien Ros
83a35f89cf Merge pull request #5644 from mvarblow/patch-1
Allow for packaging a debug build
2015-08-20 12:22:00 -07:00
Daniel Stolt
2a9d931e39 Shortened unique constraint names for compatibility with MySQL.
MySQL has a maximum identifier length of 64 chars for constraints and indexes.
2015-08-20 12:38:58 +01:00
Daniel Stolt
aa7f9dd1cd Added unique constraints to core settings tables. 2015-08-20 12:38:57 +01:00
Daniel Stolt
aae53c3909 Added unique constraints to data migration records. 2015-08-20 12:38:57 +01:00
Daniel Stolt
90b3c1e7f6 Added unique constraints to ContentItemVersionRecord table. 2015-08-20 12:38:56 +01:00
Daniel Stolt
1c7ed9cb94 Added support for unique constraints to SchemaBuilder. 2015-08-20 12:38:55 +01:00
Sipke Schoorstra
61f1c3ae00 Simplified distributed locking implementation and did the following:
- Added Support for re-entry
- Made TryAcquireLock method thread-safe.
- Changed the way locks are released by decreasing their ref count. A lock is expired if: a) ref count == 0 or b) ExpiredUtc lies in the past. It is no longer necessary to delete a lock record (but would be fine, maybe as a background task).
2015-08-19 23:05:39 +01:00
Daniel Stolt
6b4a497e2d Merge pull request #5659 from planetClaire/5658
Show Default layer by default in Widgets admin
2015-08-19 14:03:38 +01:00
marshy
8cbb1d6960 Show Default layer by default in Widgets admin 2015-08-19 13:41:49 +08:00
jtkech
1ed973ab88 Update MediaController.cs 2015-08-14 00:29:02 +02:00
jtkech
c4d20e3b73 Update ContentPickerController.cs 2015-08-14 00:14:57 +02:00
jtkech
07efdb267a Update Routes.cs 2015-08-13 23:27:40 +02:00
mvarblow
fd931397a4 Allow for packing a debug build
We use the orchard packaging script for continuous deployments to QA servers where we'd like to run debug builds.
2015-08-13 12:01:35 -04:00
Sipke Schoorstra
7d7340fbab Resolved merge conflicts.
The dev branch had the ExtensionManagerExtensions class as a separate file while the 1.9.x branch had this class in the same file as IExtensionManager.cs.
2015-08-12 15:33:10 +01:00
Sipke Schoorstra
591a06e944 Merge branch 'dev' of https://github.com/OrchardCMS/Orchard into feature/auto-enable-dependencies
Conflicts:
	src/Orchard.Web/Modules/Orchard.Layouts/Module.txt
	src/Orchard/Environment/Extensions/IExtensionManager.cs
	src/Orchard/Orchard.Framework.csproj
2015-08-12 15:24:36 +01:00
Sipke Schoorstra
08a3285e4f #3132: Auto-enabling dependency features.
This makes sure that any dependency of a feature that is currently not enabled gets enabled automatically before the shell is activated.
This prevents potential autofac resolution issues if one service depends on another service provided by a feature that is disabled.

Fixes #3132
2015-08-12 15:13:03 +01:00
Sipke Schoorstra
4cd88cb9c9 Minor cleanup and formatting. 2015-08-12 15:07:15 +01:00
Sipke Schoorstra
f39b273558 Fixed some typos and corrected TinyMce dependency listings. 2015-08-12 14:47:24 +01:00
Sipke Schoorstra
77b8df516a Improved locking code.
- Moved DatabaseLock into Framework and making it the default lock provider.
- Removed unnecessary thread synchronization code.
- Allowing multiple lock acquisitions from the same machine (simulating a "lease").
- Updated unit tests.
2015-08-11 16:43:48 +01:00
Sipke Schoorstra
11f6ecc4d4 Added unit test for CompositionStrategy. 2015-08-11 12:56:18 +01:00
Sipke Schoorstra
cb6835aba3 Updated AutomaticDataMigrations to take advantage of the DistributedLockService. 2015-08-10 18:08:00 +01:00
Sipke Schoorstra
0a9b05314e Changed dependency resolution.
This ensures dependency resolution works even when there's no work context (which happens when the code executes at the EndRequest event for example).
2015-08-10 18:06:57 +01:00
Sipke Schoorstra
01de9ef646 Addec leanup code to the ContainerTestBase. 2015-08-10 18:05:15 +01:00
Sipke Schoorstra
92c6d5fd80 Added logging statement in case of non-fatal exception. 2015-08-10 17:43:21 +01:00
Sipke Schoorstra
97fcfd4e24 Added tests for DistributedService. 2015-08-10 16:27:04 +01:00
Sipke Schoorstra
68c401c6eb Preventing usage disposed object and fixed EnsureLifetimeScope. 2015-08-10 15:27:15 +01:00
Sipke Schoorstra
16cd4e89c4 Added tests for DatabaseLock. 2015-08-10 15:24:18 +01:00
Sipke Schoorstra
17082eec9c Refactored disposal of DatabaseLock.
This ensures the cleanup will be able to resolve a database transaction even when it's Autofac that's disposing the object.
2015-08-10 15:13:03 +01:00
Thierry Fleury
cc70480126 Fixes 5591 : ContentType's name encoding 2015-08-10 15:28:19 +02:00
Sipke Schoorstra
b62939f850 Implemented locking using ReaderWriterLockSlim and simplified logging statements. 2015-08-10 14:06:58 +01:00
Sipke Schoorstra
ab12e9e630 Turned IDistributedLockService into an ISingleton. 2015-08-10 14:06:13 +01:00
Sipke Schoorstra
f2e0fb22b3 Removed copy/paste artifact. 2015-08-10 13:48:54 +01:00
Sipke Schoorstra
15e6c95740 Added thread synchronization.
This ensures that only one thread at a time can acquire a lock.
2015-08-10 13:24:54 +01:00
Sipke Schoorstra
5813647574 Refactor renamed ILock to IDistributedLock.
Also refactored the IDistributedLockService to be more in line with general .NET patterns by return a boolean from the TryAcquire method.
2015-08-10 12:47:53 +01:00
Sipke Schoorstra
f363ac2b5f Initial work on a distributed locking service. 2015-08-10 11:56:00 +01:00
Sergio Navarro
8a8b0f91c6 Fixed #5140 Recipe from Migrations didn't work 2015-07-25 08:54:31 +02:00
yw80
879e35dcc0 Correct CSS class name of MediaLibraryPickerField field
Field CSS class name should use the technical name, rather than the display name.
2015-07-24 12:21:31 +08:00
jtkech
e8111cef5e Update DynamicContentItemTests.cs
Adds an unit test for null checking on dynamic ContentItem / ContentPart properties
2015-07-24 02:54:01 +02:00
yw80
a0f42632e0 Remove the blank line at the bottom of every page after the default theme rendering.
Set a background color to #layout-footer In Site.css, you can clearly see the blank line at the bottom.
2015-07-20 15:43:23 +08:00
jtkech
28643ae7b8 Update ContentPart.cs 2015-07-20 02:23:56 +02:00
jtkech
70ea2df334 Update ContentItem.cs 2015-07-20 02:11:49 +02:00
yw80
30a95ed773 Correct CSS class name of MediaLibraryPickerField field
Field CSS class name should use the technical name, rather than the
display name.
2015-07-17 17:58:18 +08:00
343 changed files with 27631 additions and 42190 deletions

2
.gitignore vendored
View File

@@ -166,6 +166,8 @@ build/
/artifacts
*.sln.cache
src/Orchard.Web/Media/*
src/Orchard.Web/x86
src/Orchard.Web/amd64
log.xml
profiling/
*.orig

View File

@@ -265,6 +265,18 @@ Website: https://github.com/sayedihashimi/package-web/
Copyright: Copyright 2013 Sayed Ibrahim Hashimi
License: Apache 2.0
SQLite
-----
Website: http://sqlite.org
Copyright: Public Domain
License: Public Domain
SQLite CREATE Statement Parser for .Net
-----
Website: https://github.com/ericschultz/SQLiteParser
Copyright: Copyright 2014 Outercurve Foundation
License: MIT
SpecFlow
-----
Website: http://www.specflow.org/

View File

@@ -10,6 +10,7 @@
<MsBuildTasksFolder>$(MSBuildProjectDirectory)\buildtasks</MsBuildTasksFolder>
<ArtifactsFolder>$(MSBuildProjectDirectory)\artifacts</ArtifactsFolder>
<SqlCeFolder>$(MSBuildProjectDirectory)\lib\sqlce</SqlCeFolder>
<SQLiteFolder>$(MSBuildProjectDirectory)\lib\sqlite</SQLiteFolder>
<SourceArtifactFolder>$(ArtifactsFolder)\Source</SourceArtifactFolder>
<MsDeployArtifactFolder>$(ArtifactsFolder)\MsDeploy</MsDeployArtifactFolder>
<GalleryArtifactFolder>$(ArtifactsFolder)\Gallery</GalleryArtifactFolder>
@@ -27,6 +28,7 @@
<BuildPlatform Condition="$(ProgramW6432) != ''">x64</BuildPlatform>
<BuildPlatform Condition="$(BuildPlatform) == ''">x86</BuildPlatform>
<Configuration Condition="$(Configuration) == ''">Release</Configuration>
<!-- TeamCity build number -->
<Version>$(BUILD_NUMBER)</Version>
@@ -115,7 +117,7 @@
<MSBuild
Projects="$(SrcFolder)\Orchard.sln"
Targets="Build"
Properties="Configuration=Release;OutputPath=$(CompileFolder)" />
Properties="Configuration=$(Configuration);OutputPath=$(CompileFolder)" />
<!-- Compile to "regular" output folder for devs using VS locally -->
<MSBuild
Projects="$(SrcFolder)\Orchard.sln"
@@ -126,7 +128,7 @@
<MSBuild
Projects="$(SrcFolder)\Tools\MSBuild.Orchard.Tasks\MSBuild.Orchard.Tasks.csproj"
Targets="Build"
Properties="Configuration=Release;OutputPath=$(MsBuildTasksFolder)" />
Properties="Configuration=$(Configuration);OutputPath=$(MsBuildTasksFolder)" />
</Target>
<Target Name="TypeScript" DependsOnTargets="CompileMsBuildTasks">
@@ -188,6 +190,8 @@
<ItemGroup>
<SqlCe-Native-Binaries-x86 Include="$(SqlCeFolder)\x86\**\*"/>
<SqlCe-Native-Binaries-amd64 Include="$(SqlCeFolder)\amd64\**\*"/>
<SQLite-Native-Binaries-x86 Include="$(SQLiteFolder)\x86\**\*"/>
<SQLite-Native-Binaries-amd64 Include="$(SQLiteFolder)\amd64\**\*"/>
<Stage-Orchard-Web-Bins Include="$(WebSitesFolder)\Orchard.Web\bin\*"/>
<Stage-Bin-Exclude Include="$(WebSitesFolder)\**\bin\**\*" />
<Stage-Web Include="$(WebSitesFolder)\Orchard.Web\**\*;$(SrcFolder)\Orchard.Web\*.csproj;" Exclude="$(SrcFolder)\Orchard.Web\Orchard.Web.csproj;$(SrcFolder)\Orchard.Web\**\*.Release.config;$(SrcFolder)\Orchard.Web\**\*.Debug.config"/>
@@ -258,6 +262,8 @@
<Copy SourceFiles="@(Stage-PoFiles)" DestinationFolder="$(StageFolder)\%(RecursiveDir)"/>
<Copy SourceFiles="@(SqlCe-Native-Binaries-x86)" DestinationFolder="$(StageFolder)\bin\x86\%(RecursiveDir)"/>
<Copy SourceFiles="@(SqlCe-Native-Binaries-amd64)" DestinationFolder="$(StageFolder)\bin\amd64\%(RecursiveDir)"/>
<Copy SourceFiles="@(SQLite-Native-Binaries-x86)" DestinationFolder="$(StageFolder)\bin\x86\%(RecursiveDir)"/>
<Copy SourceFiles="@(SQLite-Native-Binaries-amd64)" DestinationFolder="$(StageFolder)\bin\amd64\%(RecursiveDir)"/>
<Copy SourceFiles="@(Stage-Core)" DestinationFolder="$(StageFolder)\Core\%(RecursiveDir)"/>
<Copy SourceFiles="@(Stage-Modules)" DestinationFiles="@(Stage-Modules->'$(StageFolder)\Modules\%(ModuleName)\%(RecursiveDir)%(Filename)%(Extension)')"/>
<Copy SourceFiles="@(Stage-Modules-Binaries-Unique)" DestinationFiles="@(Stage-Modules-Binaries-Unique->'$(StageFolder)\Modules\%(ModuleName)\%(RecursiveDir)%(Filename)%(Extension)')"/>
@@ -273,19 +279,19 @@
<!-- extra processing of the staged config files -->
<TransformXml
Source="$(StageFolder)\Web.Config"
Transform="$(SrcFolder)\Orchard.Web\Web.Release.Config"
Transform="$(SrcFolder)\Orchard.Web\Web.$(Configuration).Config"
Destination="$(StageFolder)\Web.Config"
/>
<TransformXml
Source="$(StageFolder)\Config\HostComponents.Config"
Transform="$(SrcFolder)\Orchard.Web\Config\HostComponents.Release.Config"
Transform="$(SrcFolder)\Orchard.Web\Config\HostComponents.$(Configuration).Config"
Destination="$(StageFolder)\Config\HostComponents.Config"
/>
<TransformXml
Source="$(StageFolder)\Config\log4net.Config"
Transform="$(SrcFolder)\Orchard.Web\Config\log4net.Release.Config"
Transform="$(SrcFolder)\Orchard.Web\Config\log4net.$(Configuration).Config"
Destination="$(StageFolder)\Config\log4net.Config"
/>

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -403,17 +403,17 @@
</member>
<member name="M:Newtonsoft.Json.JsonWriter.WriteStartObject">
<summary>
Writes the beginning of a Json object.
Writes the beginning of a JSON object.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonWriter.WriteEndObject">
<summary>
Writes the end of a Json object.
Writes the end of a JSON object.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonWriter.WriteStartArray">
<summary>
Writes the beginning of a Json array.
Writes the beginning of a JSON array.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonWriter.WriteEndArray">
@@ -447,7 +447,7 @@
</member>
<member name="M:Newtonsoft.Json.JsonWriter.WriteEnd">
<summary>
Writes the end of the current Json object or array.
Writes the end of the current JSON object or array.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonWriter.WriteToken(Newtonsoft.Json.JsonReader)">
@@ -882,17 +882,17 @@
</member>
<member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartArray">
<summary>
Writes the beginning of a Json array.
Writes the beginning of a JSON array.
</summary>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonWriter.WriteStartObject">
<summary>
Writes the beginning of a Json object.
Writes the beginning of a JSON object.
</summary>
</member>
<member name="M:Newtonsoft.Json.Bson.BsonWriter.WritePropertyName(System.String)">
<summary>
Writes the property name of a name/value pair on a Json object.
Writes the property name of a name/value pair on a JSON object.
</summary>
<param name="name">The name of the property.</param>
</member>
@@ -1112,7 +1112,12 @@
</member>
<member name="M:Newtonsoft.Json.JsonConverter.GetSchema">
<summary>
<para>
Gets the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
<returns>The <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> of the JSON produced by the JsonConverter.</returns>
</member>
@@ -2636,13 +2641,13 @@
Initializes a new instance of the <see cref="T:Newtonsoft.Json.JsonConverterAttribute"/> class.
</summary>
<param name="converterType">Type of the converter.</param>
<param name="converterParameters">Parameter list to use when constructing the JsonConverter. Can be null.</param>
<param name="converterParameters">Parameter list to use when constructing the JsonConverter. Can be null.</param>
</member>
<member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterType">
<summary>
Gets the type of the converter.
Gets the <see cref="T:System.Type"/> of the converter.
</summary>
<value>The type of the converter.</value>
<value>The <see cref="T:System.Type"/> of the converter.</value>
</member>
<member name="P:Newtonsoft.Json.JsonConverterAttribute.ConverterParameters">
<summary>
@@ -2673,7 +2678,7 @@
</member>
<member name="T:Newtonsoft.Json.JsonException">
<summary>
The exception thrown when an error occurs during Json serialization or deserialization.
The exception thrown when an error occurs during JSON serialization or deserialization.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonException.#ctor">
@@ -2882,7 +2887,7 @@
</member>
<member name="T:Newtonsoft.Json.JsonReaderException">
<summary>
The exception thrown when an error occurs while reading Json text.
The exception thrown when an error occurs while reading JSON text.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonReaderException.#ctor">
@@ -2932,9 +2937,14 @@
</summary>
<value>The path to the JSON where the error occurred.</value>
</member>
<member name="T:Newtonsoft.Json.JsonRequiredAttribute">
<summary>
Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer"/> to always serialize the member, and require the member has a value.
</summary>
</member>
<member name="T:Newtonsoft.Json.JsonSerializationException">
<summary>
The exception thrown when an error occurs during Json serialization or deserialization.
The exception thrown when an error occurs during JSON serialization or deserialization.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonSerializationException.#ctor">
@@ -3035,14 +3045,14 @@
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader)">
<summary>
Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.
Deserializes the JSON structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>.
</summary>
<param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> that contains the JSON structure to deserialize.</param>
<returns>The <see cref="T:System.Object"/> being deserialized.</returns>
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(System.IO.TextReader,System.Type)">
<summary>
Deserializes the Json structure contained by the specified <see cref="T:System.IO.StringReader"/>
Deserializes the JSON structure contained by the specified <see cref="T:System.IO.StringReader"/>
into an instance of the specified type.
</summary>
<param name="reader">The <see cref="T:System.IO.TextReader"/> containing the object.</param>
@@ -3051,7 +3061,7 @@
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Deserialize``1(Newtonsoft.Json.JsonReader)">
<summary>
Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>
Deserializes the JSON structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>
into an instance of the specified type.
</summary>
<param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param>
@@ -3060,7 +3070,7 @@
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader,System.Type)">
<summary>
Deserializes the Json structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>
Deserializes the JSON structure contained by the specified <see cref="T:Newtonsoft.Json.JsonReader"/>
into an instance of the specified type.
</summary>
<param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> containing the object.</param>
@@ -3069,18 +3079,18 @@
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object)">
<summary>
Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
Serializes the specified <see cref="T:System.Object"/> and writes the JSON structure
to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>.
</summary>
<param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param>
<param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the JSON structure.</param>
<param name="value">The <see cref="T:System.Object"/> to serialize.</param>
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object,System.Type)">
<summary>
Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
Serializes the specified <see cref="T:System.Object"/> and writes the JSON structure
to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>.
</summary>
<param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param>
<param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the JSON structure.</param>
<param name="value">The <see cref="T:System.Object"/> to serialize.</param>
<param name="objectType">
The type of the value being serialized.
@@ -3090,10 +3100,10 @@
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Serialize(System.IO.TextWriter,System.Object,System.Type)">
<summary>
Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
Serializes the specified <see cref="T:System.Object"/> and writes the JSON structure
to a <c>Stream</c> using the specified <see cref="T:System.IO.TextWriter"/>.
</summary>
<param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the Json structure.</param>
<param name="textWriter">The <see cref="T:System.IO.TextWriter"/> used to write the JSON structure.</param>
<param name="value">The <see cref="T:System.Object"/> to serialize.</param>
<param name="objectType">
The type of the value being serialized.
@@ -3103,10 +3113,10 @@
</member>
<member name="M:Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter,System.Object)">
<summary>
Serializes the specified <see cref="T:System.Object"/> and writes the Json structure
Serializes the specified <see cref="T:System.Object"/> and writes the JSON structure
to a <c>Stream</c> using the specified <see cref="T:Newtonsoft.Json.JsonWriter"/>.
</summary>
<param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the Json structure.</param>
<param name="jsonWriter">The <see cref="T:Newtonsoft.Json.JsonWriter"/> used to write the JSON structure.</param>
<param name="value">The <see cref="T:System.Object"/> to serialize.</param>
</member>
<member name="E:Newtonsoft.Json.JsonSerializer.Error">
@@ -3130,6 +3140,12 @@
</summary>
<value>The trace writer.</value>
</member>
<member name="P:Newtonsoft.Json.JsonSerializer.EqualityComparer">
<summary>
Gets or sets the equality comparer used by the serializer when comparing references.
</summary>
<value>The equality comparer.</value>
</member>
<member name="P:Newtonsoft.Json.JsonSerializer.TypeNameHandling">
<summary>
Gets or sets how type name writing and reading is handled by the serializer.
@@ -3241,7 +3257,7 @@
</member>
<member name="P:Newtonsoft.Json.JsonSerializer.DateFormatString">
<summary>
Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text.
Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatted when writing JSON text, and the expected date format when reading JSON text.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonSerializer.Culture">
@@ -3345,12 +3361,24 @@
</summary>
<value>The contract resolver.</value>
</member>
<member name="P:Newtonsoft.Json.JsonSerializerSettings.EqualityComparer">
<summary>
Gets or sets the equality comparer used by the serializer when comparing references.
</summary>
<value>The equality comparer.</value>
</member>
<member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolver">
<summary>
Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references.
</summary>
<value>The reference resolver.</value>
</member>
<member name="P:Newtonsoft.Json.JsonSerializerSettings.ReferenceResolverProvider">
<summary>
Gets or sets a function that creates the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references.
</summary>
<value>A function that creates the <see cref="T:Newtonsoft.Json.Serialization.IReferenceResolver"/> used by the serializer when resolving references.</value>
</member>
<member name="P:Newtonsoft.Json.JsonSerializerSettings.TraceWriter">
<summary>
Gets or sets the <see cref="T:Newtonsoft.Json.Serialization.ITraceWriter"/> used by the serializer when writing trace messages.
@@ -3377,7 +3405,7 @@
</member>
<member name="P:Newtonsoft.Json.JsonSerializerSettings.DateFormatString">
<summary>
Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatting when writing JSON text.
Get or set how <see cref="T:System.DateTime"/> and <see cref="T:System.DateTimeOffset"/> values are formatted when writing JSON text, and the expected date format when reading JSON text.
</summary>
</member>
<member name="P:Newtonsoft.Json.JsonSerializerSettings.MaxDepth">
@@ -3544,12 +3572,12 @@
</member>
<member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartObject">
<summary>
Writes the beginning of a Json object.
Writes the beginning of a JSON object.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartArray">
<summary>
Writes the beginning of a Json array.
Writes the beginning of a JSON array.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonTextWriter.WriteStartConstructor(System.String)">
@@ -3566,7 +3594,7 @@
</member>
<member name="M:Newtonsoft.Json.JsonTextWriter.WritePropertyName(System.String)">
<summary>
Writes the property name of a name/value pair on a Json object.
Writes the property name of a name/value pair on a JSON object.
</summary>
<param name="name">The name of the property.</param>
</member>
@@ -3781,7 +3809,7 @@
</member>
<member name="T:Newtonsoft.Json.JsonToken">
<summary>
Specifies the type of Json token.
Specifies the type of JSON token.
</summary>
</member>
<member name="F:Newtonsoft.Json.JsonToken.None">
@@ -3876,7 +3904,12 @@
</member>
<member name="T:Newtonsoft.Json.JsonValidatingReader">
<summary>
<para>
Represents a reader that provides <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> validation.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonValidatingReader.#ctor(Newtonsoft.Json.JsonReader)">
@@ -3986,7 +4019,7 @@
</member>
<member name="T:Newtonsoft.Json.JsonWriterException">
<summary>
The exception thrown when an error occurs while reading Json text.
The exception thrown when an error occurs while reading JSON text.
</summary>
</member>
<member name="M:Newtonsoft.Json.JsonWriterException.#ctor">
@@ -6434,12 +6467,12 @@
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartObject">
<summary>
Writes the beginning of a Json object.
Writes the beginning of a JSON object.
</summary>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartArray">
<summary>
Writes the beginning of a Json array.
Writes the beginning of a JSON array.
</summary>
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenWriter.WriteStartConstructor(System.String)">
@@ -6456,7 +6489,7 @@
</member>
<member name="M:Newtonsoft.Json.Linq.JTokenWriter.WritePropertyName(System.String)">
<summary>
Writes the property name of a name/value pair on a Json object.
Writes the property name of a name/value pair on a JSON object.
</summary>
<param name="name">The name of the property.</param>
</member>
@@ -6806,12 +6839,22 @@
</member>
<member name="T:Newtonsoft.Json.Schema.Extensions">
<summary>
<para>
Contains the JSON schema extension methods.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)">
<summary>
<para>
Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
<param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
<param name="schema">The schema to test with.</param>
@@ -6821,7 +6864,12 @@
</member>
<member name="M:Newtonsoft.Json.Schema.Extensions.IsValid(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,System.Collections.Generic.IList{System.String}@)">
<summary>
<para>
Determines whether the <see cref="T:Newtonsoft.Json.Linq.JToken"/> is valid.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
<param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
<param name="schema">The schema to test with.</param>
@@ -6832,14 +6880,24 @@
</member>
<member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema)">
<summary>
<para>
Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
<param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
<param name="schema">The schema to test with.</param>
</member>
<member name="M:Newtonsoft.Json.Schema.Extensions.Validate(Newtonsoft.Json.Linq.JToken,Newtonsoft.Json.Schema.JsonSchema,Newtonsoft.Json.Schema.ValidationEventHandler)">
<summary>
<para>
Validates the specified <see cref="T:Newtonsoft.Json.Linq.JToken"/>.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
<param name="source">The source <see cref="T:Newtonsoft.Json.Linq.JToken"/> to test.</param>
<param name="schema">The schema to test with.</param>
@@ -6847,7 +6905,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchema">
<summary>
<para>
An in-memory representation of a JSON Schema.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchema.#ctor">
@@ -7104,7 +7167,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaException">
<summary>
<para>
Returns detailed information about the schema exception.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchemaException.#ctor">
@@ -7156,7 +7224,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaGenerator">
<summary>
<para>
Generates a <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from a specified <see cref="T:System.Type"/>.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchemaGenerator.Generate(System.Type)">
@@ -7204,7 +7277,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaResolver">
<summary>
<para>
Resolves <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/> from an id.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="M:Newtonsoft.Json.Schema.JsonSchemaResolver.#ctor">
@@ -7227,7 +7305,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.JsonSchemaType">
<summary>
<para>
The value types allowed by the <see cref="T:Newtonsoft.Json.Schema.JsonSchema"/>.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="F:Newtonsoft.Json.Schema.JsonSchemaType.None">
@@ -7277,7 +7360,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling">
<summary>
<para>
Specifies undefined schema Id handling options for the <see cref="T:Newtonsoft.Json.Schema.JsonSchemaGenerator"/>.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="F:Newtonsoft.Json.Schema.UndefinedSchemaIdHandling.None">
@@ -7297,7 +7385,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.ValidationEventArgs">
<summary>
<para>
Returns detailed information related to the <see cref="T:Newtonsoft.Json.Schema.ValidationEventHandler"/>.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="P:Newtonsoft.Json.Schema.ValidationEventArgs.Exception">
@@ -7320,7 +7413,12 @@
</member>
<member name="T:Newtonsoft.Json.Schema.ValidationEventHandler">
<summary>
<para>
Represents the callback method that will handle JSON schema validation events and the <see cref="T:Newtonsoft.Json.Schema.ValidationEventArgs"/>.
</para>
<note type="caution">
JSON Schema validation has been moved to its own package. See <see href="http://www.newtonsoft.com/jsonschema">http://www.newtonsoft.com/jsonschema</see> for more details.
</note>
</summary>
</member>
<member name="T:Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver">
@@ -7493,7 +7591,14 @@
Resolves the name of the property.
</summary>
<param name="propertyName">Name of the property.</param>
<returns>Name of the property.</returns>
<returns>Resolved name of the property.</returns>
</member>
<member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveDictionaryKey(System.String)">
<summary>
Resolves the key of the dictionary. By default <see cref="M:Newtonsoft.Json.Serialization.DefaultContractResolver.ResolvePropertyName(System.String)"/> is used to resolve dictionary keys.
</summary>
<param name="dictionaryKey">Key of the dictionary.</param>
<returns>Resolved key of the dictionary.</returns>
</member>
<member name="M:Newtonsoft.Json.Serialization.DefaultContractResolver.GetResolvedPropertyName(System.String)">
<summary>
@@ -8012,6 +8117,12 @@
</summary>
<value>The property name resolver.</value>
</member>
<member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyResolver">
<summary>
Gets or sets the dictionary key resolver.
</summary>
<value>The dictionary key resolver.</value>
</member>
<member name="P:Newtonsoft.Json.Serialization.JsonDictionaryContract.DictionaryKeyType">
<summary>
Gets the <see cref="T:System.Type"/> of the dictionary keys.
@@ -8472,6 +8583,7 @@
<summary>
Initializes a new instance of the <see cref="T:Newtonsoft.Json.Serialization.ReflectionAttributeProvider"/> class.
</summary>
<param name="attributeProvider">The instance to get attributes for. This parameter should be a <see cref="T:System.Type"/>, <see cref="T:System.Reflection.MemberInfo"/>, <see cref="T:System.Reflection.ParameterInfo"/> or <see cref="T:System.Reflection.Assembly"/>.</param>
</member>
<member name="M:Newtonsoft.Json.Serialization.ReflectionAttributeProvider.GetAttributes(System.Boolean)">
<summary>
@@ -8581,7 +8693,7 @@
</member>
<member name="M:Newtonsoft.Json.Utilities.CollectionUtils.IndexOf``1(System.Collections.Generic.IEnumerable{``0},``0,System.Collections.Generic.IEqualityComparer{``0})">
<summary>
Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer.
Returns the index of the first occurrence in a sequence by using a specified IEqualityComparer{TSource}.
</summary>
<typeparam name="TSource">The type of the elements of source.</typeparam>
<param name="list">A sequence in which to locate a value.</param>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Outercurve.SQLiteCreateTree</name>
</assembly>
<members>
<member name="M:Outercurve.SQLiteCreateTree.AlterTable.NativeAlterTableProcessor.CreateSqlStatements(Outercurve.SQLiteCreateTree.AlterTable.Action.AlterTableCommand)">
<summary>
returns null if something if we don't have ones we can do natively
</summary>
<param name="command"></param>
<returns></returns>
</member>
<member name="P:Outercurve.SQLiteCreateTree.Nodes.ColumnConstraint.UniqueConstraintNode.ConflictClause">
<summary>
Conflict Clause is really weird, it can be empty. We treat that as null.
</summary>
</member>
<member name="P:Outercurve.SQLiteCreateTree.Nodes.ForeignDeferrableNode.IsDeferrable">
<summary>
NOT?
</summary>
</member>
<member name="P:Outercurve.SQLiteCreateTree.Nodes.ForeignDeferrableNode.InitiallyImmediate">
<summary>
((INITIALLY DEFERRED)| (INITIALLY IMMEDIATE))?
</summary>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,121 @@
<?xml version="1.0"?>
<!--
*
* System.Data.SQLite.dll.config -
*
* Written by Joe Mistachkin.
* Released to the public domain, use at your own risk!
*
-->
<configuration>
<appSettings>
<!--
NOTE: If this configuration variable is set [to anything], the SQLite
logging subsystem may be initialized in a non-default application
domain. By default, this is not allowed due to the potential
for application domain unloading issues.
-->
<!--
<add key="Force_SQLiteLog" value="1" />
-->
<!--
NOTE: If this configuration variable is set [to anything], the native
library pre-loading functionality will be disabled. By default,
the native library pre-loading will attempt to load the native
SQLite library from architecture-specific (e.g. "x86", "amd64",
"x64") or platform-specific (e.g. "Win32") directories that
reside underneath the application base directory.
-->
<!--
<add key="No_PreLoadSQLite" value="1" />
-->
<!--
NOTE: If this configuration variable is set [to anything], the new
connection string parsing algorithm will not be used. This
environment variable is intended for use with legacy code only.
-->
<!--
<add key="No_SQLiteConnectionNewParser" value="1" />
-->
<!--
NOTE: If this configuration variable is set [to anything], the initial
search for types in all loaded assemblies that are tagged with
the SQLiteFunction attribute will be skipped. Normally, this
search is conducted only once per application domain by the
static constructor of the SQLiteFunction class; however, these
implementation details are subject to change.
-->
<!--
<add key="No_SQLiteFunctions" value="1" />
-->
<!--
NOTE: If this configuration variable is set [to anything], it will be
used instead of the application base directory by the native
library pre-loader. This environment variable can be especially
useful in ASP.NET and other hosted environments where direct
control of the location of the managed assemblies is not under
the control of the application.
-->
<!--
<add key="PreLoadSQLite_BaseDirectory" value="" />
-->
<!--
NOTE: If this configuration variable is set [to anything], it will be
used instead of the processor architecture value contained in the
PROCESSOR_ARCHITECTURE environment variable to help build the
path of the native library to pre-load.
-->
<!--
<add key="PreLoadSQLite_ProcessorArchitecture" value="x86" />
-->
<!--
NOTE: If this environment variable is set [to anything], the native
library pre-loading code will skip conducting a search for the
native library to pre-load. By default, the search starts in the
location of the currently executing assembly (i.e. the assembly
containing all the managed components for System.Data.SQLite) and
then falls back to the application domain base directory.
-->
<!--
<add key="PreLoadSQLite_NoSearchForDirectory" value="1" />
-->
<!--
NOTE: If this configuration variable is set [to anything], the location
of the currently executing assembly (i.e. the one containing all
the managed components for System.Data.SQLite) will be used as
the basis for locating the the native library to pre-load (i.e.
instead of using the application domain base directory).
-->
<!--
<add key="PreLoadSQLite_UseAssemblyDirectory" value="1" />
-->
<!--
NOTE: This configuration variable is normally set by the operating
system itself and should reflect the native processor
architecture of the current process (e.g. a 32-bit x86
application running on a 64-bit x64 operating system should have
the value "x86").
-->
<!--
<add key="PROCESSOR_ARCHITECTURE" value="%PROCESSOR_ARCHITECTURE%" />
-->
<!--
NOTE: If this environment variable is set [to anything], it will be
used by the System.Data.SQLite.SQLiteFactory class as the type
name containing the System.Data.Common.DbProviderServices
implementation that should be used.
-->
<!--
<add key="TypeName_SQLiteProviderServices" value="" />
-->
</appSettings>
</configuration>

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -161,6 +161,237 @@
asynchronous request failed.
</summary>
</member>
<member name="T:Microsoft.Azure.ResourceBase">
<summary>
Resource information.
</summary>
</member>
<member name="M:Microsoft.Azure.ResourceBase.#ctor">
<summary>
Initializes a new instance of the ResourceBase class.
</summary>
</member>
<member name="M:Microsoft.Azure.ResourceBase.#ctor(System.String)">
<summary>
Initializes a new instance of the ResourceBase class with required
arguments.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceBase.Location">
<summary>
Required. Gets or sets the location of the resource.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceBase.Tags">
<summary>
Optional. Gets or sets the tags attached to the resource.
</summary>
</member>
<member name="T:Microsoft.Azure.ResourceBaseExtended">
<summary>
Resource information with extended details.
</summary>
</member>
<member name="M:Microsoft.Azure.ResourceBaseExtended.#ctor">
<summary>
Initializes a new instance of the ResourceBaseExtended class.
</summary>
</member>
<member name="M:Microsoft.Azure.ResourceBaseExtended.#ctor(System.String)">
<summary>
Initializes a new instance of the ResourceBaseExtended class with
required arguments.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceBaseExtended.Id">
<summary>
Optional. Gets or sets the ID of the resource.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceBaseExtended.Name">
<summary>
Optional. Gets or sets the name of the resource.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceBaseExtended.Type">
<summary>
Optional. Gets or sets the type of the resource.
</summary>
</member>
<member name="T:Microsoft.Azure.ResourceIdentity">
<summary>
Resource identity.
</summary>
</member>
<member name="M:Microsoft.Azure.ResourceIdentity.#ctor">
<summary>
Initializes a new instance of the ResourceIdentity class.
</summary>
</member>
<member name="M:Microsoft.Azure.ResourceIdentity.#ctor(System.String,System.String,System.String)">
<summary>
Initializes a new instance of the ResourceIdentity class.
</summary>
</member>
<member name="M:Microsoft.Azure.ResourceIdentity.GetProviderFromResourceType(System.String)">
<summary>
Returns provider string from resource type.
</summary>
<param name="resourceType">Resource type.</param>
<returns>Provider</returns>
</member>
<member name="M:Microsoft.Azure.ResourceIdentity.GetTypeFromResourceType(System.String)">
<summary>
Returns type string from resource type.
</summary>
<param name="resourceType">Resource type.</param>
<returns>Type</returns>
</member>
<member name="P:Microsoft.Azure.ResourceIdentity.ParentResourcePath">
<summary>
Optional. Gets or sets parent resource path (optional).
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceIdentity.ResourceName">
<summary>
Required. Gets or sets resource name.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceIdentity.ResourceProviderApiVersion">
<summary>
Required. Gets or sets API version of the resource provider.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceIdentity.ResourceProviderNamespace">
<summary>
Required. Gets or sets namespace of the resource provider.
</summary>
</member>
<member name="P:Microsoft.Azure.ResourceIdentity.ResourceType">
<summary>
Required. Gets or sets resource type.
</summary>
</member>
<member name="T:Microsoft.Azure.Common.OData.FilterParameterAttribute">
<summary>
Parameter attribute used with OData filters.
</summary>
</member>
<member name="M:Microsoft.Azure.Common.OData.FilterParameterAttribute.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:Microsoft.Azure.Common.OData.FilterParameterAttribute"/> class.
</summary>
<param name="name">Property name to use in the filter.</param>
</member>
<member name="M:Microsoft.Azure.Common.OData.FilterParameterAttribute.#ctor(System.String,System.String)">
<summary>
Initializes a new instance of the <see cref="T:Microsoft.Azure.Common.OData.FilterParameterAttribute"/> class.
</summary>
<param name="name">Property name to use in the filter.</param>
<param name="format">Format of the value.</param>
</member>
<member name="P:Microsoft.Azure.Common.OData.FilterParameterAttribute.Name">
<summary>
Property name to use in the filter.
</summary>
</member>
<member name="P:Microsoft.Azure.Common.OData.FilterParameterAttribute.Format">
<summary>
Format of the value.
</summary>
</member>
<member name="T:Microsoft.Azure.Common.OData.FilterString">
<summary>
Handles OData filter generation.
</summary>
</member>
<member name="M:Microsoft.Azure.Common.OData.FilterString.Generate``1(System.Linq.Expressions.Expression{System.Func{``0,System.Boolean}})">
<summary>
Generates an OData filter from a specified Linq expression.
</summary>
<typeparam name="T">Filter type</typeparam>
<param name="filter">Entity to use for filter generation</param>
<returns></returns>
</member>
<member name="T:Microsoft.Azure.Common.OData.UrlExpressionVisitor">
<summary>
Expression visitor class that generates OData style $filter parameter.
</summary>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.VisitBinary(System.Linq.Expressions.BinaryExpression)">
<summary>
Visits binary expression like ==, &amp;&amp;, >, etc.
</summary>
<param name="node">Node to visit.</param>
<returns>Original node.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.VisitUnary(System.Linq.Expressions.UnaryExpression)">
<summary>
Visits binary expression !foo.
</summary>
<param name="node">Node to visit.</param>
<returns>Original node.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.VisitConditional(System.Linq.Expressions.ConditionalExpression)">
<summary>
Visits conditional expression foo == true ? bar : fee. Throws NotSupportedException.
</summary>
<param name="node">Node to visit.</param>
<returns>Throws NotSupportedException.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.VisitNew(System.Linq.Expressions.NewExpression)">
<summary>
Visits new object expression like new DateTime().
</summary>
<param name="node">Node to visit.</param>
<returns>Original node.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.VisitConstant(System.Linq.Expressions.ConstantExpression)">
<summary>
Visits constants like 'a' or 123.
</summary>
<param name="node">Node to visit.</param>
<returns>Original node.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.VisitMember(System.Linq.Expressions.MemberExpression)">
<summary>
Visits object members like p.Foo or dateTime.Hour.
</summary>
<param name="node">Node to visit.</param>
<returns>Original node.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.VisitMethodCall(System.Linq.Expressions.MethodCallExpression)">
<summary>
Visits method calls like Contains, StartsWith, etc. Methods that are not supported will throw an exception.
</summary>
<param name="node">Node to visit.</param>
<returns>Original node.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.closeUnaryBooleanOperator">
<summary>
Appends 'eq true' to Boolean unary operators.
</summary>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.PrintConstant(System.Object)">
<summary>
Helper method to print constant.
</summary>
<param name="val">Object to print.</param>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.GetPropertyName(System.Reflection.PropertyInfo)">
<summary>
Helper method to generate property name.
</summary>
<param name="property">Property to examine.</param>
<returns>Property name or value specified in the FilterParameterAttribute.</returns>
</member>
<member name="M:Microsoft.Azure.Common.OData.UrlExpressionVisitor.GetPropertyFormat(System.Reflection.PropertyInfo)">
<summary>
Helper method to retrieve format from the FilterParameterAttribute.
</summary>
<param name="property">Property to examine.</param>
<returns>Format from FilterParameterAttribute or null.</returns>
</member>
<member name="T:Microsoft.Azure.Common.Properties.Resources">
<summary>
A strongly-typed resource class, for looking up localized strings, etc.

Binary file not shown.

View File

@@ -0,0 +1,114 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Microsoft.Azure.KeyVault.Core</name>
</assembly>
<members>
<member name="T:Microsoft.Azure.KeyVault.Core.IKey">
<summary>
Interface for Keys
</summary>
</member>
<member name="M:Microsoft.Azure.KeyVault.Core.IKey.DecryptAsync(System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.String,System.Threading.CancellationToken)">
<summary>
Decrypts the specified cipher text.
</summary>
<param name="ciphertext">The cipher text to decrypt</param>
<param name="iv">The initialization vector</param>
<param name="authenticationData">The authentication data</param>
<param name="algorithm">The algorithm to use</param>
<param name="token">Cancellation token</param>
<returns>The plain text</returns>
<remarks>If algorithm is not specified, an implementation should use its default algorithm.
Not all algorithms require, or support, all parameters.</remarks>
</member>
<member name="M:Microsoft.Azure.KeyVault.Core.IKey.EncryptAsync(System.Byte[],System.Byte[],System.Byte[],System.String,System.Threading.CancellationToken)">
<summary>
Encrypts the specified plain text.
</summary>
<param name="plaintext">The plain text to encrypt</param>
<param name="iv">The initialization vector</param>
<param name="authenticationData">The authentication data</param>
<param name="algorithm">The algorithm to use</param>
<param name="token">Cancellation token</param>
<returns>A Tuple consisting of the cipher text, the authentication tag (if applicable), the algorithm used</returns>
<remarks>If the algorithm is not specified, an implementation should use its default algorithm.
Not all algorithyms require, or support, all parameters.</remarks>
</member>
<member name="M:Microsoft.Azure.KeyVault.Core.IKey.WrapKeyAsync(System.Byte[],System.String,System.Threading.CancellationToken)">
<summary>
Encrypts the specified key material.
</summary>
<param name="key">The key material to encrypt</param>
<param name="algorithm">The algorithm to use</param>
<param name="token">Cancellation token</param>
<returns>A Tuple consisting of the encrypted key and the algorithm used</returns>
<remarks>If the algorithm is not specified, an implementation should use its default algorithm</remarks>
</member>
<member name="M:Microsoft.Azure.KeyVault.Core.IKey.UnwrapKeyAsync(System.Byte[],System.String,System.Threading.CancellationToken)">
<summary>
Decrypts the specified key material.
</summary>
<param name="encryptedKey">The encrypted key material</param>
<param name="algorithm">The algorithm to use</param>
<param name="token">Cancellation token</param>
<returns>The decrypted key material</returns>
<remarks>If the algorithm is not specified, an implementation should use its default algorithm</remarks>
</member>
<member name="M:Microsoft.Azure.KeyVault.Core.IKey.SignAsync(System.Byte[],System.String,System.Threading.CancellationToken)">
<summary>
Signs the specified digest.
</summary>
<param name="digest">The digest to sign</param>
<param name="algorithm">The algorithm to use</param>
<param name="token">Cancellation token</param>
<returns>A Tuple consisting of the signature and the algorithm used</returns>
<remarks>If the algorithm is not specified, an implementation should use its default algorithm</remarks>
</member>
<member name="M:Microsoft.Azure.KeyVault.Core.IKey.VerifyAsync(System.Byte[],System.Byte[],System.String,System.Threading.CancellationToken)">
<summary>
Verifies the specified signature value
</summary>
<param name="digest">The digest</param>
<param name="signature">The signature value</param>
<param name="algorithm">The algorithm to use</param>
<param name="token">Cancellation token</param>
<returns>A bool indicating whether the signature was successfully verified</returns>
</member>
<member name="P:Microsoft.Azure.KeyVault.Core.IKey.DefaultEncryptionAlgorithm">
<summary>
The default encryption algorithm for this key
</summary>
</member>
<member name="P:Microsoft.Azure.KeyVault.Core.IKey.DefaultKeyWrapAlgorithm">
<summary>
The default key wrap algorithm for this key
</summary>
</member>
<member name="P:Microsoft.Azure.KeyVault.Core.IKey.DefaultSignatureAlgorithm">
<summary>
The default signature algorithm for this key
</summary>
</member>
<member name="P:Microsoft.Azure.KeyVault.Core.IKey.Kid">
<summary>
The key identifier
</summary>
</member>
<member name="T:Microsoft.Azure.KeyVault.Core.IKeyResolver">
<summary>
Interface for key resolvers.
</summary>
</member>
<member name="M:Microsoft.Azure.KeyVault.Core.IKeyResolver.ResolveKeyAsync(System.String,System.Threading.CancellationToken)">
<summary>
Provides an IKey implementation for the specified key identifier.
</summary>
<param name="kid">The key identifier to resolve</param>
<param name="token">Cancellation token</param>
<returns>The resolved IKey implementation or null</returns>
<remarks>Implementations should check the format of the kid to ensure that it is recognized. Null, rather than
an exception, should be returned for unrecognized key identifiers to enable chaining of key resolvers.</remarks>
</member>
</members>
</doc>

View File

@@ -40443,7 +40443,7 @@
<param name="model">The model to use.</param>
<param name="messageReaderSettings">The message reader settings to use.</param>
<param name="version">The version of the payload being read.</param>
<param name="typeKindFromPayloadFunc">A func to compute the type kind from the payload shape if it could not be determined from the expected type or the payload type.</param>
<param name="typeKindPeekedFromPayloadFunc">A func to compute the type kind from the payload shape if it could not be determined from the expected type or the payload type.</param>
<param name="targetTypeKind">The target type kind to be used to read the payload.</param>
<param name="serializationTypeNameAnnotation">Potentially non-null instance of an annotation to put on the value reported from the reader.</param>
<returns>

View File

@@ -4,19 +4,19 @@
<name>Microsoft.WindowsAzure.Configuration</name>
</assembly>
<members>
<member name="T:Microsoft.WindowsAzure.CloudConfigurationManager">
<member name="T:Microsoft.Azure.CloudConfigurationManager">
<summary>
Configuration manager for accessing Windows Azure settings.
Configuration manager for accessing Microsoft Azure settings.
</summary>
</member>
<member name="M:Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting(System.String)">
<member name="M:Microsoft.Azure.CloudConfigurationManager.GetSetting(System.String)">
<summary>
Gets a setting with the given name.
</summary>
<param name="name">Setting name.</param>
<returns>Setting value or null if not found.</returns>
</member>
<member name="P:Microsoft.WindowsAzure.CloudConfigurationManager.AppSettings">
<member name="P:Microsoft.Azure.CloudConfigurationManager.AppSettings">
<summary>
Gets application settings.
</summary>
@@ -42,17 +42,17 @@
Looks up a localized string similar to Argument &quot;{0}&quot; cannot be an empty string..
</summary>
</member>
<member name="T:Microsoft.WindowsAzure.AzureApplicationSettings">
<member name="T:Microsoft.Azure.AzureApplicationSettings">
<summary>
Windows Azure settings.
Microsoft Azure settings.
</summary>
</member>
<member name="M:Microsoft.WindowsAzure.AzureApplicationSettings.#ctor">
<member name="M:Microsoft.Azure.AzureApplicationSettings.#ctor">
<summary>
Initializes the settings.
</summary>
</member>
<member name="M:Microsoft.WindowsAzure.AzureApplicationSettings.IsMissingSettingException(System.Exception)">
<member name="M:Microsoft.Azure.AzureApplicationSettings.IsMissingSettingException(System.Exception)">
<summary>
Checks whether the given exception represents an exception throws
for a missing setting.
@@ -60,14 +60,14 @@
<param name="e">Exception</param>
<returns>True for the missing setting exception.</returns>
</member>
<member name="M:Microsoft.WindowsAzure.AzureApplicationSettings.GetSetting(System.String)">
<member name="M:Microsoft.Azure.AzureApplicationSettings.GetSetting(System.String)">
<summary>
Gets a setting with the given name.
</summary>
<param name="name">Setting name.</param>
<returns>Setting value or null if such setting does not exist.</returns>
</member>
<member name="M:Microsoft.WindowsAzure.AzureApplicationSettings.GetValue(System.String,System.String,System.Func{System.String,System.String})">
<member name="M:Microsoft.Azure.AzureApplicationSettings.GetValue(System.String,System.String,System.Func{System.String,System.String})">
<summary>
Gets setting's value from the given provider.
</summary>
@@ -76,21 +76,21 @@
<param name="getValue">Method to obtain given setting.</param>
<returns>Setting value, or null if not found.</returns>
</member>
<member name="M:Microsoft.WindowsAzure.AzureApplicationSettings.GetServiceRuntimeSetting(System.String)">
<member name="M:Microsoft.Azure.AzureApplicationSettings.GetServiceRuntimeSetting(System.String)">
<summary>
Gets a configuration setting from the service runtime.
</summary>
<param name="name">Setting name.</param>
<returns>Setting value or null if not found.</returns>
</member>
<member name="M:Microsoft.WindowsAzure.AzureApplicationSettings.GetServiceRuntimeAssembly">
<member name="M:Microsoft.Azure.AzureApplicationSettings.GetServiceRuntimeAssembly">
<summary>
Loads and returns the latest available version of the service
runtime assembly.
</summary>
<returns>Loaded assembly, if any.</returns>
</member>
<member name="M:Microsoft.WindowsAzure.NativeMethods.GetAssemblyPath(System.String)">
<member name="M:Microsoft.Azure.NativeMethods.GetAssemblyPath(System.String)">
<summary>
Gets an assembly path from the GAC given a partial name.
</summary>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -74,15 +74,15 @@ function getAssetGroups() {
function resolveAssetGroupPaths(assetGroup, assetManifestPath) {
assetGroup.basePath = path.dirname(assetManifestPath);
assetGroup.inputPaths = assetGroup.inputs.map(function (inputPath) {
return path.join(assetGroup.basePath, inputPath);
return path.resolve(path.join(assetGroup.basePath, inputPath));
});
assetGroup.watchPaths = [];
if (!!assetGroup.watch) {
assetGroup.watchPaths = assetGroup.watch.map(function (watchPath) {
return path.join(assetGroup.basePath, watchPath);
return path.resolve(path.join(assetGroup.basePath, watchPath));
});
}
assetGroup.outputPath = path.join(assetGroup.basePath, assetGroup.output);
assetGroup.outputPath = path.resolve(path.join(assetGroup.basePath, assetGroup.output));
assetGroup.outputDir = path.dirname(assetGroup.outputPath);
assetGroup.outputFileName = path.basename(assetGroup.output);
}

View File

@@ -4,7 +4,7 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>2.5</ProductVersion>
<ProductVersion>2.7</ProductVersion>
<ProjectGuid>{03c5327d-4e8e-45a7-acd1-e18e7caa3c4a}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
@@ -65,7 +65,7 @@
<!-- Import the target files for this project template -->
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\2.5\</CloudExtensionsDir>
<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\2.7\</CloudExtensionsDir>
</PropertyGroup>
<Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
<!-- The BeforeAddRoleContent override ensures that content in themes and modules get added

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="OrchardCloudService" osFamily="4" osVersion="*" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" schemaVersion="2014-06.2.4">
<ServiceConfiguration serviceName="OrchardCloudService" osFamily="4" osVersion="*" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" schemaVersion="2015-04.2.6">
<Role name="Orchard.Azure.Web">
<Instances count="1" />
<ConfigurationSettings>
@@ -15,6 +15,7 @@
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.DiagnosticLevel" value="1" />
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.CacheSizePercentage" value="30" />
<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ConfigStoreConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="OrchardCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-06.2.4">
<ServiceDefinition name="OrchardCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="Orchard.Azure.Web">
<Sites>
<Site name="Web">
@@ -20,6 +20,7 @@
<Setting name="Orchard.Azure.DatabaseCache.HostIdentifier" />
<Setting name="Orchard.Azure.DatabaseCache.CacheName" />
<Setting name="Orchard.Azure.DatabaseCache.AuthorizationToken" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
</ConfigurationSettings>
<Endpoints>
<InputEndpoint name="HttpIn" protocol="http" port="80" />

View File

@@ -20,6 +20,7 @@
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<TargetFrameworkProfile />
<UseGlobalApplicationHostFile>true</UseGlobalApplicationHostFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -90,13 +91,13 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\lib\windowsazure\Microsoft.WindowsAzure.Configuration.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Diagnostics">
<SpecificVersion>False</SpecificVersion>
<Reference Include="Microsoft.WindowsAzure.Diagnostics, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\lib\windowsazure\Microsoft.WindowsAzure.Diagnostics.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.ServiceRuntime">
<SpecificVersion>False</SpecificVersion>
<Reference Include="Microsoft.WindowsAzure.ServiceRuntime, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\lib\windowsazure\Microsoft.WindowsAzure.ServiceRuntime.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Storage">
<SpecificVersion>False</SpecificVersion>
@@ -181,10 +182,6 @@
<Private>False</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="WebMatrix.Data">
<HintPath>..\..\..\lib\aspnetmvc\WebMatrix.Data.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Global.asax.cs">

View File

@@ -42,8 +42,9 @@
<system.diagnostics>
<trace>
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
<filter type=""/>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="AzureDiagnostics">
<filter type="" />
</add>
</listeners>
</trace>
@@ -185,25 +186,25 @@
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da"/>
<bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.3.0" newVersion="5.6.3.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.3.0" newVersion="5.6.3.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.3.0" newVersion="5.6.3.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.31101.0
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{8E3DE014-9B28-4B32-8AC1-B2BE404E9B2D}"
EndProject

View File

@@ -154,6 +154,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="App_Data/Dependencies"/>
<dependentAssembly>
<!-- 1.0.1.0 by NHibernate.Linq, Version=0.0.0.0 -->
<assemblyIdentity name="Iesi.Collections" publicKeyToken="AA95F207798DFDB4" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
@@ -190,6 +191,7 @@
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
</dependentAssembly>
<dependentAssembly>
<!-- 3.3.1.4000 by NHibernate.Linq, Version=0.0.0.0 -->
<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.4000" newVersion="4.0.0.4000"/>
</dependentAssembly>
@@ -198,24 +200,34 @@
<bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.3.0" newVersion="5.6.3.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.3.0" newVersion="5.6.3.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.3.0" newVersion="5.6.3.0"/>
<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0"/>
</dependentAssembly>
<dependentAssembly>
<!-- 2.0.0.0 by System.Data.SqlServerCe, Version=4.0.0.0 -->
<assemblyIdentity name="System.Transactions" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<!-- 2.0.0.0 by System.Data.SqlServerCe, Version=4.0.0.0 -->
<assemblyIdentity name="System.Data" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -195,7 +195,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral"/>

View File

@@ -24,7 +24,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da"/>

View File

@@ -303,5 +303,24 @@ namespace Orchard.Tests.Modules.Indexing {
_provider.Store("default", _provider.New(1).Add("field", "value2"));
Assert.That(searchBuilder.WithField("id", "1").Count(), Is.EqualTo(1));
}
[Test]
public void IndexProviderShouldDeleteMoreThanMaxTermsCount() {
_provider.CreateIndex("default");
var documents = Enumerable.Range(1, 1025).Select(i => _provider.New(i).Add("field", "value1"));
_provider.Store("default", documents);
var searchBuilder = _provider.CreateSearchBuilder("default");
Assert.That(searchBuilder.Count(), Is.EqualTo(1025));
Assert.That(searchBuilder.Get(1).ContentItemId, Is.EqualTo(1));
Assert.That(searchBuilder.Get(1025).ContentItemId, Is.EqualTo(1025));
_provider.Delete("default", Enumerable.Range(1, 1025));
Assert.That(searchBuilder.Count(), Is.EqualTo(0));
}
}
}

View File

@@ -281,6 +281,10 @@
<Project>{5D0F00F0-26C9-4785-AD61-B85710C60EB0}</Project>
<Name>Orchard.Tags</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.TaskLease\Orchard.TaskLease.csproj">
<Project>{3f72a4e9-7b72-4260-b010-c16ec54f9baf}</Project>
<Name>Orchard.TaskLease</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.Themes\Orchard.Themes.csproj">
<Project>{CDE24A24-01D3-403C-84B9-37722E18DFB7}</Project>
<Name>Orchard.Themes</Name>

View File

@@ -24,7 +24,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da"/>

View File

@@ -14,6 +14,12 @@ namespace Orchard.Tests {
Resolve(_container);
}
[TearDown]
public void Cleanup() {
if (_container != null)
_container.Dispose();
}
#if false
// technically more accurate, and doesn't work
[SetUp]

View File

@@ -76,5 +76,39 @@ namespace Orchard.Tests.ContentManagement {
Assert.That((object)testingPartDynamic, Is.AssignableTo<IEnumerable<ContentPart>>());
}
[Test]
public void NullCheckingCanBeDoneOnProperties() {
var contentItem = new ContentItem();
var contentPart = new ContentPart { TypePartDefinition = new ContentTypePartDefinition(new ContentPartDefinition("FooPart"), new SettingsDictionary()) };
var contentField = new ContentField { PartFieldDefinition = new ContentPartFieldDefinition(new ContentFieldDefinition("FooType"), "FooField", new SettingsDictionary()) };
dynamic item = contentItem;
dynamic part = contentPart;
Assert.That(item.FooPart == null, Is.True);
Assert.That(item.FooPart != null, Is.False);
contentItem.Weld(contentPart);
Assert.That(item.FooPart == null, Is.False);
Assert.That(item.FooPart != null, Is.True);
Assert.That(item.FooPart, Is.SameAs(contentPart));
Assert.That(part.FooField == null, Is.True);
Assert.That(part.FooField != null, Is.False);
Assert.That(item.FooPart.FooField == null, Is.True);
Assert.That(item.FooPart.FooField != null, Is.False);
contentPart.Weld(contentField);
Assert.That(part.FooField == null, Is.False);
Assert.That(part.FooField != null, Is.True);
Assert.That(item.FooPart.FooField == null, Is.False);
Assert.That(item.FooPart.FooField != null, Is.True);
Assert.That(part.FooField, Is.SameAs(contentField));
Assert.That(item.FooPart.FooField, Is.SameAs(contentField));
}
}
}

View File

@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Linq;
using FluentNHibernate;
using FluentNHibernate.Automapping;
using FluentNHibernate.Automapping.Alterations;
using FluentNHibernate.Cfg;
using FluentNHibernate.Diagnostics;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using Orchard.Data;
using Orchard.Data.Providers;
using Orchard.Environment.ShellBuilders.Models;
namespace Orchard.Tests.DataMigration.SQLite {
public static class SQLiteDataUtility {
public static ISessionFactory CreateSessionFactory(string fileName, params Type[] types) {
//var persistenceModel = AutoMap.Source(new Types(types))
// .Alterations(alt => AddAlterations(alt, types))
// .Conventions.AddFromAssemblyOf<DataModule>();
var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name, Type = t }).ToList());
var persistenceConfigurer = new SQLiteDataServicesProvider(fileName).GetPersistenceConfigurer(true/*createDatabase*/);
return Fluently.Configure()
.Database(persistenceConfigurer)
.Mappings(m => m.AutoMappings.Add(persistenceModel))
.ExposeConfiguration(c => {
// This is to work around what looks to be an issue in the NHibernate driver:
// When inserting a row with IDENTITY column, the "SELET @@IDENTITY" statement
// is issued as a separate command. By default, it is also issued in a separate
// connection, which is not supported (returns NULL).
c.SetProperty("connection.release_mode", "on_close");
new SchemaExport(c).Create(false /*script*/, true /*export*/);
})
.BuildSessionFactory();
}
private static void AddAlterations(AutoMappingAlterationCollection alterations, IEnumerable<Type> types) {
foreach (var assembly in types.Select(t => t.Assembly).Distinct()) {
alterations.Add(new AutoMappingOverrideAlteration(assembly));
alterations.AddFromAssembly(assembly);
}
alterations.AddFromAssemblyOf<DataModule>();
}
public static ISessionFactory CreateSessionFactory(params Type[] types) {
return CreateSessionFactory(
types.Aggregate("db", (n, t) => t.FullName + "." + n),
types);
}
#region Nested type: Types
private class Types : ITypeSource {
private readonly IEnumerable<Type> _types;
public Types(params Type[] types) {
_types = types;
}
#region ITypeSource Members
public IEnumerable<Type> GetTypes() {
return _types;
}
public void LogSource(IDiagnosticLogger logger) {
throw new NotImplementedException();
}
public string GetIdentifier() {
throw new NotImplementedException();
}
#endregion
}
#endregion
}
}

View File

@@ -0,0 +1,210 @@
using System;
using System.Data;
using System.Linq;
using Autofac;
using NHibernate;
using NUnit.Framework;
using Orchard.Data;
using Orchard.Data.Migration.Interpreters;
using Orchard.Data.Migration.Schema;
using Orchard.Data.Providers;
using Orchard.Environment;
using Orchard.Environment.Configuration;
using Orchard.Environment.ShellBuilders.Models;
using Orchard.FileSystems.AppData;
using Orchard.Reports.Services;
using Orchard.Tests.ContentManagement;
using System.IO;
using Orchard.Tests.Environment;
using Orchard.Tests.FileSystems.AppData;
using Orchard.Tests.Stubs;
namespace Orchard.Tests.DataMigration.SQLite {
[TestFixture]
public class SQLiteSchemaBuilderTestsBase {
private IContainer _container;
private ISessionFactory _sessionFactory;
private string _databaseFileName;
private string _tempFolder;
private SchemaBuilder _schemaBuilder;
private DefaultDataMigrationInterpreter _interpreter;
private ISession _session;
[SetUp]
public void Setup() {
_databaseFileName = Path.GetTempFileName();
_sessionFactory = SQLiteDataUtility.CreateSessionFactory(_databaseFileName);
_tempFolder = Path.GetTempFileName();
File.Delete(_tempFolder);
var appDataFolder = AppDataFolderTests.CreateAppDataFolder(_tempFolder);
var builder = new ContainerBuilder();
_session = _sessionFactory.OpenSession();
builder.RegisterInstance(appDataFolder).As<IAppDataFolder>();
builder.RegisterType<SQLiteDataServicesProvider>().As<IDataServicesProvider>();
builder.RegisterType<DataServicesProviderFactory>().As<IDataServicesProviderFactory>();
builder.RegisterType<DefaultDataMigrationInterpreter>().As<IDataMigrationInterpreter>();
builder.RegisterType<SQLiteCommandInterpreter>().As<ICommandInterpreter>();
builder.RegisterType<SessionConfigurationCache>().As<ISessionConfigurationCache>();
builder.RegisterType<SessionFactoryHolder>().As<ISessionFactoryHolder>();
builder.RegisterType<DefaultDatabaseCacheConfiguration>().As<IDatabaseCacheConfiguration>();
builder.RegisterType<StubHostEnvironment>().As<IHostEnvironment>();
builder.RegisterInstance(new ShellBlueprint { Records = Enumerable.Empty<RecordBlueprint>() }).As<ShellBlueprint>();
builder.RegisterInstance(new ShellSettings { Name = "temp", DataProvider = "SQLite", DataTablePrefix = "TEST" }).As<ShellSettings>();
builder.RegisterType<DialectService>().As<IDialectService>();
builder.RegisterType<StubWorkContextAccessor>().As<IWorkContextAccessor>();
builder.RegisterModule(new DataModule());
_container = builder.Build();
_interpreter = _container.Resolve<IDataMigrationInterpreter>() as DefaultDataMigrationInterpreter;
_schemaBuilder = new SchemaBuilder(_interpreter);
}
[Test]
public void AllMethodsShouldBeCalledSuccessfully() {
_schemaBuilder
.CreateTable("User", table => table
.ContentPartRecord()
.Column("Firstname", DbType.String, column => column.WithLength(255))
.Column("Lastname", DbType.String, column => column.WithPrecision(0).WithScale(1)))
.CreateTable("Address", table => table
.ContentPartVersionRecord()
.Column("City", DbType.String)
.Column("ZIP", DbType.Int32, column => column.Unique())
.Column("UserId", DbType.Int32, column => column.NotNull()))
.CreateForeignKey("User_Address", "Address", new[] { "UserId" }, "User", new[] { "Id" })
.AlterTable("User", table => table
.AddColumn("Age", DbType.Int32))
.AlterTable("User", table => table
.DropColumn("Lastname"))
.AlterTable("User", table => table
.CreateIndex("IDX_XYZ", "Firstname"))
.AlterTable("User", table => table
.DropIndex("IDX_XYZ"))
.DropForeignKey("Address", "User_Address")
.DropTable("Address");
}
[Test]
public void CreateCommandShouldBeHandled() {
_schemaBuilder
.CreateTable("User", table => table
.Column("Id", DbType.Int32, column => column.PrimaryKey().Identity())
.Column("Firstname", DbType.String, column => column.WithLength(255))
.Column("Lastname", DbType.String, column => column.WithLength(100).NotNull())
.Column("SN", DbType.AnsiString, column => column.WithLength(40).Unique())
.Column("Salary", DbType.Decimal, column => column.WithPrecision(9).WithScale(2))
.Column("Gender", DbType.Decimal, column => column.WithDefault(""))
);
}
[Test]
public void DropTableCommandShouldBeHandled() {
_schemaBuilder
.CreateTable("User", table => table
.Column("Id", DbType.Int32, column => column.PrimaryKey().Identity())
.Column("Firstname", DbType.String, column => column.WithLength(255))
.Column("Lastname", DbType.String, column => column.WithLength(100).NotNull())
.Column("SN", DbType.AnsiString, column => column.WithLength(40).Unique())
.Column("Salary", DbType.Decimal, column => column.WithPrecision(9).WithScale(2))
.Column("Gender", DbType.Decimal, column => column.WithDefault(""))
);
_schemaBuilder
.DropTable("User");
}
[Test]
public void CustomSqlStatementsShouldBeHandled() {
_schemaBuilder
.ExecuteSql("select 1");
}
[Test]
public void AlterTableCommandShouldBeHandled() {
_schemaBuilder
.CreateTable("User", table => table
.Column("Firstname", DbType.String, column => column.WithLength(255))
.Column("Lastname", DbType.String, column => column.WithLength(100).NotNull()))
.AlterTable("User", table => table
.AddColumn("Age", DbType.Int32))
.AlterTable("User", table => table
.AlterColumn("Lastname", column => column.WithDefault("Doe")))
.AlterTable("User", table => table
.DropColumn("Firstname")
);
// creating a new row should assign a default value to Firstname and Age
_schemaBuilder.ExecuteSql("insert into TEST_User DEFAULT VALUES;");
// ensure we have one record with the default value
var query = _session.CreateSQLQuery("SELECT count() FROM TEST_User WHERE Lastname = 'Doe'");
Assert.That(query.UniqueResult<long>(), Is.EqualTo(1));
// ensure this is not a false positive
query = _session.CreateSQLQuery("SELECT count(*) FROM TEST_User WHERE Lastname = 'Foo'");
Assert.That(query.UniqueResult<long>(), Is.EqualTo(0));
}
[Test]
public void ForeignKeyShouldBeCreatedAndRemoved() {
_schemaBuilder
.CreateTable("User", table => table
.Column("Id", DbType.Int32, column => column.PrimaryKey().Identity())
.Column("Firstname", DbType.String, column => column.WithLength(255))
.Column("Lastname", DbType.String, column => column.WithPrecision(0).WithScale(1)))
.CreateTable("Address", table => table
.Column("City", DbType.String)
.Column("ZIP", DbType.Int32, column => column.Unique())
.Column("UserId", DbType.Int32, column => column.NotNull()))
.CreateForeignKey("FK_User", "Address", new[] { "UserId" }, "User", new[] { "Id" })
.DropForeignKey("Address", "FK_User");
}
[Test]
public void ShouldAllowFieldSizeAlteration() {
_schemaBuilder
.CreateTable("ContentItemRecord", table => table
.Column("Id", DbType.Int32, column => column.PrimaryKey().Identity())
.Column("Data", DbType.String, column => column.WithLength(255)));
// should write successfully less than 255 chars
_schemaBuilder
.ExecuteSql("insert into TEST_ContentItemRecord (Data) values('Hello World')");
_schemaBuilder
.AlterTable("ContentItemRecord", table => table
.AlterColumn("Data", column => column.WithType(DbType.String).WithLength(2048)));
// should write successfully a bigger value now
_schemaBuilder
.ExecuteSql(String.Format("insert into TEST_ContentItemRecord (Data) values('{0}')", new String('x', 2048)));
}
[Test]
public void PrecisionAndScaleAreApplied() {
_schemaBuilder
.CreateTable("Product", table => table
.Column("Price", DbType.Decimal, column => column.WithPrecision(19).WithScale(9))
);
_schemaBuilder
.ExecuteSql(String.Format("INSERT INTO TEST_Product (Price) VALUES ({0})", "123456.123456789"));
var query = _session.CreateSQLQuery("SELECT MAX(Price) FROM TEST_Product");
Assert.That(query.UniqueResult(), Is.EqualTo(123456.123456789m));
}
}
}

View File

@@ -24,7 +24,7 @@ namespace Orchard.Tests {
protected string _databaseFilePath;
protected ISessionFactory _sessionFactory;
protected StubClock _clock;
protected ShellSettings _shellSettings;
[TestFixtureSetUp]
public void InitFixture() {
@@ -47,9 +47,10 @@ namespace Orchard.Tests {
builder.RegisterType<InfosetHandler>().As<IContentHandler>();
builder.RegisterInstance(new StubLocator(_session)).As<ISessionLocator>();
builder.RegisterInstance(_clock).As<IClock>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterInstance(new ShellSettings { Name = ShellSettings.DefaultName, DataProvider = "SqlCe" });
builder.RegisterInstance(new TestTransactionManager(_session)).As<ITransactionManager>();
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
builder.RegisterInstance(_shellSettings = new ShellSettings { Name = ShellSettings.DefaultName, DataProvider = "SqlCe" });
builder.RegisterType<TestTransactionManager>().As<ITransactionManager>().InstancePerLifetimeScope();
builder.Register(context => _sessionFactory.OpenSession()).As<ISession>().InstancePerLifetimeScope();
Register(builder);
_container = builder.Build();

View File

@@ -25,7 +25,6 @@ using Orchard.Tests.Stubs;
using Orchard.Tests.Utility;
using Orchard.WebApi.Routes;
using IModelBinderProvider = Orchard.Mvc.ModelBinders.IModelBinderProvider;
using Orchard.Tasks;
namespace Orchard.Tests.Environment {
[TestFixture]
@@ -96,6 +95,10 @@ namespace Orchard.Tests.Environment {
var ext = new ExtensionDescriptor { Id = "Orchard.Framework" };
ext.Features = new[] { new FeatureDescriptor { Extension = ext, Id = ext.Id } };
yield return ext;
var settings = new ExtensionDescriptor { Id = "Settings" };
settings.Features = new[] { new FeatureDescriptor { Extension = settings, Id = settings.Id } };
yield return settings;
}
public IEnumerable<FeatureDescriptor> AvailableFeatures() {
@@ -139,8 +142,6 @@ namespace Orchard.Tests.Environment {
}
}
[Test, Ignore("containers are disposed when calling BeginRequest, maybe by the StubVirtualPathMonitor")]
public void NormalDependenciesShouldBeUniquePerRequestContainer() {
var host = _lifetime.Resolve<IOrchardHost>();
@@ -180,6 +181,7 @@ namespace Orchard.Tests.Environment {
Assert.That(again2a, Is.SameAs(dep2a));
Assert.That(again2b, Is.SameAs(dep2b));
}
[Test]
public void SingletonDependenciesShouldBeUniquePerShell() {
var host = _lifetime.Resolve<IOrchardHost>();
@@ -203,6 +205,7 @@ namespace Orchard.Tests.Environment {
Assert.That(dep2, Is.SameAs(dep2a));
Assert.That(dep2, Is.SameAs(dep2b));
}
[Test]
public void TransientDependenciesShouldBeUniquePerResolve() {
var host = _lifetime.Resolve<IOrchardHost>();

View File

@@ -28,13 +28,6 @@ namespace Orchard.Tests.Environment {
container.Mock<IHttpContextAccessor>()
.Setup(x => x.Current())
.Returns(() => _httpContextCurrent);
container.Mock<IHttpContextAccessor>()
.Setup(x => x.CreateContext(It.IsAny<ILifetimeScope>()))
.Returns(() => new StubHttpContext());
container.Mock<IWorkContextEvents>()
.Setup(x => x.Started());
}
[Test]

View File

@@ -206,7 +206,7 @@ Features:
Category: Content types
AnotherWiki Editor:
Description: A rich editor for wiki contents.
Dependencies: TinyMCE, AnotherWiki
Dependencies: TinyMce, AnotherWiki
Category: Input methods
AnotherWiki DistributionList:
Description: Sends e-mail alerts when wiki contents gets published.
@@ -241,7 +241,7 @@ Features:
Assert.That(featureDescriptor.Description, Is.EqualTo("A rich editor for wiki contents."));
Assert.That(featureDescriptor.Category, Is.EqualTo("Input methods"));
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
Assert.That(featureDescriptor.Dependencies.Contains("TinyMCE"));
Assert.That(featureDescriptor.Dependencies.Contains("TinyMce"));
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
break;
case "AnotherWiki DistributionList":
@@ -287,7 +287,7 @@ Category: Content types
Features:
AnotherWiki Editor:
Description: A rich editor for wiki contents.
Dependencies: TinyMCE, AnotherWiki
Dependencies: TinyMce, AnotherWiki
Category: Input methods
AnotherWiki DistributionList:
Description: Sends e-mail alerts when wiki contents gets published.
@@ -323,7 +323,7 @@ Features:
Assert.That(featureDescriptor.Description, Is.EqualTo("A rich editor for wiki contents."));
Assert.That(featureDescriptor.Category, Is.EqualTo("Input methods"));
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
Assert.That(featureDescriptor.Dependencies.Contains("TinyMCE"));
Assert.That(featureDescriptor.Dependencies.Contains("TinyMce"));
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
break;
case "AnotherWiki DistributionList":

View File

@@ -207,7 +207,7 @@ Features:
Category: Content types
AnotherWiki Editor:
Description: A rich editor for wiki contents.
Dependencies: TinyMCE, AnotherWiki
Dependencies: TinyMce, AnotherWiki
Category: Input methods
AnotherWiki DistributionList:
Description: Sends e-mail alerts when wiki contents gets published.
@@ -243,7 +243,7 @@ Features:
Assert.That(featureDescriptor.Description, Is.EqualTo("A rich editor for wiki contents."));
Assert.That(featureDescriptor.Category, Is.EqualTo("Input methods"));
Assert.That(featureDescriptor.Dependencies.Count(), Is.EqualTo(2));
Assert.That(featureDescriptor.Dependencies.Contains("TinyMCE"));
Assert.That(featureDescriptor.Dependencies.Contains("TinyMce"));
Assert.That(featureDescriptor.Dependencies.Contains("AnotherWiki"));
break;
case "AnotherWiki DistributionList":

View File

@@ -0,0 +1,118 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Autofac;
using Moq;
using NUnit.Framework;
using Orchard.Environment.Configuration;
using Orchard.Environment.Descriptor.Models;
using Orchard.Environment.Extensions;
using Orchard.Environment.Extensions.Models;
using Orchard.Environment.ShellBuilders;
using Orchard.Tests.Environment.TestDependencies;
using Orchard.Utility.Extensions;
namespace Orchard.Tests.Environment.ShellBuilders {
[TestFixture]
public class CompositionStrategyTests : ContainerTestBase {
private CompositionStrategy _compositionStrategy;
private Mock<IExtensionManager> _extensionManager;
protected override void Register(ContainerBuilder builder) {
_extensionManager = new Mock<IExtensionManager>(MockBehavior.Loose);
builder.RegisterType<CompositionStrategy>().AsSelf();
builder.RegisterInstance(_extensionManager.Object);
}
protected override void Resolve(ILifetimeScope container) {
_compositionStrategy = container.Resolve<CompositionStrategy>();
var alphaExtension = new ExtensionDescriptor {
Id = "Alpha",
Name = "Alpha",
ExtensionType = "Module"
};
var alphaFeatureDescriptor = new FeatureDescriptor {
Id = "Alpha",
Name = "Alpha",
Extension = alphaExtension
};
var betaFeatureDescriptor = new FeatureDescriptor {
Id = "Beta",
Name = "Beta",
Extension = alphaExtension,
Dependencies = new List<string> {
"Alpha"
}
};
alphaExtension.Features = new List<FeatureDescriptor> {
alphaFeatureDescriptor,
betaFeatureDescriptor
};
var features = new List<Feature> {
new Feature {
Descriptor = alphaFeatureDescriptor,
ExportedTypes = new List<Type> {
typeof(AlphaDependency)
}
},
new Feature {
Descriptor = betaFeatureDescriptor,
ExportedTypes = new List<Type> {
typeof(BetaDependency)
}
}
};
_extensionManager.Setup(x => x.AvailableExtensions()).Returns(new List<ExtensionDescriptor> {
alphaExtension
});
_extensionManager.Setup(x => x.AvailableFeatures()).Returns(
_extensionManager.Object.AvailableExtensions()
.SelectMany(ext => ext.Features)
.ToReadOnlyCollection());
_extensionManager.Setup(x => x.LoadFeatures(It.IsAny<IEnumerable<FeatureDescriptor>>())).Returns(features);
}
[Test]
public void ComposeReturnsBlueprintWithExpectedDependencies() {
var shellSettings = CreateShell();
var shellDescriptor = CreateShellDescriptor("Alpha", "Beta");
var shellBlueprint = _compositionStrategy.Compose(shellSettings, shellDescriptor);
Assert.That(shellBlueprint.Dependencies.Count(x => x.Type == typeof (AlphaDependency)), Is.EqualTo(1));
Assert.That(shellBlueprint.Dependencies.Count(x => x.Type == typeof(BetaDependency)), Is.EqualTo(1));
}
[Test]
public void ComposeReturnsBlueprintWithAutoEnabledDependencyFeatures() {
var shellSettings = CreateShell();
var shellDescriptor = CreateShellDescriptor("Beta"); // Beta has a dependency on Alpha, but is not enabled initially.
var shellBlueprint = _compositionStrategy.Compose(shellSettings, shellDescriptor);
Assert.That(shellBlueprint.Dependencies.Count(x => x.Type == typeof(AlphaDependency)), Is.EqualTo(1));
Assert.That(shellDescriptor.Features.Count(x => x.Name == "Alpha"), Is.EqualTo(1));
}
private ShellSettings CreateShell() {
return new ShellSettings();
}
private ShellDescriptor CreateShellDescriptor(params string[] enabledFeatures) {
var shellDescriptor = new ShellDescriptor {
Features = enabledFeatures.Select(x => new ShellFeature {
Name = x
})
};
return shellDescriptor;
}
}
}

View File

@@ -56,11 +56,7 @@ namespace Orchard.Tests.Environment.ShellBuilders {
_container.Mock<IHttpContextAccessor>()
.Setup(x => x.Current())
.Returns(httpContext);
_container.Mock<IHttpContextAccessor>()
.Setup(x => x.CreateContext(It.IsAny<ILifetimeScope>()))
.Returns(httpContext);
.Returns(default(HttpContextBase));
var factory = _container.Resolve<IShellContextFactory>();

View File

@@ -43,10 +43,6 @@ namespace Orchard.Tests.Environment.State {
_container.Mock<IHttpContextAccessor>()
.Setup(x=>x.Current())
.Returns(httpContext);
_container.Mock<IHttpContextAccessor>()
.Setup(x => x.CreateContext(It.IsAny<ILifetimeScope>()))
.Returns(httpContext);
}
[TearDown]

View File

@@ -0,0 +1,8 @@
namespace Orchard.Tests.Environment.TestDependencies {
public interface IAlphaDependency : IDependency {
}
public class AlphaDependency : IAlphaDependency {
}
}

View File

@@ -0,0 +1,13 @@
namespace Orchard.Tests.Environment.TestDependencies {
public interface IBetaDependency : IDependency {
}
public class BetaDependency : IBetaDependency {
public IAlphaDependency Alpha { get; set; }
public BetaDependency(IAlphaDependency alpha) {
Alpha = alpha;
}
}
}

View File

@@ -120,6 +120,9 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.SQLite">
<HintPath>..\..\lib\sqlite\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
<Private>True</Private>
@@ -215,6 +218,8 @@
<Compile Include="DatabaseEnabledTestsBase.cs" />
<Compile Include="DataMigration\SchemaBuilderTests.cs" />
<Compile Include="DataMigration\DataMigrationTests.cs" />
<Compile Include="DataMigration\SQLite\SQLiteDataUtility.cs" />
<Compile Include="DataMigration\SQLite\SQLiteSchemaBuilderTestsBase.cs" />
<Compile Include="DataMigration\Utilities\NullInterpreter.cs" />
<Compile Include="DataUtility.cs" />
<Compile Include="Data\Builders\SessionFactoryBuilderTests.cs" />
@@ -245,9 +250,12 @@
<Compile Include="Environment\Extensions\ExtensionLoaderCoordinatorTests.cs" />
<Compile Include="Environment\Features\FeatureManagerTests.cs" />
<Compile Include="Environment\Loaders\DynamicExtensionLoaderTests.cs" />
<Compile Include="Environment\ShellBuilders\CompositionStrategyTests.cs" />
<Compile Include="Environment\State\DefaultProcessingEngineTests.cs" />
<Compile Include="Environment\RunningShellTableTests.cs" />
<Compile Include="Environment\StubHostEnvironment.cs" />
<Compile Include="Environment\TestDependencies\AlphaDependency.cs" />
<Compile Include="Environment\TestDependencies\BetaDependency.cs" />
<Compile Include="Environment\Utility\Build.cs" />
<Compile Include="Environment\Warmup\WarmupUtilityTests.cs" />
<Compile Include="FileSystems\AppData\AppDataFolderTests.cs" />
@@ -269,6 +277,7 @@
<Compile Include="Localization\DateTimePartsTests.cs" />
<Compile Include="Localization\DefaultDateLocalizationServicesTests.cs" />
<Compile Include="Localization\DefaultDateFormatterTests.cs" />
<Compile Include="Stubs\StubMachineNameProvider.cs" />
<Compile Include="Stubs\StubCultureSelector.cs" />
<Compile Include="Localization\TestHelpers.cs" />
<Compile Include="Logging\OrchardFileAppenderTests.cs" />
@@ -290,6 +299,7 @@
<Compile Include="Stubs\StubVirtualPathMonitor.cs" />
<Compile Include="Stubs\StubCacheManager.cs" />
<Compile Include="Stubs\StubWebSiteFolder.cs" />
<Compile Include="Tasks\DistributedLockServiceTests.cs" />
<Compile Include="Time\TimeZoneSelectorTests.cs" />
<Compile Include="UI\Resources\ResourceManagerTests.cs" />
<Compile Include="UI\ShapeTests.cs" />
@@ -399,7 +409,16 @@
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(OutputPath)\x86\%(RecursiveDir)" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(OutputPath)\amd64\%(RecursiveDir)" SkipUnchangedFiles="true" />
</Target>
<Target Name="CopySQLiteBinaries">
<ItemGroup>
<SQLiteBinariesx86 Include="$(ProjectDir)..\..\lib\sqlite\x86\**\*" />
<SQLiteBinariesx64 Include="$(ProjectDir)..\..\lib\sqlite\x64\**\*" />
</ItemGroup>
<Copy SourceFiles="@(SQLiteBinariesx86)" DestinationFolder="$(OutputPath)\x86\%(RecursiveDir)" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SQLiteBinariesx64)" DestinationFolder="$(OutputPath)\amd64\%(RecursiveDir)" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="CopySqlCeBinaries" />
<CallTarget Targets="CopySQLiteBinaries" />
</Target>
</Project>

View File

@@ -1,5 +1,4 @@
using System.Web;
using Autofac;
using Orchard.Mvc;
namespace Orchard.Tests.Stubs {
@@ -17,10 +16,6 @@ namespace Orchard.Tests.Stubs {
return _httpContext;
}
public HttpContextBase CreateContext(ILifetimeScope lifetimeScope) {
return _httpContext;
}
public void Set(HttpContextBase httpContext) {
_httpContext = httpContext;
}

View File

@@ -0,0 +1,13 @@
using Orchard.Environment;
namespace Orchard.Tests.Stubs {
public class StubMachineNameProvider : IMachineNameProvider {
public StubMachineNameProvider() {
MachineName = "Orchard Machine";
}
public string MachineName { get; set; }
public string GetMachineName() {
return MachineName;
}
}
}

View File

@@ -0,0 +1,272 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Autofac;
using NUnit.Framework;
using Orchard.Data;
using Orchard.Environment;
using Orchard.Environment.Configuration;
using Orchard.Services;
using Orchard.Tasks.Locking.Records;
using Orchard.Tasks.Locking.Services;
using Orchard.Tests.Stubs;
namespace Orchard.Tests.Tasks {
[TestFixture]
public class DistributedLockServiceTests : DatabaseEnabledTestsBase {
private const string LockName = "Orchard Test Lock";
private DistributedLockService _distributedLockService;
private StubMachineNameProvider _machineNameProvider;
private IRepository<DistributedLockRecord> _distributedLockRepository;
private ITransactionManager _transactionManager;
protected override IEnumerable<Type> DatabaseTypes {
get { yield return typeof(DistributedLockRecord); }
}
public override void Register(ContainerBuilder builder) {
builder.RegisterType<StubClock>().As<IClock>();
builder.RegisterType<StubMachineNameProvider>().As<IMachineNameProvider>().SingleInstance();
builder.RegisterType<DistributedLockService>().AsSelf();
}
public override void Init() {
base.Init();
_distributedLockService = _container.Resolve<DistributedLockService>();
_machineNameProvider = (StubMachineNameProvider)_container.Resolve<IMachineNameProvider>();
_distributedLockRepository = _container.Resolve<IRepository<DistributedLockRecord>>();
_transactionManager = _container.Resolve<ITransactionManager>();
}
[Test]
public void TryAcquiringLockTwiceOnSameMachineSucceeds() {
IDistributedLock @lock;
var attempt1 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
var attempt2 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
Assert.That(attempt1, Is.True);
Assert.That(attempt2, Is.True);
}
[Test]
public void AcquiringTheLockOnTheSameMachineReturnsTheSameLock() {
IDistributedLock lock1, lock2;
_distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out lock1);
_distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out lock2);
Assert.AreEqual(lock1, lock2);
}
[Test]
public void ReleasingSingleLockDeletesRecord() {
IDistributedLock lock1;
_distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out lock1);
lock1.Dispose();
var lockRecord = _distributedLockRepository.Table.FirstOrDefault();
Assert.That(lockRecord, Is.Null);
}
[Test]
public void ReleasingFirstLockDoesntDeleteRecord() {
IDistributedLock lock1, lock2;
_distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out lock1);
_distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out lock2);
lock1.Dispose();
var lockRecord = _distributedLockRepository.Table.FirstOrDefault();
Assert.That(lockRecord, Is.Not.Null);
lock2.Dispose();
lockRecord = _distributedLockRepository.Table.FirstOrDefault();
Assert.That(lockRecord, Is.Null);
}
[Test]
public void TryAcquiringLockTwiceFails() {
_distributedLockService.DisableMonitorLock = true;
IDistributedLock @lock;
_machineNameProvider.MachineName = "Orchard Test Machine 1";
var attempt1 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
_machineNameProvider.MachineName = "Orchard Test Machine 2";
var attempt2 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
Assert.That(attempt1, Is.True);
Assert.That(attempt2, Is.False);
}
[Test]
public void TryAcquiringNonExpiredActiveLockFails() {
IDistributedLock @lock;
CreateNonExpiredActiveLock("Other Machine");
var success = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromHours(1), out @lock);
Assert.That(success, Is.False);
}
[Test]
public void TryAcquiringNonExpiredButInactiveLockFromOtherMachineFails() {
IDistributedLock @lock;
CreateNonExpiredActiveLock("Other Machine");
var success = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromHours(1), out @lock);
Assert.That(success, Is.False);
}
[Test]
public void TryAcquiringNonExpiredButInactiveLockFromSameMachineSucceeds() {
IDistributedLock @lock;
CreateNonExpiredActiveLock("Orchard Machine");
var success = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromHours(1), out @lock);
Assert.That(success, Is.True);
}
[Test]
public void TryAcquiringExpiredButActiveLockSucceeds() {
IDistributedLock @lock;
CreateExpiredButActiveLock("Other Machine");
var success = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromHours(1), out @lock);
Assert.That(success, Is.True);
}
[Test]
public void TryAcquiringNonExpiredAndActiveLockFromCurrentOwnerSucceeds() {
IDistributedLock @lock;
CreateNonExpiredActiveLock(GetMachineName());
var success = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromHours(1), out @lock);
Assert.That(success, Is.True);
}
[Test]
public void AcquiringNonExpiredAndActiveLockFromDifferentOwnerThrowsTimeoutException() {
CreateNonExpiredActiveLock("Other Machine");
Assert.Throws<TimeoutException>(() => _distributedLockService.AcquireLock(LockName, TimeSpan.FromHours(1), TimeSpan.Zero));
}
[Test]
public void MultipleAcquisitionsFromDifferentMachinesShouldFail() {
IDistributedLock @lock;
_distributedLockService.DisableMonitorLock = true;
_machineNameProvider.MachineName = "Orchard Test Machine 1";
var attempt1 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
_machineNameProvider.MachineName = "Orchard Test Machine 2";
var attempt2 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
Assert.That(attempt1, Is.True);
Assert.That(attempt2, Is.False);
}
[Test]
public void MultipleAcquisitionsFromDifferentMachinesOnDifferentTenantShouldSucceed() {
IDistributedLock @lock;
_distributedLockService.DisableMonitorLock = true;
_machineNameProvider.MachineName = "Orchard Test Machine 1";
var attempt1 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
_machineNameProvider.MachineName = "Orchard Test Machine 2";
_shellSettings.Name = "Foo";
var attempt2 = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromSeconds(60), out @lock);
Assert.That(attempt1, Is.True);
Assert.That(attempt2, Is.True);
}
[Test]
public void MultithreadedAcquisitionsShouldNotCauseTransactionErrors() {
var tasks = new List<Task>();
for (var i = 0; i < 10; i++) {
var task = Task.Factory.StartNew(() => {
IDistributedLock @lock;
Assert.DoesNotThrow(() => _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromHours(1), out @lock));
});
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
}
[Test]
public void TryAcquireActiveLockWithNullTimeoutReturnsFalseImmediately() {
// Disable monitor locking to simulate concurrent requests
_distributedLockService.DisableMonitorLock = true;
CreateNonExpiredActiveLock("Other Machine");
IDistributedLock @lock;
var acquired = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromMinutes(1), out @lock);
Assert.That(acquired, Is.False);
}
[Test]
public void ActiveLockWithUndefinedValidUntilNeverExpires() {
// Disable monitor locking to simulate concurrent requests
_distributedLockService.DisableMonitorLock = true;
CreateNonExpiredActiveLockThatNeverExpires("Other Machine");
_clock.Advance(DateTime.MaxValue - _clock.UtcNow); // Fast forward to the End of Time.
IDistributedLock @lock;
var acquired = _distributedLockService.TryAcquireLock(LockName, TimeSpan.FromMinutes(1), out @lock);
Assert.That(acquired, Is.False);
}
[Test]
public void ActiveLockWithUndefinedValidUntilNeverExpiresUntilReleased() {
IDistributedLock @lock;
// Create a never expiring lock.
_machineNameProvider.MachineName = "Orchard Test Machine 1";
var attempt1 = _distributedLockService.TryAcquireLock(LockName, maxValidFor: null, timeout: null, l: out @lock);
// Release the lock.
_distributedLockService.ReleaseDistributedLock((DistributedLock)@lock);
// Acquire the lock from another machine.
_machineNameProvider.MachineName = "Orchard Test Machine 2";
var attempt2 = _distributedLockService.TryAcquireLock(LockName, maxValidFor: null, timeout: null, l: out @lock);
// Validate the results.
Assert.That(attempt1, Is.True);
Assert.That(attempt2, Is.True);
}
private DistributedLockRecord CreateLockRecord(DateTime createdUtc, DateTime? validUntilUtc, string machineName) {
var record = new DistributedLockRecord {
Name = ShellSettings.DefaultName + ":" + LockName,
CreatedUtc = createdUtc,
ValidUntilUtc = validUntilUtc,
MachineName = machineName,
};
_distributedLockRepository.Create(record);
_transactionManager.RequireNew();
return record;
}
private DistributedLockRecord CreateNonExpiredActiveLock(string machineName) {
var now = _clock.UtcNow;
return CreateLockRecord(now, now + TimeSpan.FromHours(1), machineName);
}
private DistributedLockRecord CreateExpiredButActiveLock(string machineName) {
var now = _clock.UtcNow;
return CreateLockRecord(now, now - TimeSpan.FromHours(1), machineName);
}
private DistributedLockRecord CreateNonExpiredActiveLockThatNeverExpires(string machineName) {
var now = _clock.UtcNow;
return CreateLockRecord(now, null, machineName);
}
private string GetMachineName() {
return _machineNameProvider.GetMachineName();
}
}
}

View File

@@ -23,10 +23,6 @@ namespace Orchard.Tests.Tasks {
.Setup(x => x.Current())
.Returns(() => null);
container.Mock<IHttpContextAccessor>()
.Setup(x => x.CreateContext(It.IsAny<ILifetimeScope>()))
.Returns(() => new StubHttpContext());
container.Mock<IWorkContextEvents>()
.Setup(x => x.Started());
}

View File

@@ -61,10 +61,14 @@ namespace Orchard.Core.Common.Drivers {
}
protected override void Importing(BodyPart part, ContentManagement.Handlers.ImportContentContext context) {
var importedText = context.Attribute(part.PartDefinition.Name, "Text");
if (importedText != null) {
part.Text = importedText;
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
context.ImportAttribute(part.PartDefinition.Name, "Text", importedText =>
part.Text = importedText
);
}
protected override void Exporting(BodyPart part, ContentManagement.Handlers.ExportContentContext context) {

View File

@@ -68,35 +68,35 @@ namespace Orchard.Core.Common.Drivers {
}
protected override void Importing(CommonPart part, ImportContentContext context) {
var owner = context.Attribute(part.PartDefinition.Name, "Owner");
if (owner != null) {
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
context.ImportAttribute(part.PartDefinition.Name, "Owner", owner => {
var contentIdentity = new ContentIdentity(owner);
part.Owner = _membershipService.GetUser(contentIdentity.Get("User.UserName"));
}
// use the super user if the referenced one doesn't exist
else {
part.Owner = _membershipService.GetUser(Services.WorkContext.CurrentSite.SuperUser);
}
var container = context.Attribute(part.PartDefinition.Name, "Container");
if (container != null) {
part.Container = context.GetItemFromSession(container);
}
// use the super user if the referenced one doesn't exist;
part.Owner =
_membershipService.GetUser(contentIdentity.Get("User.UserName"))
?? _membershipService.GetUser(Services.WorkContext.CurrentSite.SuperUser);
});
var createdUtc = context.Attribute(part.PartDefinition.Name, "CreatedUtc");
if (createdUtc != null) {
part.CreatedUtc = XmlConvert.ToDateTime(createdUtc, XmlDateTimeSerializationMode.Utc);
}
context.ImportAttribute(part.PartDefinition.Name, "Container", container =>
part.Container = context.GetItemFromSession(container)
);
var publishedUtc = context.Attribute(part.PartDefinition.Name, "PublishedUtc");
if (publishedUtc != null) {
part.PublishedUtc = XmlConvert.ToDateTime(publishedUtc, XmlDateTimeSerializationMode.Utc);
}
context.ImportAttribute(part.PartDefinition.Name, "CreatedUtc", createdUtc =>
part.CreatedUtc = XmlConvert.ToDateTime(createdUtc, XmlDateTimeSerializationMode.Utc)
);
var modifiedUtc = context.Attribute(part.PartDefinition.Name, "ModifiedUtc");
if (modifiedUtc != null) {
part.ModifiedUtc = XmlConvert.ToDateTime(modifiedUtc, XmlDateTimeSerializationMode.Utc);
}
context.ImportAttribute(part.PartDefinition.Name, "PublishedUtc", publishedUtc =>
part.PublishedUtc = XmlConvert.ToDateTime(publishedUtc, XmlDateTimeSerializationMode.Utc)
);
context.ImportAttribute(part.PartDefinition.Name, "ModifiedUtc", modifiedUtc =>
part.ModifiedUtc = XmlConvert.ToDateTime(modifiedUtc, XmlDateTimeSerializationMode.Utc)
);
}
protected override void Exporting(CommonPart part, ExportContentContext context) {

View File

@@ -15,10 +15,14 @@ namespace Orchard.Core.Common.Drivers {
}
protected override void Importing(IdentityPart part, ContentManagement.Handlers.ImportContentContext context) {
var identity = context.Attribute(part.PartDefinition.Name, "Identifier");
if (identity != null) {
part.Identifier = identity;
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
context.ImportAttribute(part.PartDefinition.Name, "Identifier", identity =>
part.Identifier = identity
);
}
protected override void Exporting(IdentityPart part, ContentManagement.Handlers.ExportContentContext context) {

View File

@@ -82,6 +82,11 @@ namespace Orchard.Core.Containers.Drivers {
}
protected override void Importing(ContainablePart part, ImportContentContext context) {
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
context.ImportAttribute(part.PartDefinition.Name, "Position", s => part.Position = XmlConvert.ToInt32(s));
}

View File

@@ -129,12 +129,16 @@ namespace Orchard.Core.Containers.Drivers {
}
protected override void Importing(ContainerPart part, ImportContentContext context) {
var itemContentType = context.Attribute(part.PartDefinition.Name, "ItemContentTypes");
if (itemContentType != null) {
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
context.ImportAttribute(part.PartDefinition.Name, "ItemContentTypes", itemContentType => {
if (_contentDefinitionManager.GetTypeDefinition(itemContentType) != null) {
part.Record.ItemContentTypes = itemContentType;
}
}
});
context.ImportAttribute(part.PartDefinition.Name, "ItemsShown", s => part.ItemsShown = XmlConvert.ToBoolean(s));
context.ImportAttribute(part.PartDefinition.Name, "Paginated", s => part.Paginated = XmlConvert.ToBoolean(s));

View File

@@ -81,23 +81,25 @@ namespace Orchard.Core.Containers.Drivers {
}
protected override void Importing(ContainerWidgetPart part, ImportContentContext context) {
var containerIdentity = context.Attribute(part.PartDefinition.Name, "Container");
if (containerIdentity != null) {
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
context.ImportAttribute(part.PartDefinition.Name, "Container", containerIdentity => {
var container = context.GetItemFromSession(containerIdentity);
if (container != null) {
part.Record.ContainerId = container.Id;
}
}
});
var pageSize = context.Attribute(part.PartDefinition.Name, "PageSize");
if (pageSize != null) {
part.Record.PageSize = Convert.ToInt32(pageSize);
}
context.ImportAttribute(part.PartDefinition.Name, "PageSize", pageSize =>
part.Record.PageSize = Convert.ToInt32(pageSize)
);
var filterByValue = context.Attribute(part.PartDefinition.Name, "FilterByValue");
if (filterByValue != null) {
part.Record.FilterByValue = filterByValue;
}
context.ImportAttribute(part.PartDefinition.Name, "FilterByValue", filterByValue =>
part.Record.FilterByValue = filterByValue
);
}
protected override void Exporting(ContainerWidgetPart part, ExportContentContext context) {

View File

@@ -24,20 +24,22 @@ namespace Orchard.Core.Containers.Drivers {
}
protected override void Importing(CustomPropertiesPart part, ImportContentContext context) {
var customOne = context.Attribute(part.PartDefinition.Name, "CustomOne");
if (customOne != null) {
part.Record.CustomOne = customOne;
// Don't do anything if the tag is not specified.
if (context.Data.Element(part.PartDefinition.Name) == null) {
return;
}
var customTwo = context.Attribute(part.PartDefinition.Name, "CustomTwo");
if (customTwo != null) {
part.Record.CustomTwo = customTwo;
}
context.ImportAttribute(part.PartDefinition.Name, "CustomOne", customOne =>
part.Record.CustomOne = customOne
);
var customThree = context.Attribute(part.PartDefinition.Name, "CustomThree");
if (customThree != null) {
part.Record.CustomThree = customThree;
}
context.ImportAttribute(part.PartDefinition.Name, "CustomTwo", customTwo =>
part.Record.CustomTwo = customTwo
);
context.ImportAttribute(part.PartDefinition.Name, "CustomThree", customThree =>
part.Record.CustomThree = customThree
);
}
protected override void Exporting(CustomPropertiesPart part, ExportContentContext context) {

View File

@@ -4,9 +4,8 @@
@{
ContentItem contentItem = Model.ContentItem;
var typeDisplayName = contentItem.TypeDefinition.DisplayName ?? contentItem.ContentType.CamelFriendly();
var pageTitle = T("New {0}", typeDisplayName);
Layout.Title = (string)pageTitle.Text;
Layout.Title = T("New {0}", Html.Raw(typeDisplayName)).Text;
}
@using (Html.BeginFormAntiForgeryPost(Url.Action("Create", new { ReturnUrl = Request.QueryString["ReturnUrl"] }), FormMethod.Post, new { enctype = "multipart/form-data" })) {

View File

@@ -4,13 +4,13 @@
var pageTitle = T("Manage Content");
var createLinkText = T("Create New Content");
if (!string.IsNullOrWhiteSpace(typeDisplayName)) {
pageTitle = T("Manage {0} Content", typeDisplayName);
createLinkText = T("Create New {0}", typeDisplayName);
pageTitle = T("Manage {0} Content", Html.Raw(typeDisplayName));
createLinkText = T("Create New {0}", Html.Raw(typeDisplayName));
}
IEnumerable<string> cultures = Model.Options.Cultures;
Layout.Title = pageTitle;
Layout.Title = pageTitle.Text;
}
<div class="manage">

Some files were not shown because too many files have changed in this diff Show More