Closed
Bug 1138795
Opened 9 years ago
Closed 2 years ago
unixMode from writeAtomic not having an effect. have to follow writeAtomic with setPermissions
Categories
(Toolkit Graveyard :: OS.File, defect)
Tracking
(Not tracked)
RESOLVED
WONTFIX
People
(Reporter: noitidart, Unassigned)
Details
User Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Build ID: 20150223185154 Steps to reproduce: Run this code which creates a desktop file with unixMode: 0o4777 can copy paste code to scratchpad: ``` function writeDotDesktop(path_toFile, name, exec, path_icon) { var deferred_writeDotDesktop = Promise.defer(); exec = Services.dirsvc.get('XREExeF', Ci.nsIFile).path + ' -no-remote -P'; name = 'Firefox - Profile Manager'; path_icon = OS.Path.join('/home/noit/Desktop/profilist-ff-channel-logos', 'nightly512.png'); var cmdArr = [ '[Desktop Entry]', 'Name=' + name, 'Type=Application', 'Comment=Web Application', 'Exec=' + exec, 'Icon=' + path_icon ]; var cmdStr = cmdArr.join('\n'); path_toFile = OS.Path.join(path_toFile, name + '.desktop'); var promise_writeScript = OS.File.writeAtomic(path_toFile, cmdStr, {encoding:'utf-8', unixMode:0o4777, noOverwrite:false}); // doing unixMode:0o4777 here doesn't work, i have to `OS.File.setPermissions(path_toFile, {unixMode:0o4777})` after the file is made promise_writeScript.then( function(aVal) { console.log('Fullfilled - promise_writeScript - ', aVal); // start - do stuff here - promise_writeScript deferred_writeDotDesktop.resolve('.desktop file made'); //doPromiseScriptSetPerm(); // end - do stuff here - promise_writeScript }, function(aReason) { var rejObj = {name:'promise_writeScript', aReason:aReason}; console.warn('Rejected - promise_writeScript - ', rejObj); deferred_writeDotDesktop.reject(rejObj); } ).catch( function(aCaught) { var rejObj = {name:'promise_writeScript', aCaught:aCaught}; console.error('Caught - promise_writeScript - ', rejObj); deferred_writeDotDesktop.reject(rejObj); } ); return deferred_writeDotDesktop.promise; }; var promise_makeShScpt = writeDotDesktop(OS.Path.join(OS.Constants.Path.desktopDir)); promise_makeShScpt.then( function(aVal) { console.log('Fullfilled - promise_makeShScpt - ', aVal); // start - do stuff here - promise_makeShScpt // end - do stuff here - promise_makeShScpt }, function(aReason) { var rejObj = {name:'promise_makeShScpt', aReason:aReason}; console.warn('Rejected - promise_makeShScpt - ', rejObj); } ).catch( function(aCaught) { var rejObj = {name:'promise_makeShScpt', aCaught:aCaught}; console.error('Caught - promise_makeShScpt - ', rejObj); } ); ``` Actual results: File was created on desktop. Clicking the file threw a popup saying it is from an unidentified developer blah blah. so it wouldnt lauch. Expected results: it should have obeyed the unixMode:0o4777 i had to run a setPermissions with unixMode:0o4777 afterwards to get it to work: copy paste code: ``` function writeDotDesktop(path_toFile, name, exec, path_icon) { var deferred_writeDotDesktop = Promise.defer(); exec = Services.dirsvc.get('XREExeF', Ci.nsIFile).path + ' -no-remote -P'; name = 'Firefox - Profile Manager'; path_icon = OS.Path.join('/home/noit/Desktop/profilist-ff-channel-logos', 'nightly512.png'); var cmdArr = [ '[Desktop Entry]', 'Name=' + name, 'Type=Application', 'Comment=Web Application', 'Exec=' + exec, 'Icon=' + path_icon ]; var cmdStr = cmdArr.join('\n'); path_toFile = OS.Path.join(path_toFile, name + '.desktop'); // start - setup set perms var doPromiseScriptSetPerm = function() { var promise_setPermsScript = OS.File.setPermissions(path_toFile, {unixMode:0o4777}); promise_setPermsScript.then( function(aVal) { console.log('Fullfilled - promise_setPermsScript - ', aVal); // start - do stuff here - promise_setPermsScript deferred_writeDotDesktop.resolve('.desktop file made and permmed') // end - do stuff here - promise_setPermsScript }, function(aReason) { var rejObj = {name:'promise_setPermsScript', aReason:aReason}; console.warn('Rejected - promise_setPermsScript - ', rejObj); deferred_writeDotDesktop.reject(rejObj); } ).catch( function(aCaught) { var rejObj = {name:'promise_setPermsScript', aCaught:aCaught}; console.error('Caught - promise_setPermsScript - ', rejObj); deferred_writeDotDesktop.reject(rejObj); } ); }; // end - setup set perms var promise_writeScript = OS.File.writeAtomic(path_toFile, cmdStr, {encoding:'utf-8', /*unixMode:0o4777,*/ noOverwrite:false}); // doing unixMode:0o4777 here doesn't work, i have to `OS.File.setPermissions(path_toFile, {unixMode:0o4777})` after the file is made promise_writeScript.then( function(aVal) { console.log('Fullfilled - promise_writeScript - ', aVal); // start - do stuff here - promise_writeScript //deferred_writeDotDesktop.resolve('.desktop file made'); doPromiseScriptSetPerm(); // end - do stuff here - promise_writeScript }, function(aReason) { var rejObj = {name:'promise_writeScript', aReason:aReason}; console.warn('Rejected - promise_writeScript - ', rejObj); deferred_writeDotDesktop.reject(rejObj); } ).catch( function(aCaught) { var rejObj = {name:'promise_writeScript', aCaught:aCaught}; console.error('Caught - promise_writeScript - ', rejObj); deferred_writeDotDesktop.reject(rejObj); } ); return deferred_writeDotDesktop.promise; }; var promise_makeShScpt = writeDotDesktop(OS.Path.join(OS.Constants.Path.desktopDir)); promise_makeShScpt.then( function(aVal) { console.log('Fullfilled - promise_makeShScpt - ', aVal); // start - do stuff here - promise_makeShScpt // end - do stuff here - promise_makeShScpt }, function(aReason) { var rejObj = {name:'promise_makeShScpt', aReason:aReason}; console.warn('Rejected - promise_makeShScpt - ', rejObj); } ).catch( function(aCaught) { var rejObj = {name:'promise_makeShScpt', aCaught:aCaught}; console.error('Caught - promise_makeShScpt - ', rejObj); } ); ```
Updated•9 years ago
|
Component: Untriaged → OS.File
Product: Firefox → Toolkit
Comment 1•2 years ago
|
||
OSFIle is being replaced with IOUtils and PathUtils.
Status: UNCONFIRMED → RESOLVED
Closed: 2 years ago
Resolution: --- → WONTFIX
Updated•11 months ago
|
Product: Toolkit → Toolkit Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•