Titanium JIRA Archive
Titanium SDK/CLI (TIMOB)

[TIMOB-17332] CLI: Using same option twice with different values causes crash

GitHub Issuen/a
TypeBug
PriorityLow
StatusOpen
ResolutionUnresolved
Affected Version/sRelease 3.3.0
Fix Version/sn/a
ComponentsTooling
Labelscb-tooling, cli
ReporterFokke Zandbergen
AssigneeChris Barber
Created2014-07-15T13:24:41.000+0000
Updated2020-02-05T23:55:58.000+0000

Description

Execute the following:
ti build -p ios --project-dir .  --project-dir ./
And you will get:
/usr/local/lib/node_modules/titanium/node_modules/longjohn/dist/longjohn.js:185
        throw e;
              ^
TypeError: Arguments to path.join must be strings
    at path.js:360:15
    at Array.filter (native)
    at exports.join (path.js:358:36)
    at exports.resolvePath (/Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/node_modules/node-appc/lib/fs.js:52:20)
    at conf.options.appc.util.mix.project-dir.validate (/Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/cli/commands/build.js:132:27)
    at CLI.<anonymous> (/usr/local/lib/node_modules/titanium/lib/cli.js:622:14)
    at /usr/local/lib/node_modules/titanium/node_modules/async/lib/async.js:551:21
    at /usr/local/lib/node_modules/titanium/node_modules/async/lib/async.js:227:13
    at iterate (/usr/local/lib/node_modules/titanium/node_modules/async/lib/async.js:134:13)
    at async.eachSeries (/usr/local/lib/node_modules/titanium/node_modules/async/lib/async.js:150:9)
---------------------------------------------
    at run (/Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/node_modules/node-appc/lib/subprocess.js:59:8)
    at /Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/iphone/cli/lib/detect.js:356:9
    at /Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/node_modules/async/lib/async.js:511:21
    at /Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/node_modules/async/lib/async.js:227:13
    at /Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/node_modules/async/lib/async.js:111:13
    at Array.forEach (native)
    at _each (/Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/node_modules/async/lib/async.js:32:24)
    at async.each (/Users/fokkezb/Library/Application Support/Titanium/mobilesdk/osx/3.3.0.RC2/node_modules/async/lib/async.js:110:9)
Why would you want to use the same options twice? a) Because you can. b) Because this can happen if you use build tools like TiShadow adding options instead of replacing them. What it should do? * Use the last value

Comments

  1. Mauro Parra-Miranda 2014-07-15

    Thanks for your report! The priority will be set by the platform team.
  2. Ingo Muschenetz 2014-07-15

    I think it's worthy to fix, but tools shouldn't be blindly tacking on repeating values :)
  3. Chris Barber 2014-07-15

    I believe if an option is encountered multiple times, the Titanium CLI argument parser will convert the option value into an array of values: https://github.com/appcelerator/titanium/blob/master/lib/context.js#L609. We need to either: 1. Overwrite duplicate values instead of creating an array of values 2. Update nearly all option callbacks detect an array and use the last value I *HIGHLY* recommend option #2. It's pretty easy since each option has a callback that is called when the parser encounters the value. I believe we'd need to update nearly all of the options to do this, but it will allow the most flexibility when the time comes that we want to cleanly support multiple values.
  4. Ingo Muschenetz 2014-07-15

    I'm fine with option 2.
  5. Chris Barber 2017-01-04

    I wasn't able to reproduce this using the example ti build -p ios \-\-project-dir . \-\-project-dir ./, but that's because the resolved path for both project dirs are the same. However, if they are different, then you will get the error above.
  6. Chris Barber 2020-02-05

    This won't be an issue in Titanium CLI.next.

JSON Source