react-native/local-cli/link
Giles Van Gruisen 5f1408858a Support additional dependency declaration format
Summary:
Thanks for submitting a PR! Please read these instructions carefully:

- [x] Explain the **motivation** for making this change.
- [x] Provide a **test plan** demonstrating that the code is solid.
- [x] Match the **code formatting** of the rest of the codebase.
- [x] Target the `master` branch, NOT a "stable" branch.

Previously, `isInstalled` was somewhat naively checking for the presence
of a string in the `build.gradle` file to determine whether or not that
dependency was already linked. I.e.:

```
    compile project(':${name}')\n
```

…where `name` is replaced with the name of the dependency being checked.

This was inflexible as it only supported that particular format of
`compile` definition. Another, valid `compile` definition follows:

```
    compile(project(':example') { … }
```

However, this failed the check because it didn't _exactly_ match the
format for which the check was searching the `build.gradle` contents. As
a result, running `react-native link` would incorrectly duplicate the
dependency definition and thus cause a crash upon launching the app.

This change adds an `installPattern` to the object returned from
`makeBuildPatch`, which includes the particular dependency name and is
valid for both `compile` definition formats.

This commit adds an additional compile definition in the associated fixture,
an additional test case in `isInstalled.spec.js` to check for this additional
format, and an additional test in `makeBuildPatch.spec.js` to ensure the
object returned includes the aforementioned `installPattern` Regex pattern.

Sign the [CLA][2], if you haven't already. 

Small pull requests are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise please split it. 

Make sure all **tests pass** on both [Travis][3] and [Circle CI][4]. PRs that break tests are unlikely to be merged.

For more info, see the ["Pull Requests"][5] section of our "Contributing" guidelines.

[1]: https://medium.com/martinkonicek/what-is-a-test-plan-8bfc840ec171#.y9lcuqqi9
[2]: https://code.facebook.com/cla
[3]: https://travis-ci.org/facebook/react-native
[4]: http://circleci.com/gh/facebook/react-native
[5]: https://github.com/facebook/react-native/blob/master/CONTRIBUTING.md#pull-requests
Closes https://github.com/facebook/react-native/pull/14475

Differential Revision: D5398552

Pulled By: hramos

fbshipit-source-id: 1eaf84ba5bcfc43202f13c6b8fcfc68c30f36c33
2017-07-11 11:18:56 -07:00
..
__fixtures__ Support additional dependency declaration format 2017-07-11 11:18:56 -07:00
__tests__ Support additional dependency declaration format 2017-07-11 11:18:56 -07:00
android Support additional dependency declaration format 2017-07-11 11:18:56 -07:00
ios match plist indentation with xcode format 2017-03-31 03:03:10 -07:00
windows react-native link (aka rnpm) support for Windows 2016-12-10 16:58:28 -08:00
commandStub.js Add pre/postunlink 2016-08-24 10:58:46 -07:00
getDependencyConfig.js Further RNPM integration 2016-08-22 08:58:37 -07:00
getProjectDependencies.js Further RNPM integration 2016-08-22 08:58:37 -07:00
groupFilesByType.js Further RNPM integration 2016-08-22 08:58:37 -07:00
link.js Stronger config types 2017-05-03 06:51:47 -07:00
pollParams.js Updating the usage of inquirer API 2017-07-06 14:34:45 -07:00
promiseWaterfall.js Further RNPM integration 2016-08-22 08:58:37 -07:00
promisify.js Add pre/postunlink 2016-08-24 10:58:46 -07:00
unlink.js Improve `unlink` on rnpm 2017-01-12 13:58:34 -08:00