)]}'
{"Openstack.Client.Powershell/Cmdlets/ObjectStorage/Objects/CopyItemCmdlet.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            get"},{"line_number":109,"context_line":"            {"},{"line_number":110,"context_line":"                if (((ObjectStoragePSDriveInfo)this.Drive).SharePath \u003d\u003d null)"},{"line_number":111,"context_line":"                    return this.Context.ServiceCatalog.GetPublicEndpoint(\"Object Storage\", String.Empty);"},{"line_number":112,"context_line":"                else"},{"line_number":113,"context_line":"                    //return ((OSDriveInfo)this.Drive).SharePath;"},{"line_number":114,"context_line":"                    return ((ObjectStoragePSDriveInfo)this.Drive).SharePath.Replace(this.Drive.Name, string.Empty);"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_e37bab78","line":111,"updated":"2014-06-05 17:54:50.000000000","message":"So... \"Object Storage\" is configurable based on the OpenStack instance.. for example in DevStack this is \"Swift\". You may need to take this in from the user with a default.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        {"},{"line_number":224,"context_line":"            if (!path.Volume.EndsWith(@\"\\\") \u0026\u0026 !path.Path.StartsWith(@\"\\\"))"},{"line_number":225,"context_line":"            {"},{"line_number":226,"context_line":"                return new FileStream(path.Volume + @\"\\\" + path.Path, FileMode.Open);"},{"line_number":227,"context_line":"            }"},{"line_number":228,"context_line":"            else"},{"line_number":229,"context_line":"            {"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_834f4733","line":226,"updated":"2014-06-05 17:54:50.000000000","message":"I\u0027m seeing a lot of places where the \"\\\" or  \"/\" is being hard coded, or transformed (ie from \\ to / or / to \\). You might want to put a little bit more structure around this, as my guess is you are going to hit this a lot switching between a local \"windows\" file system, and a remote \"REST\" based system. especially  in the storage world...\n\nI\u0027m not sure what that structure could look like, but using encapsulation, or some kind of pattern so that the conversion logic can be centralized, and guaranteed to be used when it\u0027s needed.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Deployment/Openstack.config":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":31,"context_line":"      \u003cSharedContainers\u003e\u003c/SharedContainers\u003e"},{"line_number":32,"context_line":"    \u003c/StorageManagement\u003e"},{"line_number":33,"context_line":"    \u003cIdentityServices\u003e"},{"line_number":34,"context_line":"      \u003cServiceProvider name\u003d\"\" isDefault \u003d \"true\"\u003e"},{"line_number":35,"context_line":"        \u003cadd key\u003d\"AuthenticationServiceURI\" value\u003d\"\" displayName\u003d\"Authentication Service URI\" helpText \u003d\"\" isMandatory\u003d\"True\"/\u003e"},{"line_number":36,"context_line":"        \u003cadd key\u003d\"Username\"                 value\u003d\"\" displayName\u003d\"User name\" helpText \u003d\"\" isMandatory\u003d\"True\"/\u003e"},{"line_number":37,"context_line":"        \u003cadd key\u003d\"Password\"                 value\u003d\"\" displayName\u003d\"Password\" helpText \u003d\"\" isMandatory\u003d\"True\" /\u003e"}],"source_content_type":"text/x-ini","patch_set":1,"id":"1ae5cdf2_237f5316","line":34,"updated":"2014-06-05 17:54:50.000000000","message":"Is the name param optional and does it need to be unique? \n\nIf so, I\u0027m not sure you want to go down that road... you might consider adding a name here.. maybe something like \"DevStack\" or \"OpenStack\" for the default provider... leaving it optional and/or not unique seems like a bad idea..","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u003cadd key\u003d\"DefaultTenantId\"          value\u003d\"\" displayName\u003d\"Default Tenant Id\" helpText \u003d\"\" isMandatory\u003d\"True\"/\u003e"},{"line_number":39,"context_line":"        \u003cAvailabilityZones\u003e"},{"line_number":40,"context_line":"          \u003cAvailabilityZone id\u003d\"1\" isDefault\u003d\"True\"  name\u003d\"region-a.geo-1\" shellForegroundColor\u003d\"Green\" /\u003e"},{"line_number":41,"context_line":"          \u003cAvailabilityZone id\u003d\"2\" isDefault\u003d\"False\" name\u003d\"region-b.geo-1\" shellForegroundColor\u003d\"Green\" /\u003e"},{"line_number":42,"context_line":"        \u003c/AvailabilityZones\u003e"},{"line_number":43,"context_line":"      \u003c/ServiceProvider\u003e    "},{"line_number":44,"context_line":"    \u003c/IdentityServices\u003e"}],"source_content_type":"text/x-ini","patch_set":1,"id":"1ae5cdf2_e3980b6c","line":41,"updated":"2014-06-05 17:54:50.000000000","message":"what happens when there are more then one item marked as default? can that happen? is there schema validation, or is there a load error?","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Openstack.Client.Powershell.csproj":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":249,"context_line":"md  C:\\Users\\tplummer\\Documents\\WindowsPowerShell\\Modules\\Openstack"},{"line_number":250,"context_line":"md  C:\\Users\\tplummer\\Documents\\WindowsPowerShell\\Modules\\Openstack\\Openstack-Core"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"copy $(ProjectDir)\\Deployment\\*.*                                 C:\\Users\\tplummer\\Documents\\WindowsPowerShell\\Modules\\Openstack\\Openstack-Core"},{"line_number":253,"context_line":"copy  $(ProjectDir)\\Deployment\\DevProfile.ps1            C:\\Users\\tplummer\\Documents\\WindowsPowerShell\\Microsoft.Powershell_profile.ps1"},{"line_number":254,"context_line":"copy  $(ProjectDir)\\Deployment\\Openstack.config      C:\\Users\\tplummer\\Documents\\OS\\Openstack.config"},{"line_number":255,"context_line":""}],"source_content_type":"application/xml","patch_set":1,"id":"1ae5cdf2_43c8df54","line":252,"updated":"2014-06-05 17:54:50.000000000","message":"This is only going to work on your machine... you\u0027re going to want to remove the absolute paths, and use relative paths...","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Providers/Common/BaseNavigationCmdletProvider.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":111,"context_line":"//\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":112,"context_line":"        private void SetZoneColor(ServiceProvider provider)"},{"line_number":113,"context_line":"        {"},{"line_number":114,"context_line":"            AvailabilityZone defZone           \u003d provider.AvailabilityZones.Where(z \u003d\u003e z.IsDefault \u003d\u003d true).SingleOrDefault();    "},{"line_number":115,"context_line":"            Console.ForegroundColor            \u003d (ConsoleColor)Enum.Parse(typeof(ConsoleColor),  defZone.ShellForegroundColor);"},{"line_number":116,"context_line":"            this.Host.UI.RawUI.ForegroundColor \u003d (ConsoleColor)Enum.Parse(typeof(ConsoleColor),  defZone.ShellForegroundColor);"},{"line_number":117,"context_line":"            this.Context.Forecolor             \u003d defZone.ShellForegroundColor;"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_831ae7c3","line":114,"updated":"2014-06-05 17:54:50.000000000","message":"So this goes back to the other comment I had.. if I have more then one item marked as default this will pop and exception... \n\nInvalidOperationException\n\"The input sequence contains more than one element\"\n\nDepending on the behavior you want to see, you may consider using FirstOrDefault instead..","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        private void SetZoneColor(ServiceProvider provider)"},{"line_number":113,"context_line":"        {"},{"line_number":114,"context_line":"            AvailabilityZone defZone           \u003d provider.AvailabilityZones.Where(z \u003d\u003e z.IsDefault \u003d\u003d true).SingleOrDefault();    "},{"line_number":115,"context_line":"            Console.ForegroundColor            \u003d (ConsoleColor)Enum.Parse(typeof(ConsoleColor),  defZone.ShellForegroundColor);"},{"line_number":116,"context_line":"            this.Host.UI.RawUI.ForegroundColor \u003d (ConsoleColor)Enum.Parse(typeof(ConsoleColor),  defZone.ShellForegroundColor);"},{"line_number":117,"context_line":"            this.Context.Forecolor             \u003d defZone.ShellForegroundColor;"},{"line_number":118,"context_line":"        }"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_e359eb8e","line":115,"updated":"2014-06-05 17:54:50.000000000","message":"Also in the case where Default is returned, you will probably get null (since this is the default for anything derived from Object, unless you do some more work). It doesn\u0027t look like your checking for that here...","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Providers/ObjectStorage/ObjectStorageDriveConverter.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            IEnumerable\u003cStorageContainer\u003e storageContainers \u003d null;"},{"line_number":73,"context_line":"            var parameters \u003d new ObjectStorageDriveParameters();"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"            if (this.Context.Settings !\u003d null)"},{"line_number":76,"context_line":"            {"},{"line_number":77,"context_line":"                parameters.Settings \u003d this.Context.Settings;"},{"line_number":78,"context_line":"            }"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_e39e4b06","line":75,"updated":"2014-06-05 17:54:50.000000000","message":"Might be missing something here, but it looks like this If block is a no-op since both branches have the same code in them..\n\nYou may also want to consider validating that you have a context, that is not null, and has the settings you need first, and if you don\u0027t (based on the code that follows) you might want to throw an exception, or otherwise write out an error...","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"            try"},{"line_number":101,"context_line":"            {"},{"line_number":102,"context_line":"                string publicStoreUrl \u003d this.Context.ServiceCatalog.GetPublicEndpoint(\"Object Storage\", \"region-a.geo-1\").ToString();"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"                if (storageContainers.Count() \u003e 0)"},{"line_number":105,"context_line":"                {"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_632ebba6","line":102,"updated":"2014-06-05 17:54:50.000000000","message":"The service name is configurable based on the instance of OpenStack your using... for example DevStack calls the storage service \"swift\" not \"Object Storage\". Also you are hard coding your region here... this may be a bad idea.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            }"},{"line_number":126,"context_line":"            catch (Exception ex)"},{"line_number":127,"context_line":"            {"},{"line_number":128,"context_line":"                int g \u003d 7;"},{"line_number":129,"context_line":"            }"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"            return drives;"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_83002703","line":128,"updated":"2014-06-05 17:54:50.000000000","message":"Not sure what this is doing.... but it doesn\u0027t look like it\u0027s being used anywhere...","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Providers/ObjectStorage/ObjectStorageNavigationProvider.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"namespace OpenStack.Client.Powershell.Providers.Storage "},{"line_number":33,"context_line":"{"},{"line_number":34,"context_line":"    [CmdletProvider(\"Object Storage\", ProviderCapabilities.ExpandWildcards)]"},{"line_number":35,"context_line":"    public class ObjectStorageNavigationProvider : BaseNavigationCmdletProvider"},{"line_number":36,"context_line":"    { "},{"line_number":37,"context_line":"        const string cDelimiter    \u003d @\"\\\";"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_8732f2a4","line":34,"updated":"2014-06-05 17:54:50.000000000","message":"Not sure if this is tied to the OpenStack service name (ie the one in the service catalog), but if it is... then you should know its configurable on the OpenStack side. DevStack, for example, uses \"swift\" not \"Object Storage\"","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        {"},{"line_number":51,"context_line":"            get "},{"line_number":52,"context_line":"            {"},{"line_number":53,"context_line":"                IOpenStackClient client \u003d (IOpenStackClient)this.SessionState.PSVariable.GetValue(\"CoreClient\", null);"},{"line_number":54,"context_line":"                return client.CreateServiceClient\u003cIStorageServiceClient\u003e();"},{"line_number":55,"context_line":"            }"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_c7df9a38","line":53,"updated":"2014-06-05 17:54:50.000000000","message":"What happens when this variable is not set?","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            get "},{"line_number":52,"context_line":"            {"},{"line_number":53,"context_line":"                IOpenStackClient client \u003d (IOpenStackClient)this.SessionState.PSVariable.GetValue(\"CoreClient\", null);"},{"line_number":54,"context_line":"                return client.CreateServiceClient\u003cIStorageServiceClient\u003e();"},{"line_number":55,"context_line":"            }"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        }"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_47c2aa53","line":54,"updated":"2014-06-05 17:54:50.000000000","message":"Also, this may or may not work based on what instance of OpenStack you are going against. You may want to use CreateServiceClientByName and pass in the service name you want to connect to.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            get"},{"line_number":78,"context_line":"            {"},{"line_number":79,"context_line":"                if (this.Drive \u003d\u003d null || this.Drive.SharePath \u003d\u003d null)"},{"line_number":80,"context_line":"                    return this.Context.ServiceCatalog.GetPublicEndpoint(\"Object Storage\", \"region-a.geo-1\").ToString();"},{"line_number":81,"context_line":"                    //return this.Context.ServiceCatalog.GetPublicEndpoint(\"object-store\", null).ToString();             //.GetService(\"object-store\").Url;"},{"line_number":82,"context_line":"                else"},{"line_number":83,"context_line":"                    return this.Drive.SharePath;"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_e7973646","line":80,"updated":"2014-06-05 17:54:50.000000000","message":"Same note as before... hard coded region, and service name.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":156,"context_line":"//\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":157,"context_line":"        private void SetDefaultDrive()"},{"line_number":158,"context_line":"        {"},{"line_number":159,"context_line":"            Runspace runSpace \u003d RunspaceFactory.CreateRunspace();"},{"line_number":160,"context_line":"            runSpace.Open();"},{"line_number":161,"context_line":"            Pipeline pipeline \u003d runSpace.CreatePipeline();"},{"line_number":162,"context_line":"            Command setDefaultDriveCmd \u003d new Command(\"Set-Location OS-Init:\");"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_07a18293","line":159,"updated":"2014-06-05 17:54:50.000000000","message":"Do you really need to go all the way back out to powershell to do this, can\u0027t you just call into the class/types that are already in this assembly? \n\nMaybe you can/cant\u0027 only reason I ask is because spooling up a runspace is expensive, and does not help your perf...","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                        {"},{"line_number":213,"context_line":"                            return this.CreateDefaultDrive(parameters);"},{"line_number":214,"context_line":"                        }"},{"line_number":215,"context_line":"                        parameters.Settings \u003d this.Settings;"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"                        foreach (StorageContainer storageContainer in storageContainers)"},{"line_number":218,"context_line":"                        {"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_27f11e95","line":215,"updated":"2014-06-05 17:54:50.000000000","message":"In other methods, you check here to make sure that this.Settings  is not null... is it guaranteed not to be null at this point, what happens if it is null?","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":292,"context_line":"                folderName \u003d \"/\";             "},{"line_number":293,"context_line":"            }"},{"line_number":294,"context_line":"            else {                "},{"line_number":295,"context_line":"                folderName \u003d  path.Replace(@\"\\\", \"/\").TrimStart(\u0027/\u0027);                "},{"line_number":296,"context_line":"            }"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"           listStorageObjectTask \u003d client.GetStorageFolder(this.GetContainerName(path), folderName);                "}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_a70b6e7b","line":295,"updated":"2014-06-05 17:54:50.000000000","message":"See my other note about perhaps centralizing or adding structure around the conversion from \"/\" to \"\\\" and \"/\" to \"\\\"","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":531,"context_line":"                    storagePath \u003d new StoragePath(this.StorageServiceURL, this.Drive.Name, path.Substring(1) + \"/\");"},{"line_number":532,"context_line":"                }"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"                IStorageServiceClient storageService \u003d this.Client.CreateServiceClient\u003cIStorageServiceClient\u003e(); "},{"line_number":535,"context_line":"                Task\u003cStorageObject\u003e getStorageObjectTask \u003d storageService.GetStorageObject(storagePath.Volume, storagePath.ResourcePath);                            //(storagePath.AbsoluteURI);"},{"line_number":536,"context_line":"                getStorageObjectTask.Wait();"},{"line_number":537,"context_line":"                StorageObject sObject \u003d getStorageObjectTask.Result;"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_07526266","line":534,"updated":"2014-06-05 17:54:50.000000000","message":"May want/need to use CreateServiceClientByName here","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Providers/ObjectStorage/ObjectStoragePSDriveInfo.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":66,"context_line":"/// \u003cparam name\u003d\"path\"\u003e\u003c/param\u003e"},{"line_number":67,"context_line":"/// \u003creturns\u003e\u003c/returns\u003e"},{"line_number":68,"context_line":"//\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":"        private string GetFirstPathElement(string path)"},{"line_number":70,"context_line":"        {"},{"line_number":71,"context_line":"            int delimeterPosition;"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_6798861c","line":69,"updated":"2014-06-05 17:54:50.000000000","message":"I\u0027m not 100% sure, but you might check the stock .NET Path object and its extentions... I think they might do some of this for you, or at least make it easier...","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":100,"context_line":"/// \u003cparam name\u003d\"path\"\u003e\u003c/param\u003e"},{"line_number":101,"context_line":"/// \u003creturns\u003e\u003c/returns\u003e"},{"line_number":102,"context_line":"//\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":103,"context_line":"        private bool IsHPOSDrive(string name)"},{"line_number":104,"context_line":"        {"},{"line_number":105,"context_line":"            if (name !\u003d null)"},{"line_number":106,"context_line":"            {"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_c7b87a77","line":103,"updated":"2014-06-05 17:54:50.000000000","message":"Is this HP specific, or the generic \"OpenStack\" impl?","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        {"},{"line_number":234,"context_line":"            get"},{"line_number":235,"context_line":"            {"},{"line_number":236,"context_line":"                return this._context.ServiceCatalog.GetPublicEndpoint(\"object-store\", null).ToString();"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"                //if (this.Drive.SharePath \u003d\u003d null)"},{"line_number":239,"context_line":"                //    return this.Context.ServiceCatalog.GetPublicEndpoint(\"object-store\", null).ToString();             //.GetService(\"object-store\").Url;"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_c746ba7a","line":236,"updated":"2014-06-05 17:54:50.000000000","message":"Hard-coded service name... also appears to be the wrong name.. I think you want either \"Object Storage\" or \"swift\"","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Utility/AccountCapabilities.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            {"},{"line_number":141,"context_line":"                // No storageContainers exist for the new credentials so make some up..."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"                PSDriveInfo driveInfo \u003d new PSDriveInfo(\"HPOS-Init\", this.SessionState.Drive.Current.Provider, \"/\", \"Root folder for your storageContainer\", null);"},{"line_number":144,"context_line":"                this.SessionState.Drive.New(new ObjectStoragePSDriveInfo(driveInfo, parameters, this.Context, this.Context.ServiceCatalog.GetPublicEndpoint(\"object-store\", this.Context.CurrentRegion)), \"local\");"},{"line_number":145,"context_line":"            }"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_27059e13","line":143,"updated":"2014-06-05 17:54:50.000000000","message":"HP specific or?","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Utility/ExtensionManager.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            "},{"line_number":108,"context_line":"            foreach (Assembly assembly in assemblies) "},{"line_number":109,"context_line":"            {"},{"line_number":110,"context_line":"                Type[] types \u003d assembly.GetTypes().Where(b \u003d\u003e b !\u003d null \u0026\u0026 b.BaseType !\u003d null \u0026\u0026 b.BaseType.UnderlyingSystemType.FullName \u003d\u003d \"OpenStack.Client.Powershell.Utility.RegistrationManager\").ToArray\u003cType\u003e();"},{"line_number":111,"context_line":"                                "},{"line_number":112,"context_line":"                // Now that we found one, make sure that it\u0027s the one we\u0027re looking for.."},{"line_number":113,"context_line":"   "}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_ea437b3f","line":110,"updated":"2014-06-05 17:54:50.000000000","message":"A better way here might be to check if the type \"IsAssignableFrom\" instead of using the FullName attribute... its generally less fragile, and will force a compile time break if the underlying class is not available/changes","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                      ServiceProviderAttribute identifier \u003d attribute as ServiceProviderAttribute;"},{"line_number":120,"context_line":"                      "},{"line_number":121,"context_line":"                      if (identifier !\u003d null \u0026\u0026 identifier.Name \u003d\u003d serviceProviderName) {"},{"line_number":122,"context_line":"                          return (RegistrationManager)Activator.CreateInstance(type, null);"},{"line_number":123,"context_line":"                      }"},{"line_number":124,"context_line":"                  }"},{"line_number":125,"context_line":"               }  "}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_caf5dfed","line":122,"updated":"2014-06-05 17:54:50.000000000","message":"You may want to split this onto two lines, and check for null... it will let you throw a more meaningful exception, rather then passing null back. If you just pass null back, you bury the root cause.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"},{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            // Connect to the Service Provider.."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"            var client \u003d OpenStackClientFactory.CreateClient\u003cOpenStackClient\u003e(response.Credentials, CancellationToken.None, String.Empty);"},{"line_number":144,"context_line":"            var connectTask \u003d client.Connect();"},{"line_number":145,"context_line":"            connectTask.Wait();"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_2aa9e323","line":143,"updated":"2014-06-05 17:54:50.000000000","message":"You may actually want to use a real cancellation token... since you are an end user UI... you will need to respond to user cancellation. The reason you can pass in a token, is so you can control how/when to cancel the underlying operation. If you pass in .None, you are now blocking on the SDK.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/Utility/RegistrationManager.cs":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":65,"context_line":"/// \u003c/summary\u003e"},{"line_number":66,"context_line":"/// \u003creturns\u003e\u003c/returns\u003e"},{"line_number":67,"context_line":"//\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":68,"context_line":"        private string ReadPassword()"},{"line_number":69,"context_line":"        {"},{"line_number":70,"context_line":"            string password \u003d \"\";"},{"line_number":71,"context_line":"            ConsoleKeyInfo info \u003d Console.ReadKey(true);"}],"source_content_type":"text/x-csharp","patch_set":1,"id":"1ae5cdf2_4a29cf99","line":68,"updated":"2014-06-05 17:54:50.000000000","message":"I\u0027m not possitive.. but I thought there was a way to get powershell to do this for you... you might consider just taking in a PSCredential as a cmd line param instead of trying to do this inline.","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}],"Openstack.Client.Powershell/packages.config":[{"author":{"_account_id":10523,"name":"Wayne Foley","email":"wayne.foley@hp.com","username":"wfoley"},"change_message_id":"1924b816d4f9c9a42ec8a22d2343bc3e44c91470","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  \u003cpackage id\u003d\"Microsoft.Bcl.Build\" version\u003d\"1.0.14\" targetFramework\u003d\"net45\" /\u003e"},{"line_number":7,"context_line":"  \u003cpackage id\u003d\"Microsoft.Net.Http\" version\u003d\"2.2.22\" targetFramework\u003d\"net45\" /\u003e"},{"line_number":8,"context_line":"  \u003cpackage id\u003d\"Newtonsoft.Json\" version\u003d\"6.0.2\" targetFramework\u003d\"net45\" /\u003e"},{"line_number":9,"context_line":"  \u003cpackage id\u003d\"OpenStack-SDK-DotNet\" version\u003d\"0.9.0.0\" targetFramework\u003d\"net45\" /\u003e"},{"line_number":10,"context_line":"\u003c/packages\u003e"}],"source_content_type":"text/x-ini","patch_set":1,"id":"1ae5cdf2_6d294589","line":9,"updated":"2014-06-05 17:54:50.000000000","message":"You may want to grab the 9.1 release","commit_id":"98e49965e73763d6e3faa028b3757ef13f240641"}]}
