Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

os: remove trailing slash from os.tmpdir() #747

Closed
wants to merge 2 commits into from

Conversation

tellnes
Copy link
Contributor

@tellnes tellnes commented Feb 6, 2015

This commit makes os.tmpdir() behave consistently on all platforms. It
changes os.tmpdir() to always return a path without trailing slash.

Semver: Major
Fixes: #715

process.env.TMP ||
process.env.TEMP ||
'/tmp';
}
if (/[\\\/]$/.test(path))
path = path.substr(0, path.length - 1);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. What about more that one trailing slash if someone is messing up with env variables?
  2. What about using path.normalize to take care of all possible scenarios?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Can be easily fixed by s/if/while.
  2. path.normalize does not remove trailing slashes.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this:

path = require('path').normalize(path);
if (/[\\\/]$/.test(path))
  path = path.substr(0, path.length - 1);

(And of course putting the require call outside the function)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: path = path.slice(0, -1);

@micnic micnic added os Issues and PRs related to the os subsystem. semver-major PRs that contain breaking changes and should be released in the next major version. labels Feb 6, 2015
@xaka
Copy link

xaka commented Feb 6, 2015

One very important thing to think about. While __dirname isn't affected by user, os.tempdir() is, because it depends on env variable. Now imagine situation when user sets it wrong, io.js "fixes" it implicitly and it helps your program A to run, but at the same time another program B, written in another language, fails and you have no clue what's going on and why something works and something doesn't. What if program B depends on results of program A, both sharing the same env variables, but as program B doesn't know how to fix trailing slash, it's going to crash. I see how DevOps life might get in trouble here. Probably it's not a big deal, but who knows.

@rvagg
Copy link
Member

rvagg commented Feb 7, 2015

collaborators: please hold off on merging this even if you think it's a good idea, a semver-major change is kind of a big deal at this stage still.

@bnoordhuis
Copy link
Member

LGTM with a suggestion and no strong opinion on using path.normalize().

@tellnes Can you land it on the 'next' branch?

This commit makes `os.tmpdir()` behave consistently on all platforms. It
changes `os.tmpdir()` to always return a path without trailing slash.

Semver: major
Fixes: nodejs#715
PR-URL: nodejs#747
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
@tellnes
Copy link
Contributor Author

tellnes commented Mar 21, 2015

I'm getting some errors in test/sequential/test-fs-watch.js, so I'll wait on landing this untill I have investigated those.

@tellnes
Copy link
Contributor Author

tellnes commented Mar 22, 2015

I can't reproduce the errors, so it was probably something flaky.

Landed in bb97b70

@tellnes tellnes closed this Mar 22, 2015
tellnes added a commit that referenced this pull request Apr 28, 2015
This commit makes `os.tmpdir()` behave consistently on all platforms. It
changes `os.tmpdir()` to always return a path without trailing slash.

Semver: major
Fixes: #715
PR-URL: #747
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
@rvagg rvagg mentioned this pull request Apr 29, 2015
@Fishrock123 Fishrock123 added this to the 2.0.0 milestone Apr 29, 2015
rvagg added a commit that referenced this pull request May 4, 2015
PR-URL: #1532

Notable Changes:

* crypto: significantly reduced memory usage for TLS (Fedor Indutny & Сковорода
  Никита Андреевич) #1529
* net: socket.connect() now accepts a 'lookup' option for a custom DNS
  resolution mechanism, defaults to dns.lookup() (Evan Lucas) #1505
* npm: Upgrade npm to 2.9.0. See the v2.8.4 and v2.9.0 release notes for
  details. Notable items:
  - Add support for default author field to make npm init -y work without
    user-input (@othiym23) npm/npm/d8eee6cf9d
  - Include local modules in npm outdated and npm update (@ArnaudRinquin)
    npm/npm#7426
  - The prefix used before the version number on npm version is now configurable
    via tag-version-prefix (@kkragenbrink) npm/npm#8014
* os: os.tmpdir() is now cross-platform consistent and will no longer returns a
  path with a trailling slash on any platform (Christian Tellnes) #747
* process:
  - process.nextTick() performance has been improved by between 2-42% across the
    benchmark suite, notable because this is heavily used across core (Brian White) #1548
  - New process.geteuid(), process.seteuid(id), process.getegid() and
    process.setegid(id) methods allow you to get and set effective UID and GID
    of the process (Evan Lucas) #1536
* repl:
  - REPL history can be persisted across sessions if the NODE_REPL_HISTORY_FILE
    environment variable is set to a user accessible file,
    NODE_REPL_HISTORY_SIZE can set the maximum history size and defaults to 1000
    (Chris Dickinson) #1513
  - The REPL can be placed in to one of three modes using the NODE_REPL_MODE
    environment variable: sloppy, strict or magic (default); the new magic mode
    will automatically run "strict mode only" statements in strict mode
    (Chris Dickinson) #1513
* smalloc: the 'smalloc' module has been deprecated due to changes coming in V8
  4.4 that will render it unusable
* util: add Promise, Map and Set inspection support (Christopher Monsanto) #1471
* V8: upgrade to 4.2.77.18, see the ChangeLog for full details. Notable items:
  - Classes have moved out of staging; the class keyword is now usable in strict
    mode without flags
  - Object literal enhancements have moved out of staging; shorthand method and
    property syntax is now usable ({ method() { }, property })
  - Rest parameters (function(...args) {}) are implemented in staging behind the
    --harmony-rest-parameters flag
  - Computed property names ({['foo'+'bar']:'bam'}) are implemented in staging
    behind the --harmony-computed-property-names flag
  - Unicode escapes ('\u{xxxx}') are implemented in staging behind the
    --harmony_unicode flag and the --harmony_unicode_regexps flag for use in
    regular expressions
* Windows:
  - Random process termination on Windows fixed (Fedor Indutny) #1512 / #1563
  - The delay-load hook introduced to fix issues with process naming (iojs.exe /
    node.exe) has been made opt-out for native add-ons. Native add-ons should
    include 'win_delay_load_hook': 'false' in their binding.gyp to disable this
    feature if they experience problems . (Bert Belder) #1433
* Governance:
  - Rod Vagg (@rvagg) was added to the Technical Committee (TC)
  - Jeremiah Senkpiel (@Fishrock123) was added to the Technical Committee (TC)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
os Issues and PRs related to the os subsystem. semver-major PRs that contain breaking changes and should be released in the next major version.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants