From 5d1a55386cf13a79e21b00335bb0642816d12a9f Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Tue, 11 Aug 2015 17:52:02 -0700 Subject: [PATCH] Fix bug with change in 1.8.0 remote volumes API Signed-off-by: Jeffrey Morgan --- src/components/ContainerHome.react.js | 2 +- src/components/ContainerHomeFolders.react.js | 39 +++++++++------ .../ContainerSettingsVolumes.react.js | 50 ++++++++++++------- 3 files changed, 55 insertions(+), 36 deletions(-) diff --git a/src/components/ContainerHome.react.js b/src/components/ContainerHome.react.js index a0af212ed5..f47cd9620b 100644 --- a/src/components/ContainerHome.react.js +++ b/src/components/ContainerHome.react.js @@ -41,7 +41,7 @@ var ContainerHome = React.createClass({ }, showFolders: function () { - return this.props.container.Volumes && _.keys(this.props.container.Volumes).length > 0 && this.props.container.State.Running; + return this.props.container.Mounts && this.props.container.Mounts.length > 0 && this.props.container.State.Running; }, render: function () { diff --git a/src/components/ContainerHomeFolders.react.js b/src/components/ContainerHomeFolders.react.js index 2755663d79..0aecb10622 100644 --- a/src/components/ContainerHomeFolders.react.js +++ b/src/components/ContainerHomeFolders.react.js @@ -14,30 +14,36 @@ var ContainerHomeFolder = React.createClass({ contextTypes: { router: React.PropTypes.func }, - handleClickFolder: function (hostVolume, containerVolume) { + handleClickFolder: function (source, destination) { metrics.track('Opened Volume Directory', { from: 'home' }); - if (hostVolume.indexOf(util.windowsToLinuxPath(util.home())) === -1) { + if (source.indexOf(util.windowsToLinuxPath(util.home())) === -1) { dialog.showMessageBox({ message: `Enable all volumes to edit files? This may not work with all database containers.`, buttons: ['Enable Volumes', 'Cancel'] }, (index) => { if (index === 0) { - var volumes = _.clone(this.props.container.Volumes); - var newHostVolume = util.escapePath(path.join(util.home(), util.documents(), 'Kitematic', this.props.container.Name, containerVolume)); - volumes[containerVolume] = newHostVolume; - var binds = _.pairs(volumes).map(function (pair) { - if(util.isWindows()) { - return util.windowsToLinuxPath(pair[1]) + ':' + pair[0]; + var mounts = _.clone(this.props.container.Mounts); + var newSource = util.escapePath(path.join(util.home(), util.documents(), 'Kitematic', this.props.container.Name, destination)); + var binds = mounts.map(function (m) { + let source = m.Source; + if (m.Destination === destination) { + source = newSource; } - return pair[1] + ':' + pair[0]; + + if(util.isWindows()) { + return util.windowsToLinuxPath(source) + ':' + m.Destination; + } + + return source + ':' + m.Destination; }); - mkdirp(newHostVolume, function (err) { + + mkdirp(newSource, function (err) { console.log(err); if (!err) { - shell.showItemInFolder(newHostVolume); + shell.showItemInFolder(newSource); } }); @@ -45,7 +51,7 @@ var ContainerHomeFolder = React.createClass({ } }); } else { - let path = util.isWindows() ? util.linuxToWindowsPath(hostVolume) : hostVolume; + let path = util.isWindows() ? util.linuxToWindowsPath(source) : source; shell.showItemInFolder(path); } }, @@ -60,12 +66,13 @@ var ContainerHomeFolder = React.createClass({ return false; } - var folders = _.map(_.omit(this.props.container.Volumes, (v, k) => k.indexOf('/Users/') !== -1), (val, key) => { - var firstFolder = key; + var folders = _.map(this.props.container.Mounts, (m, i) => { + let destination = m.Destination; + let source = m.Source; return ( -
+
-
{firstFolder}
+
{destination}
); }); diff --git a/src/components/ContainerSettingsVolumes.react.js b/src/components/ContainerSettingsVolumes.react.js index 2ebae2f44a..4a3a920ec3 100644 --- a/src/components/ContainerSettingsVolumes.react.js +++ b/src/components/ContainerSettingsVolumes.react.js @@ -26,16 +26,23 @@ var ContainerSettingsVolumes = React.createClass({ } metrics.track('Choose Directory for Volume'); + if(util.isWindows()) { directory = util.escapePath(util.windowsToLinuxPath(directory)); } - var volumes = _.clone(this.props.container.Volumes); - volumes[dockerVol] = directory; - var binds = _.pairs(volumes).map(function (pair) { - return pair[1] + ':' + pair[0]; + + var mounts = _.clone(this.props.container.Mounts); + _.each(mounts, m => { + if (m.Destination === dockerVol) { + m.Source = directory; + } }); - containerActions.update(this.props.container.Name, {Binds: binds, Volumes: volumes}); + var binds = mounts.map(m => { + return m.Source + ':' + m.Destination; + }); + + containerActions.update(this.props.container.Name, {Binds: binds, Mounts: mounts}); }); }, handleRemoveVolumeClick: function (dockerVol) { @@ -45,13 +52,17 @@ var ContainerSettingsVolumes = React.createClass({ var hostConfig = _.clone(this.props.container.HostConfig); var binds = hostConfig.Binds; - var volumes = _.clone(this.props.container.Volumes); - volumes[dockerVol] = null; + var mounts = _.clone(this.props.container.Mounts); + _.each(mounts, m => { + if (m.Destination === dockerVol) { + m.Source = null; + } + }); var index = _.findIndex(binds, bind => bind.indexOf(`:${dockerVol}`) !== -1); if (index >= 0) { binds.splice(index, 1); } - containerActions.update(this.props.container.Name, {HostConfig: hostConfig, Binds: binds, Volumes: volumes}); + containerActions.update(this.props.container.Name, {HostConfig: hostConfig, Binds: binds, Mounts: mounts}); }, handleOpenVolumeClick: function (path) { metrics.track('Opened Volume Directory', { @@ -69,24 +80,25 @@ var ContainerSettingsVolumes = React.createClass({ } var homeDir = util.isWindows() ? util.windowsToLinuxPath(util.home()) : util.home(); - var volumes = _.map(this.props.container.Volumes, (val, key) => { - if (!val || val.indexOf(homeDir) === -1) { - val = ( + var mounts= _.map(this.props.container.Mounts, (m, i) => { + let source = m.Source, destination = m.Destination; + if (!m.Source || m.Source.indexOf(homeDir) === -1) { + source = ( No Folder ); } else { - let local = util.isWindows() ? util.linuxToWindowsPath(val) : val; - val = ( - {local.replace(process.env.HOME, '~')} + let local = util.isWindows() ? util.linuxToWindowsPath(source) : source; + source = ( + {local.replace(process.env.HOME, '~')} ); } return ( - {key} - {val} + {destination} + {source} - Change - Remove + Change + Remove ); @@ -104,7 +116,7 @@ var ContainerSettingsVolumes = React.createClass({ - {volumes} + {mounts}