Commit Graph

113 Commits

Author SHA1 Message Date
David Glasser
9ab74b60d4 Only load moment when needed
Good for performance, and also for the fact that devel is currently semi
broken due to dev bundle issues (will fix soon)
2015-01-13 16:05:18 -08:00
ekatek
0f6c31cab7 upload README.md files to the server and view the excerpt in meteor show
This commit is based on the following design document:
https://mdg.hackpad.com/Creating-and-Updating-Docs-0ZyyDcSZDxp,
and some other stuff from here: https://mdg.hackpad.com/Meteor-Long-Description-wGZ1vIOwVlF
and was code reviewed here: https://github.com/meteor/meteor/pull/3375

It does the following:

- Allow the user to specify package documentation in Package.Describe.
  We will take the README.md file by default, to make the transition easier.
  Users can specify ‘documentation: null’ to not submit a README.md

- From that documentation, extract the section between the first and second header
  to use as the long form description for the package.

- Upload the documentation to the server at publish-time. Allow metadata changes with ‘publish —update’.

- Change the default package skeleton to include the README.md file.
  Also, changes the skeleton to have fewer useless placeholders in Package.describe values.

- Fix a minor bug where Git did not show up when running ‘meteor show’ on local packages.

A note on ‘documentation: null’ and blank documentation — we don’t let maintainers upload
blank README.md files, because we want to encourage people to fill them out. (Instead,
we allow a ‘documentation: null’ as an override) This is a UX issue! It is not a technical thing.

There is more discussion and code review in: https://github.com/meteor/meteor/pull/3375
2015-01-13 13:53:21 -08:00
ekatek
12d030dd53 completely rewrite of ‘meteor show’; some changes to ‘meteor search’.
The ‘show’ command has been completely rewritten. It has different output
and now does the following:

- Interacts with local package versions. Checks in the local package catalog, and
  returns the local versions along with the server versions. When ‘meteor show’ is
  run with a specific version request (‘meteor show foo@<version>’), default to
  showing the local package version (but show a message that a server version is
  available). Running ‘meteor show foo@local’ will always show the local version
  (useful for version-less local packages).

- Simplify the interface. Instead of various ‘show-*’ flags, we only have one: show-all.
  By default, we only show the top 5 official (non-prerelease) unmigrated versions of a
  package (+ local version, if applicable). This can be overridden with ‘show-all’, and we
  let the user know that more versions are available. For releases, ‘show-all’ will show
  non-recommended releases.

- Display publication time for non-local package versions. This makes it easier to run
  ‘meteor show <name>’ and see if <name> is actively maintained. For local packages,
  we display the root directory (useful for large apps or running with the
  LOCAL_PACKAGE_DIRS variable, for example).

- For non-local package versions, show if the version is ‘installed’ (downloaded into the
  warehouse). This involved minor changes to tropohouse.js. The idea is that this should
  give a pretty good clue whether the version can be added offline.

- Show version dependencies. This should help the user understand, track down and
  debug constraint solver failures.

- Do not show version architectures except in —ejson mode.

- Allow an ‘—ejson’ flag to get the output in EJSON format. That should make scripting
  easier. (As a bonus, for release versions, the EJSON output acts as a nice template
  for the release configuration file.)

The search command now does the following:

- Interacts with local package versions. Specifically, local versions override equivalent
  server versions. Also, ‘search’ works on local packages (so, for example,
  ‘meteor search troposphere’ inside the package server app will give you the troposphere
  package).

- Allows an ‘—ejson’ flag to get the outout in EJSON format.

Minor changes to some minor testing infrastructure:

 - A new skeleton package, package-for-show. Its versions contain different
   values for various metadata, so we can test that metadata comes from
   the right version.

 - In several places, replace the pattern of copying around
   package.js files with using the replace function on a placeholder
   string. (Mostly, as applied to package versions).

This is based on these hackpads: https://mdg.hackpad.com/Showing-Package-Metadata-HdGo3Lzx3hR
and https://mdg.hackpad.com/Meteor-Search-Output-1xxEzrAK9YU.
2015-01-13 13:53:20 -08:00
David Greenspan
e885e78348 Change the format returned by PVP.parseConstraint
This is a breaking change to package-version-parser.

A PackageConstraint used to look like this:

```
{ name: String,
  constraintString: String,
  constraints: [{version: String|null,
                 type: String}]}
```

Now it looks like this:
```
{ name: String,
  constraintString: String,
  vConstraint: {
    raw: String,
    alternatives: [{versionString: String|null,
                    type: String}]}}
```

Where (vConstraint instanceof VersionConstraint) and
(vConstraint.raw === constraintString).

This achieves several desirable changes at once.

* `constraint.constraints` for the disjuncts in “1.0.0||2.0.0”
  was confusing.  `alternatives` is better.
* Having a class for VersionConstraint will come in handy because
  we can add methods to it, and we can use it in the constraint
  solver to represent the problem statement.
* The names “vConstraint” and “versionString” are a little verbose,
  but there really shouldn’t be a lot of code that dives into this
  structure, and I really wanted to avoid anyone ever writing:
  `constraint.constraint.alternatives[0].version`, and then wondering
  what sort of object that was (not a parsed PackageVersion! we could
  parse eagerly but that might be slow).
2015-01-07 20:10:44 -08:00
David Greenspan
f9e22884de Fix a comment 2015-01-07 19:05:50 -08:00
David Greenspan
ed5fd8e6cf Don’t use parseConstraint for “package@version”
At least, not directly.  When the tool wants to parse a string of the
form “package@version,” it now uses utils.parsePackageAtVersion.

This way, if I make a breaking change to PV.parseConstraint, I only have
to change a few call sites.
2015-01-07 19:04:55 -08:00
David Greenspan
e072382438 Kill PV.parseVersionConstraint
It parses “=1.0.0” but not “=1.0.0 || 2.0.0”.  It shouldn’t be a public thing (and is never used publicly).

There should be only two things: versions and constraints.  A value that can legally be “=1.0.0” is not a version, it is a constraint (and yet we still call it versionString in a few places).  A value that can be “=1.0.0” but not “1.0.0 || 2.0.0” is not a constraint; it is at best a rare creature called something like a “simple constraint.”  We may expand the syntax of constraints again in the future, and we can’t have N things called a “constraint.”
2015-01-07 16:15:10 -08:00
David Greenspan
a559d708ab Kill “removeBuildIDs” option to parseConstraint
It was only used in one place in resolver.js.  If the semantics of constraints are that buildIDs are ignored, that should be implemented when interpreting a constraint, not parsing it.  We don’t use buildIDs ourselves anymore, so it’s rather theoretical, but we’ve always stripped them out of constraint strings so it’s not even clear why we allow them at all — ie. why we are willing to parse “=1.0.0+foo” as a valid constraint and then throw away the “+foo”.

Bonus: One less place where we conflate two different options objects (utils.parseConstraint and PV.parseConstraint).
2015-01-07 15:52:06 -08:00
Sashko Stubailo
e7167e5257 Factor out almost all fs. and path. calls in the tool
This will be useful when we want to be smart with windows file paths later
Also, all of the file calls are asynchronous with fibers now, which comes with
many benefits.

This is a combination of 23 commits. Original messages:
Wrap a large number of fs calls inside files.*

Convert a few more fs calls to files.*

More moving fs.* to files

Implement read/write streams and open/read/close

Get rid of fs from auth.js

Remove fs and unused imports from catalog-local and catalog-remote

Remove unused imports from catalog.js

Replace a whole lot of fs calls

Fix error

Migrate a lot more fs. calls to files.

Add a temporary symlink method

Convert old test to files.*

Use files.pathX instead of path.x everywhere

Replace path.x to files.pathX in tests

Small fixes to files.js and one rename

Make cleanup run in a fiber

Make wrapping functions take function name in case we need it

Add some timeouts and stuff to HCP tests

wrapFsFunc also makes a sync version of the function

Sometimes you just don't want to yield!

Make sure JsImage readFromDisk doesn't yield

Remove unused imports from npm test

Change order of test now that some things don't yield

Fix missing files import, and add a debug error printout
2014-12-15 15:32:06 -08:00
David Glasser
16af5c4756 Use setImmediate instead of setTimeout for yields
It's faster and still lets IO and signals through.
2014-12-11 12:40:03 -08:00
ekatek
24a4ed9bdc Automatically line-wrap output
Includes the following changes to Console.js:

- Console.info, Console.warn, Console.debug and Console.error now automatically
  line-wrap the output to 80 characters, or the width of the terminal screen (if
  known). This is in line with our current style guide on how things should be wrapped!

- Sometimes, there are parts of text that we don't want to line-wrap. For example, if we are
  telling the user to run 'meteor long-command --with --options' we don't want to
  have a newline in the middle of that! Wrap those commands in Console.command, like
  this:
     Console.info("something and then run", Console.command(command), "and then");
  This also makes them bold if chalk is on, as a nice bonus. So, if we ever turn
  chalk back on, the bolding of commands will be more consistent.

- Sometimes, there is bulkier output that we don't want to format at all, including
  line-wrapping: log snippets, stack traces, JSON output, etc. In that case, we can use
  Console.rawInfo, Console.rawError, Console.rawWarn and Console.rawDebug. Don't use
  Console.command inside the raw* functions! It won't be processed (at all).

- There are fancier things that we can do, other than just simply wrapping things.
  We can indent:
  "  Start here and then when wrapping
     continue over here".

  We frequently do this for commands, for example. In the past, we did this manually --
  but we can't do this for long messages that might get wrapped, and anyway, it is
  good to codify this instead of counting spaces. Allows us to be better about consistency,
  for example.

- We can also add a bulletPoint, which is a small notice in the beginning that looks like
  this:
  " => Start here and then when wrapping
       continue below the bulletPoint".

  Since it is a elss intuitive option, I have wrapped most of the time that we use a
  bulletPoint into helper functions on the Console.js.

- Some common bulletpoints that we use are:
    ASCII Checkboxes (Console.success)
    ASCII X-s (Console.failWarn and Console.failInfo)
    =>  (Console.arrowError, Console.arrowWarn, Console.arrowInfo)
    WARNING (Console.labelWarn)

  The => are sometimes indented, so they take an optional indent argument, showing how
  many spaces to indent by.

The wrapper interface would be less complicated, if there was a more unified conceit behind our
terminal messages. If there is one, it is not documented. My hope is that, in many cases,
moving these to Console will make it easier for someone with great product sense to
clean up our terminal messages. It will also make it easier to write such messages, since
it will be easier to follow an accepted standard.

In the codebase outside of Console:

- Went through and looked at our use of Console.error/info/etc, replacing with rawError/etc
  whenever approporiate.

- Went through and modified most of 'stdout' and 'stderr' calls to use the new functions.
  I made an exception for stuff that doesn't want a new line at the end, or otherwise does
  weird things (ex: print user logs directly), on the basis that, at this juncture, it is
  better to be safe than to be sorry.

- Long messages no longer need to break the code style guide by ignoring indentation rules.
  Fixed that where approporiate.

- Fixed the tests! A number of our stock messages are actually longer than 80 chars.

- Personal favourite: The Android license agreement is now line wrapped! Much better experience.

- There is some more work to do on:
  - longform help (currently comes with built-in linebreaks, would have to change the entire
    mechanism for how that works)
  - Buildmessage sometimes has headers that start with =>, but they are short. I didn't want to
    pass wrapper options all the way to main.captureOrExit before merging the rest of this and
    making sure that we like it. Since these messages are fairly short, I don't think that's
    likely to be a serious problem.

I hope that this makes life easier for us in the future! No more counting chars, no more breaking
the style guide. Better experience for users with wider terminals (or even shorter terminals!).
Let's give this a try.
2014-12-04 17:56:04 -08:00
David Glasser
06114d6983 Fix 'meteor publish'
only works from inside an app! does not include a version lock file!
2014-11-25 09:06:24 -08:00
David Glasser
1a4dcef219 drop utils.splitConstraint 2014-11-25 09:06:22 -08:00
David Glasser
61b1493ee9 Fix meteor add 2014-11-25 09:06:22 -08:00
David Glasser
ad78915322 Fix meteor add cordova:* (but not add packages) 2014-11-25 09:06:21 -08:00
David Glasser
17f5cf6273 'meteor bundle' works with ProjectContext!
- the 'programs' subdirectory is no longer supported

- includeDebug is now an option to bundler.bundle, not global state

- some cordova-specific stuff has been disabled

- lots of other commands are presumably entirely broken
2014-11-25 09:06:12 -08:00
Sashko Stubailo
be644e474e Improve name of escape function for package names 2014-11-12 15:31:10 -08:00
Sashko Stubailo
d2881cfea2 Add functions for escaping and unescaping package names for FS 2014-11-12 15:28:44 -08:00
David Glasser
8793d26d43 fix checkout message if app release lacks METEOR@
Reflow a word-wrapped message to look better

All non-slow 'releases' tests pass now
2014-10-23 10:51:20 -07:00
Justin SB
e92f9b3ff9 Style fix: use _.map instead of _.each 2014-10-22 10:03:42 -07:00
ekatek
f2378ce616 some processing on how we display release name 2014-10-21 17:49:48 -07:00
Justin SB
a25173a71c Format meteor show nicely
We only do 'meteor show mypackage', not 'meteor show mypackage@1.0'
2014-10-21 17:07:45 -07:00
Justin SB
2f86bdf406 Move patience to console 2014-10-17 11:27:16 -07:00
Justin SB
e7eff3e213 Move todo to the right place 2014-10-17 11:27:16 -07:00
Justin SB
d1fdb06103 Add yield to Console.nudge(), remove old exponential nudge which didn't look right 2014-10-17 11:27:13 -07:00
Justin SB
ee5e99d406 Prettier meteor show 2014-10-17 07:15:20 -07:00
Justin SB
a3be9a0ac6 Make meteor search output prettier 2014-10-17 06:26:47 -07:00
Emily Stark
998ca6debf Move netroute require into function where it's used 2014-10-15 10:53:53 -07:00
Emily Stark
301eb65637 Put 'netroute' into dev bundle 2014-10-14 21:14:14 -07:00
Justin SB
96bccec0ac Throttle yields, so we don't slow down in case of rapid calls to yield
This restores the behavior I lost when I removed Patience
2014-10-09 15:48:40 -07:00
Slava Kim
497af45dd8 Whitespace 2014-10-06 23:27:07 -07:00
David Glasser
94ab470b2f fix test-packages and clarify utils.parseUrl docs 2014-10-06 21:18:51 -07:00
David Glasser
7890b14e4e Allow dots in pre-release tag in release versions
We started calling our releases 0.9.3.1-rc.0 to match what you need to
do in semver to get proper numeric comparisons; let's make sure to
create orderKeys that work with them.
2014-10-06 17:01:51 -07:00
Sashko Stubailo
94074d5972 Very carefully handle all of the different cases for servers and ports
1. mobile-server passed
2. running on device
3. running on simulator
2014-10-03 21:06:22 -07:00
David Greenspan
9922283515 Disable progress bar when prompting
Can’t tell for sure if it works, but it ought to
2014-10-03 14:51:22 -07:00
Emily Stark
3069788e01 Rework --mobile-server defaults.
* --port now requires a port ('meteor run --port example.com' isn't valid).
* --mobile-server defaults to your detected IP address and the port from
    --port.
* If you provide a value for --mobile-server, we default to http:// as
  the protocol. A host is required for --mobile-server if you don't omit
  the option entirely. Similar for the --server argument to 'meteor
  build'.

This commit includes the 'netroute' npm module as a core package (which
has binary dependencies) for IP detection. It would be nice to put it in
packages/non-core, but I think it has to be a core package in order to
uniload it.
2014-10-03 12:11:44 -07:00
Justin SB
21adbca461 Check the AVD exists, create if not, launch using android-launch 2014-10-01 18:33:43 -07:00
Justin SB
90a24c9bd8 Check for meteor avd 2014-10-01 15:18:38 -07:00
Emily Stark
c5fdf45568 Rename 'parseHostPort' to 'parseUrl' and add tests 2014-09-29 17:53:00 -07:00
Emily Stark
257de8a62e WIP: '--mobile-port' to '--mobile-server', and allow https 2014-09-29 17:53:00 -07:00
Slava Kim
573f8462e5 Improve Android logs filtering 2014-09-23 15:46:58 -07:00
ekatek
18ffeafe20 start patience messages on a new line 2014-09-19 19:42:01 -07:00
ekatek
a4bc4c16e8 search should show RC packages optionally; sort alphabetically on lists 2014-09-14 19:09:37 -07:00
ekatek
7af9519dc4 bettter message about experimental package versions 2014-09-10 16:17:25 -07:00
ekatek
390b6394b5 strip out extra dependencies on semver in tool 2014-09-10 15:53:23 -07:00
Matthew Arbesfeld
75427d70ce Merge branch 'devel' into cordova-hcp
Conflicts:
	docs/client/docs.js
	examples/leaderboard/.meteor/versions
	meteor
	packages/backbone/package.js
	packages/constraint-solver/package.js
	packages/meetup/package.js
	packages/meteor-tool/package.js
	packages/showdown/package.js
	packages/stylus/package.js
	scripts/admin/meteor-release-experimental.json
	tools/commands-packages.js
	tools/commands.js
	tools/project.js
	tools/tests/old/app-with-private/.meteor/versions
	tools/tests/old/app-with-public/.meteor/versions
	tools/tests/old/empty-app/.meteor/versions
2014-08-27 13:38:57 -07:00
Slava Kim
beb5b95312 Run adb logcat -c asynchronously
so we can print out errors and timeout the operation. Should help in case of
having more than 1 device or emulator open or having an emulator from a wrong
enviornment being open and confusing the user.
2014-08-25 15:40:52 -07:00
David Glasser
e36c4184ab fix old bundler test failure 2014-08-21 17:46:51 -07:00
David Glasser
5d5d1876da De-dup package name/constraint parsing code
Now we can all any of them from even before uniload is ready in the tool

I <3 symlinks
2014-08-21 17:00:21 -07:00
David Glasser
5bc415c51a Improve package name/version parsing errors
We now throw more specific errors, consistent between both tools and
package-version-parser (copy-and-pasted code, sadly, but we really do
have to make this check before uniload-from-checkout).
2014-08-21 16:21:12 -07:00