From 18470f1cfec298d21d65731935efaa7182da77e7 Mon Sep 17 00:00:00 2001 From: tarjeieo Date: Fri, 23 Oct 2015 08:50:40 +0200 Subject: [PATCH] Incremental file upload v1 --- .gitignore | 5 +- Sherpa.Installer/InstallationManager.cs | 30 +++++++ Sherpa.Installer/InstallationOperation.cs | 3 +- Sherpa.Installer/Program.cs | 3 + .../customtasks/Sherpa.ExampleCustomTask.dll | Bin 5120 -> 4608 bytes .../customtasks/Sherpa.Library.dll | Bin 67072 -> 134144 bytes .../Deploy/FileListenerAndUploader.cs | 76 +++++++++++++++++ Sherpa.Library/Sherpa.Library.csproj | 1 + .../SiteHierarchy/ContentUploadManager.cs | 78 +++++++++--------- .../SiteHierarchy/SiteSetupManager.cs | 35 +++++++- 10 files changed, 188 insertions(+), 43 deletions(-) create mode 100644 Sherpa.Library/Deploy/FileListenerAndUploader.cs diff --git a/.gitignore b/.gitignore index 9937bee..5ebda46 100644 --- a/.gitignore +++ b/.gitignore @@ -183,4 +183,7 @@ UpgradeLog*.htm *.bim_*.settings # Microsoft Fakes -FakesAssemblies/ \ No newline at end of file +FakesAssemblies/ + +#Sherpa custom tasks +Sherpa.Installer/customtasks/ \ No newline at end of file diff --git a/Sherpa.Installer/InstallationManager.cs b/Sherpa.Installer/InstallationManager.cs index 99a7356..76a3bd6 100644 --- a/Sherpa.Installer/InstallationManager.cs +++ b/Sherpa.Installer/InstallationManager.cs @@ -235,6 +235,18 @@ var fileName in } break; } + case InstallationOperation.FileWatchUploader: + { + if (useConfigurationForInstall) + { + siteSetupManagerFromConfig.StartFileWatching(); + } + else + { + UploadAllChangedFiles(context); + } + break; + } case InstallationOperation.ExportTaxonomy: { ExportTaxonomyGroup(); @@ -260,6 +272,20 @@ var fileName in Log.Debug("Completed installation operation"); } + private void UploadAllChangedFiles(ClientContext context) + { + Log.Debug("Starting UploadAllChangedFiles"); + foreach (var file in Directory.GetFiles(ConfigurationDirectoryPath, "*sitehierarchy.json", SearchOption.AllDirectories)) + { + var sitePersister = new FilePersistanceProvider(file); + + var siteManager = new SiteSetupManager(context, sitePersister.Load(), _rootPath, _incrementalUpload); + + siteManager.StartFileWatching(); + } + + } + private void InstallAllTaxonomy(ClientContext context) { foreach (var file in Directory.GetFiles(ConfigurationDirectoryPath, "*taxonomy.json", SearchOption.AllDirectories)) @@ -499,6 +525,10 @@ public InstallationOperation GetInstallationOperationFromInput(string input) { return InstallationOperation.ForceRecrawl; } + case 666: + { + return InstallationOperation.FileWatchUploader; + } case 0: { return InstallationOperation.ExitApplication; diff --git a/Sherpa.Installer/InstallationOperation.cs b/Sherpa.Installer/InstallationOperation.cs index 1af7411..ede9ca6 100644 --- a/Sherpa.Installer/InstallationOperation.cs +++ b/Sherpa.Installer/InstallationOperation.cs @@ -15,6 +15,7 @@ public enum InstallationOperation ForceRecrawl, Invalid, ExitApplication, - ExecuteCustomTasks + ExecuteCustomTasks, + FileWatchUploader } } diff --git a/Sherpa.Installer/Program.cs b/Sherpa.Installer/Program.cs index b7fe782..ddae74d 100644 --- a/Sherpa.Installer/Program.cs +++ b/Sherpa.Installer/Program.cs @@ -109,12 +109,15 @@ private static void ShowStartScreenAndExecuteCommand() Console.WriteLine("Press 7 to execute custom tasks"); Console.WriteLine("Press 8 to DELETE all sites (except root site)"); Console.WriteLine("Press 9 to DELETE all custom site columns and content types"); + Console.WriteLine("Press 666 to start developer mode: Continuous file upload"); Console.WriteLine("Press 0 to exit application"); Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("Select a number to perform an operation: "); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; var input = Console.ReadLine(); + Console.BackgroundColor = ConsoleColor.Black; + Console.ForegroundColor = ConsoleColor.White; Console.ResetColor(); HandleCommandKeyPress(input); } diff --git a/Sherpa.Installer/customtasks/Sherpa.ExampleCustomTask.dll b/Sherpa.Installer/customtasks/Sherpa.ExampleCustomTask.dll index 3f80f94c7d81c06bfa551961e9401a47c2bf2f26..914f3c0d1b7a547720484f8655570ad235bcf23e 100644 GIT binary patch delta 1698 zcmY*aZERCj7=F%ed)u|6TRXkr+q}5smVP7(P^d@9FBt+nne9JnwnW zd(SzYX`5Mk;+59pzqh3@M_19Rg~Vzg$Og4+9BQAvkP6>#0|s2f7T~sLc1d0Jvp_ZL zhuE>0mME)eM63utS;Z!eN05$*mhf#4i(7bjc~sLUVuh%sA4F?oXFD61dU+`D;hY9s z@dJWpL+fal;_ctS9sxw)o&T2z`B#N3)+X&5PJPg8)-p3A3_;amHfcs#hHBQi%xlhf zSx2kVRxbs5S6MnerU0?Sz*o%2xvp5!v5aEQ=5?@&_nK!O+nvNImN`9QJ-hq5nZL*S z8eTiLHE(8EcZpMoo(2W(ZgE$1Vu36c4P~F}mxHH)OF$T)9#75mCdIY5txbuq6&05x z9>Zy+2EXtm6(3>>XYm2Y9Fq8_wET!`Ld9KWR0-mq2yzRW z(WHd&h(~zBSP3!hQSlQxe~o zcp5e|e25s9;XF2TiRbxisrU?gctbC7jEXoy=w__L4#q|7k8^y9aV3bc)5R1vNTo|U zp1^5#B&FpkiCJDGj=lJv(Z)|`f_J9U9p0)W!Jo-J%@yjvT1xopI(lU%`FQ?Ao!nzr z`M<3fblBIhw%^EDX=^H;*wu&R#2!6^obEg`WSWjE+Y|d43wGAD@&>Ey8aA9f{Tf)l zarfkS+RqKFgUBYu$RLl*^?vdHr8omsv;|w!t<^`|IdibphGT@c z$KOmX{vcH`|5>f4d_bdh{*AQUAEDO+Ee|B8Y)3D|he}1qDCqH&ZrO%ezGz0y4y(Sil*%tS)0!KHR=y&_2rH6$~(+)-Nr!XdCo__1s3<9D{pYVxf;97qN5*h z=8P3BJ7-N!=+;*M$y+Po)r1ImGzcFH zk%+5?T~K^}B|4~hHAF{T7z})Ra4glh=IX0~eK#&%i`>|H#;++N+85nHUj*Cc1qA%^ znl%e7q~pGY^mK3!-LBfcseE24udw@aJ6`$draL-iFS%tH>u_Km9|$er9$=R6b^5mcSasYHwHLEBjLBj zA9N=i6W>vDO+%tdUidDUDDY255e{F0GPVB4H;FX+rm&N_8&{!GT3hp)7^N?3-g&S? x#`m)~$5D9$|y+kO-Y9B@Ga z=yU-Pmhe8w1||DoJI)Y*0N5+mNaY&wI(K^wG~~`Da z-r4m^-ZgHO>Nlf;(b)S^ZL1{#gkJ_&!TvJl7LHklnw>B)7QBP|)vynb!~mQCWnAwb z>FLD2%*oayWp>9Nz-2KB2%+E_{|dKZAn>DboeSSHPlD^bnn@VP(E>~(FGB%+e}Zdh zuOpFfJ^4!H=Z3rCzv-*~xHMx`93} z8|O~jIEHMqT|*u~2H`CvZ^Z-&_5^ob2Q7FYTpv{U?62ewl;dbondQSXkE}u!@N*?_ zA1T2D6gM=$Dr|!%1X~0<1bYMz3XTaT1XaN)WG&1H{T0Epf(2v)e1Lo$E+VVob6B0l z05#BI+Y48r-_`eL!7G&|1i(>*qLV4Ir6}Hl%i=YS3 zowtW=lf0PnzA;2_?((F62=Uha#WBWcG}r!d!8oQB}etM5Y<$gwW4~~qSF?1P197~ zq61loq%7S4^XLhhgw*y6Boiv%Bn838Ke5}b8W?x|*yPR929mYgH zgS+j|Yg*TIispEh5L0pK32Ge{3Km8ThIHNHx``9Rs-;mF$)yt(`^>Skwpg?EGW@S} z2lLdJ!LwuEyE4OnG=04A%dsncm;SB@Eu1;s46Z9D_>CUKT8SwIs1ha}B@^ry%$Yc9RXa$e1?6#rCmtxJKj J-$|j#`43(}ZL|OY diff --git a/Sherpa.Installer/customtasks/Sherpa.Library.dll b/Sherpa.Installer/customtasks/Sherpa.Library.dll index ac6b64e97c47ba8d249deaa4a3e202f6bf57cec1..42276e0cc1ed8dfa79bab7607ae58c8355827f7e 100644 GIT binary patch literal 134144 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 NaPI&A{rqv@zW}20mKy*7 diff --git a/Sherpa.Library/Deploy/FileListenerAndUploader.cs b/Sherpa.Library/Deploy/FileListenerAndUploader.cs new file mode 100644 index 0000000..f71e3da --- /dev/null +++ b/Sherpa.Library/Deploy/FileListenerAndUploader.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Threading; +using log4net; +using Sherpa.Library.SiteHierarchy; + +namespace Sherpa.Library +{ + public class FileListenerAndUploader + { + private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + public SiteSetupManager SetupManager { get; set; } + public ManualResetEvent ResetEvent { get; set; } + public List ChangedFilesInIteration { get; set; } + + public void CreateFileWatcher(string path, SiteSetupManager setupManager) + { + SetupManager = setupManager; + + FileSystemWatcher watcher = new FileSystemWatcher(); + ResetEvent = new ManualResetEvent(false); + + watcher.Path = path; + /* Watch for changes in LastAccess and LastWrite times, and + the renaming of files or directories. */ + watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite + | NotifyFilters.FileName | NotifyFilters.DirectoryName; + + watcher.IncludeSubdirectories = true; + + // Add event handlers. + watcher.Changed += new FileSystemEventHandler(FileChange); + watcher.Created += new FileSystemEventHandler(FileChange); + + // Begin watching. + watcher.EnableRaisingEvents = true; + + ChangedFilesInIteration = new List(); + while (true) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("Watching for changes to files in Sherpa content directory..."); + Console.ResetColor(); + + if (ResetEvent.WaitOne()) + { + SetupManager.UploadChangedFiles(); + ChangedFilesInIteration.Clear(); + ResetEvent.Reset(); + } + else + { + Console.WriteLine("Waiting timed-out"); + } + } + //watcher.WaitForChanged(WatcherChangeTypes.Changed | WatcherChangeTypes.Created | WatcherChangeTypes.Renamed, -1); + } + + // Define the event handlers. + private void FileChange(object source, FileSystemEventArgs e) + { + if (e.FullPath.EndsWith(".js") || e.FullPath.EndsWith(".css") || e.FullPath.EndsWith(".txt") || + e.FullPath.EndsWith(".html") || e.FullPath.EndsWith(".webpart") || e.FullPath.EndsWith(".png")) + { + if (!ChangedFilesInIteration.Contains(e.FullPath)) + { + Log.InfoFormat("File {0} changed and a new upload is starting", e.Name); + ChangedFilesInIteration.Add(e.FullPath); + ResetEvent.Set(); + } + } + } + } +} diff --git a/Sherpa.Library/Sherpa.Library.csproj b/Sherpa.Library/Sherpa.Library.csproj index 6816b88..e7e6f9d 100644 --- a/Sherpa.Library/Sherpa.Library.csproj +++ b/Sherpa.Library/Sherpa.Library.csproj @@ -110,6 +110,7 @@ + diff --git a/Sherpa.Library/SiteHierarchy/ContentUploadManager.cs b/Sherpa.Library/SiteHierarchy/ContentUploadManager.cs index 4ec6851..28637cf 100644 --- a/Sherpa.Library/SiteHierarchy/ContentUploadManager.cs +++ b/Sherpa.Library/SiteHierarchy/ContentUploadManager.cs @@ -21,27 +21,21 @@ public class ContentUploadManager { private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static Dictionary LastUpload = new Dictionary(); - private static bool IncrementalUpload; private readonly string _contentDirectoryPath; public ContentUploadManager(string rootConfigurationPath) { _contentDirectoryPath = rootConfigurationPath; } - public ContentUploadManager(string rootConfigurationPath, bool incrementalUpload) - { - _contentDirectoryPath = rootConfigurationPath; - IncrementalUpload = incrementalUpload; - } - public void UploadFilesInFolder(ClientContext context, Web web, List contentFolders) + public void UploadFilesInFolder(ClientContext context, Web web, List contentFolders, bool incrementalUpload) { foreach (ShContentFolder folder in contentFolders) { - UploadFilesInFolder(context, web, folder); + UploadFilesInFolder(context, web, folder, incrementalUpload); } } - public void UploadFilesInFolder(ClientContext context, Web web, ShContentFolder contentFolder) + public void UploadFilesInFolder(ClientContext context, Web web, ShContentFolder contentFolder, bool incrementalUpload) { Log.Info("Uploading files from contentfolder " + contentFolder.FolderName); @@ -115,7 +109,7 @@ public void UploadFilesInFolder(ClientContext context, Web web, ShContentFolder var files = Directory.GetFiles(configRootFolder, "*", SearchOption.AllDirectories) .Where(file => !excludedFileExtensions.Contains(Path.GetExtension(file).ToLower())).ToList(); - if (IncrementalUpload) + if (incrementalUpload) { files = files.Where(f =>!LastUpload.ContainsKey(contentFolder.FolderName) || new FileInfo(f).LastWriteTimeUtc > LastUpload[contentFolder.FolderName]).ToList(); } @@ -123,33 +117,7 @@ public void UploadFilesInFolder(ClientContext context, Web web, ShContentFolder int filesUploaded = 0; foreach (string filePath in files) { - var pathToFileFromRootFolder = filePath.Replace(configRootFolder.TrimEnd(new []{'\\'}) + "\\", ""); - var fileName = Path.GetFileName(pathToFileFromRootFolder); - - if (!string.IsNullOrEmpty(contentFolder.PropertiesFile) && contentFolder.PropertiesFile == fileName) - { - Log.DebugFormat("Skipping file upload of {0} since it's used as a configuration file", fileName); - continue; - } - Log.DebugFormat("Uploading file {0} to {1}", fileName, contentFolder.ListUrl); - var fileUrl = GetFileUrl(uploadTargetFolder, pathToFileFromRootFolder, filePropertiesCollection); - web.CheckOutFile(fileUrl); - - var newFile = new FileCreationInformation - { - Content = System.IO.File.ReadAllBytes(filePath), - Url = fileUrl, - Overwrite = true - }; - File uploadFile = rootFolder.Files.Add(newFile); - - context.Load(uploadFile); - context.Load(uploadFile.ListItemAllFields.ParentList, l => l.ForceCheckout, l => l.EnableMinorVersions, l => l.EnableModeration); - context.ExecuteQuery(); - - ApplyFileProperties(context, filePropertiesCollection, uploadFile); - uploadFile.PublishFileToLevel(FileLevel.Published); - context.ExecuteQuery(); + UploadAndPublishSingleFile(context, web, configRootFolder, contentFolder, uploadTargetFolder, rootFolder, filePropertiesCollection, filePath); filesUploaded++; } @@ -174,6 +142,42 @@ public void UploadFilesInFolder(ClientContext context, Web web, ShContentFolder } + private void UploadAndPublishSingleFile(ClientContext context, Web web, string configRootFolder, ShContentFolder contentFolder, string uploadTargetFolder, Folder rootFolder, List filePropertiesCollection, string filePath) + { + var pathToFileFromRootFolder = filePath.Replace(configRootFolder.TrimEnd(new[] { '\\' }) + "\\", ""); + var fileName = Path.GetFileName(pathToFileFromRootFolder); + + if (!string.IsNullOrEmpty(contentFolder.PropertiesFile) && contentFolder.PropertiesFile == fileName) + { + Log.DebugFormat("Skipping file upload of {0} since it's used as a configuration file", fileName); + return; + } + Log.DebugFormat("Uploading file {0} to {1}", fileName, contentFolder.ListUrl); + var fileUrl = GetFileUrl(uploadTargetFolder, pathToFileFromRootFolder, filePropertiesCollection); + web.CheckOutFile(fileUrl); + + var newFile = new FileCreationInformation + { + Content = System.IO.File.ReadAllBytes(filePath), + Url = fileUrl, + Overwrite = true + }; + File uploadFile = rootFolder.Files.Add(newFile); + + context.Load(uploadFile); + context.Load(uploadFile.ListItemAllFields.ParentList, l => l.ForceCheckout, l => l.EnableMinorVersions, l => l.EnableModeration); + context.ExecuteQuery(); + + var reloadedFile = web.GetFileByServerRelativeUrl(fileUrl); + context.Load(reloadedFile); + context.ExecuteQuery(); + + ApplyFileProperties(context, filePropertiesCollection, reloadedFile); + + uploadFile.PublishFileToLevel(FileLevel.Published); + context.ExecuteQuery(); + } + private string GetFileUrl(string uploadTargetFolder, string pathToFileFromRootFolder, IEnumerable filePropertiesCollection) { diff --git a/Sherpa.Library/SiteHierarchy/SiteSetupManager.cs b/Sherpa.Library/SiteHierarchy/SiteSetupManager.cs index 1e3488f..ed2809c 100644 --- a/Sherpa.Library/SiteHierarchy/SiteSetupManager.cs +++ b/Sherpa.Library/SiteHierarchy/SiteSetupManager.cs @@ -4,6 +4,7 @@ using System.Reflection; using log4net; using Microsoft.SharePoint.Client; +using System; namespace Sherpa.Library.SiteHierarchy { @@ -21,11 +22,14 @@ public class SiteSetupManager : ISiteSetupManager private CustomActionsManager CustomActionsManager { get; set; } private PermissionManager PermissionManager { get; set; } private ComposedLookManager ComposedLookManager { get; set; } - + private FileListenerAndUploader FileListenerAndUploader { get; set; } + private bool IncrementalUpload { get; set; } + private string ContentConfigurationPath { get; set; } public SiteSetupManager(ClientContext clientContext, ShSiteCollection configurationSiteCollection, string rootConfigurationPath, bool incrementalUpload) { ConfigurationSiteCollection = configurationSiteCollection; ClientContext = clientContext; + IncrementalUpload = incrementalUpload; FeatureManager = new FeatureManager(); QuicklaunchManager = new QuicklaunchManager(); @@ -34,9 +38,10 @@ public SiteSetupManager(ClientContext clientContext, ShSiteCollection configurat CustomActionsManager = new CustomActionsManager(); PermissionManager = new PermissionManager(); ComposedLookManager = new ComposedLookManager(); + FileListenerAndUploader = new FileListenerAndUploader(); - var contentConfigurationPath = Path.Combine(rootConfigurationPath, "content"); - ContentUploadManager = new ContentUploadManager(contentConfigurationPath, incrementalUpload); + ContentConfigurationPath = Path.Combine(rootConfigurationPath, "content"); + ContentUploadManager = new ContentUploadManager(ContentConfigurationPath); } public void SetupSites() { @@ -60,7 +65,7 @@ private void EnsureAndConfigureWebAndActivateFeatures(ClientContext context, Web ListManager.CreateLists(context, webToConfigure, configWeb.Lists); QuicklaunchManager.CreateQuicklaunchNodes(context, webToConfigure, configWeb.Quicklaunch); PropertyManager.SetProperties(context, webToConfigure, configWeb.Properties); - ContentUploadManager.UploadFilesInFolder(context, webToConfigure, configWeb.ContentFolders); + ContentUploadManager.UploadFilesInFolder(context, webToConfigure, configWeb.ContentFolders, IncrementalUpload); ComposedLookManager.SetComposedLook(context, configWeb, webToConfigure, configWeb.ComposedLook); SearchNavigationManager.CreateSearchNavigationNodes(context, webToConfigure, configWeb.SearchNavigation); SetWelcomePageUrlIfConfigured(context, webToConfigure, configWeb); @@ -177,5 +182,27 @@ private static void DeleteWeb(ClientContext clientContext, Web web) web.DeleteObject(); clientContext.ExecuteQuery(); } + + public void StartFileWatching() + { + UploadFilesInWeb(ClientContext, null, ConfigurationSiteCollection.RootWeb); + FileListenerAndUploader.CreateFileWatcher(ContentConfigurationPath, this); + } + public void UploadChangedFiles() + { + UploadFilesInWeb(ClientContext, null, ConfigurationSiteCollection.RootWeb); + } + + private void UploadFilesInWeb(ClientContext context, Web parentWeb, ShWeb configWeb) + { + Log.Info("Looking for updated files in web " + configWeb.Url); + var webToConfigure = EnsureWeb(context, parentWeb, configWeb); + ContentUploadManager.UploadFilesInFolder(context, webToConfigure, configWeb.ContentFolders, IncrementalUpload); + + foreach (ShWeb subWeb in configWeb.Webs) + { + UploadFilesInWeb(context, webToConfigure, subWeb); + } + } } }