Fri, 19 Oct 2012 13:52:34 +0200 obsolete: add missing line feed in debug error message stable
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 19 Oct 2012 13:52:34 +0200] rev 17857
obsolete: add missing line feed in debug error message
Tue, 23 Oct 2012 09:28:42 +0200 merge with stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 23 Oct 2012 09:28:42 +0200] rev 17856
merge with stable
Tue, 23 Oct 2012 09:22:46 +0200 localrepo: translate "push includes X changeset" only once stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 23 Oct 2012 09:22:46 +0200] rev 17855
localrepo: translate "push includes X changeset" only once This was introduced in 12fdaa30063a
Tue, 23 Oct 2012 09:27:48 +0200 merge stable heads stable
Thomas Arendsen Hein <thomas@intevation.de> [Tue, 23 Oct 2012 09:27:48 +0200] rev 17854
merge stable heads
Mon, 22 Oct 2012 21:56:13 -0700 Merge with stable
Bryan O'Sullivan <bryano@fb.com> [Mon, 22 Oct 2012 21:56:13 -0700] rev 17853
Merge with stable
Mon, 22 Oct 2012 21:54:36 -0700 Merge repeated-slash fix stable
Bryan O'Sullivan <bryano@fb.com> [Mon, 22 Oct 2012 21:54:36 -0700] rev 17852
Merge repeated-slash fix
Mon, 22 Oct 2012 18:05:40 -0700 verify: tolerate repeated slashes in a converted repo (issue3665)
Bryan O'Sullivan <bryano@fb.com> [Mon, 22 Oct 2012 18:05:40 -0700] rev 17851
verify: tolerate repeated slashes in a converted repo (issue3665) These slashes are a hangover from issue3612, fixed in e4da793998bf. Although the bugfix in that commit is correct, the test it adds does not replicate the conditions for the bug correctly.
Sun, 21 Oct 2012 11:20:33 -0200 scmutil: generalize message to make it more i18n-friendly stable
Wagner Bruna <wbruna@yahoo.com> [Sun, 21 Oct 2012 11:20:33 -0200] rev 17850
scmutil: generalize message to make it more i18n-friendly
Mon, 22 Oct 2012 17:23:31 -0500 update: check for missing files with --check (issue3595) stable
Matt Mackall <mpm@selenic.com> [Mon, 22 Oct 2012 17:23:31 -0500] rev 17849
update: check for missing files with --check (issue3595)
Mon, 22 Oct 2012 16:06:47 -0500 remove: don't return error on directories with tracked files stable
Matt Mackall <mpm@selenic.com> [Mon, 22 Oct 2012 16:06:47 -0500] rev 17848
remove: don't return error on directories with tracked files Spotted by Sergey <sergemp@mail.ru>
Sat, 20 Oct 2012 21:43:46 -0400 largefiles: use 'default' instead of 'default-push' when pulling (issue3584) stable
Matt Harbison <matt_harbison@yahoo.com> [Sat, 20 Oct 2012 21:43:46 -0400] rev 17847
largefiles: use 'default' instead of 'default-push' when pulling (issue3584) This only applies to downloading largefiles, and only when no source for the pull is explicitly provided. The repository itself was properly being pulled via 'default' previously. Using --all-largefiles is not necessary on a bare pull to test this (this existing test is merely a convenience), but it is required to test pulling on the rebase path. Note that the errors generated in the --rebase case are because the repo specified doesn't have the largefiles in its cache (though they are in the user cache), so the errors are misleading. Specifying --all-largefiles when cloning to 'b' fixes this, but instead of errors, it reports caching only 5 largefiles instead of the 9 that come up missing. Likely this is because the largefile download procedure tries to download missing files for each rev, and some of the files have standins in more than one rev that gets pulled.
Mon, 22 Oct 2012 12:00:21 -0700 scmutil: add mustaudit delegation to filtervfs (issue3673) stable
Bryan O'Sullivan <bryano@fb.com> [Mon, 22 Oct 2012 12:00:21 -0700] rev 17846
scmutil: add mustaudit delegation to filtervfs (issue3673)
Mon, 22 Oct 2012 11:59:11 -0700 scmutil: abstract out mustaudit delegation stable
Bryan O'Sullivan <bryano@fb.com> [Mon, 22 Oct 2012 11:59:11 -0700] rev 17845
scmutil: abstract out mustaudit delegation
Fri, 19 Oct 2012 14:47:55 -0500 clone: don't %-escape the default destination (issue3145) stable
Matt Mackall <mpm@selenic.com> [Fri, 19 Oct 2012 14:47:55 -0500] rev 17844
clone: don't %-escape the default destination (issue3145)
Fri, 19 Oct 2012 15:45:16 +0200 test-largefiles: fix failing test on Windows stable
Adrian Buehlmann <adrian@cadifra.com> [Fri, 19 Oct 2012 15:45:16 +0200] rev 17843
test-largefiles: fix failing test on Windows The test failed due to / vs. \ in paths issues. Fixes 08d11b82d9fc.
Fri, 19 Oct 2012 15:03:35 +0200 test-push-http: fix failing test on Windows stable
Adrian Buehlmann <adrian@cadifra.com> [Fri, 19 Oct 2012 15:03:35 +0200] rev 17842
test-push-http: fix failing test on Windows The test failed due to problems with escaping. Fixes 8474be4412ca.
Fri, 19 Oct 2012 01:38:53 -0500 Added signature for changeset d118a4f4fd16 stable
Matt Mackall <mpm@selenic.com> [Fri, 19 Oct 2012 01:38:53 -0500] rev 17841
Added signature for changeset d118a4f4fd16
Fri, 19 Oct 2012 01:38:49 -0500 Added tag 2.4-rc for changeset d118a4f4fd16 stable
Matt Mackall <mpm@selenic.com> [Fri, 19 Oct 2012 01:38:49 -0500] rev 17840
Added tag 2.4-rc for changeset d118a4f4fd16
Fri, 19 Oct 2012 01:34:50 -0500 merge default into stable for 2.4 code freeze stable 2.4-rc
Matt Mackall <mpm@selenic.com> [Fri, 19 Oct 2012 01:34:50 -0500] rev 17839
merge default into stable for 2.4 code freeze
Thu, 26 Jul 2012 21:29:39 +0200 hgwebdir: make collapsed folders easier to distinguish from repositories
Angel Ezquerra <angel.ezquerra@gmail.com> [Thu, 26 Jul 2012 21:29:39 +0200] rev 17838
hgwebdir: make collapsed folders easier to distinguish from repositories Add a "/" character after the collapsed folder names, to make them easier to distinguish from regular repository and subrepository entries.
Thu, 18 Oct 2012 10:31:15 +0900 help: indicate help omitting if help document is not fully displayed
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 18 Oct 2012 10:31:15 +0900] rev 17837
help: indicate help omitting if help document is not fully displayed Before this patch, there is no information about whether help document is fully displayed or not. So, some users seem to misunderstand "-v" for "hg help" just as "the option to show list of global options": experience on "hg help -v" for some commands not containing verbose containers may strengthen this misunderstanding. Such users have less opportunity for noticing omitted help document, and this may cause insufficient understanding about Mercurial. This patch indicates help omitting, if help document is not fully displayed. For command help, the message below is displayed at the end of help output, if help document is not fully displayed: use "hg -v help xxxx" to show more complete help and the global options and otherwise: use "hg -v help xxxx" to show the global options For topics and extensions help, the message below is displayed, only if help document is not fully displayed: use "hg help -v xxxx" to show more complete help This allows users to know whether there is any omitted information or not exactly, and can trigger "hg help -v" invocation. This patch causes formatting help document twice, to switch messages one for omitted help, and another for not omitted. This decreases performance of help document formatting, but it is not mainly focused at help command invocation, so this wouldn't become problem.
Thu, 18 Oct 2012 23:55:15 -0500 httpclient: fix calling convention violation
Matt Mackall <mpm@selenic.com> [Thu, 18 Oct 2012 23:55:15 -0500] rev 17836
httpclient: fix calling convention violation
Mon, 08 Oct 2012 23:49:36 +0900 largefiles: distinguish "no remote repo" from "no files to upload" (issue3651)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 08 Oct 2012 23:49:36 +0900] rev 17835
largefiles: distinguish "no remote repo" from "no files to upload" (issue3651) Before this patch, when no files to upload, "hg outgoing --large" and "hg summary --large" show "no remote repo", even though valid remote repository is specified. It is because that "getoutgoinglfiles()" returns None, not only if no valid remote repository is specified, but also if no files to upload. This patch makes "getoutgoinglfiles()" return empty list when no files to upload, and makes largefiles show "no files to upload" message at that time. This patch doesn't test "if toupload is None" route in "overrideoutgoing()", because this route is not executed unless remote repository becomes inaccessible just before largefiles specific processing: successful execution of "orig()" means that at least one of "default", "default-push" or dest is valid one, and that "getoutgoinglfiles()" never returns None in such cases. At "hg summary --large" invocation, this patch shows message below: largefiles: (no files to upload) This follows the message shown by "hg summary" with MQ: mq: (empty queue)
Fri, 19 Oct 2012 00:50:12 +0200 push: refuse to push bumped changeset
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 19 Oct 2012 00:50:12 +0200] rev 17834
push: refuse to push bumped changeset This applies the same logic as used for `obsolete` and `unstable` changesets. Refuse to push them without force. We'll probably want to factor this logic with two new functions `pctx.troubled()` and `ctx.troubles()`. But I'm waiting for the third "trouble" to make it into core.
Fri, 19 Oct 2012 00:46:39 +0200 obsolete: simplify push abort message
push includes an xxx changeset: yyyyyyyyyy [Fri, 19 Oct 2012 00:46:39 +0200] rev 17833
obsolete: simplify push abort message to: push includes xxx changeset: yyyyyyyyyy
Fri, 19 Oct 2012 00:43:44 +0200 context: add a `bumped` method to `changectx`
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 19 Oct 2012 00:43:44 +0200] rev 17832
context: add a `bumped` method to `changectx` Same as `unstable()`, returns true if the changeset is bumped.
Fri, 19 Oct 2012 00:41:53 +0200 obsolete: add a flag that allows fixing "bumped" changeset
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 19 Oct 2012 00:41:53 +0200] rev 17831
obsolete: add a flag that allows fixing "bumped" changeset The first obsolescence flag is introduced to allows for fixing the "bumped" changeset situation. bumpedfix == 1. Creator of new changesets intended to fix "bumped" situation should not forget to add this flag to the marker. Otherwise the newly created changeset will be bumped too. See inlined documentation for details.
Mon, 15 Oct 2012 14:45:27 +0200 debugobsolete: add --flags option
Pierre-Yves David <pierre-yves.david@logilab.fr> [Mon, 15 Oct 2012 14:45:27 +0200] rev 17830
debugobsolete: add --flags option This options allows to specify the `flag` part of obsolete markers. For details about marker flags, check the `mercurial/obsolete.py` documentation. Some random flag are added to a marker to test this feature.
Fri, 19 Oct 2012 00:39:06 +0200 revset: add a bumped revset
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 19 Oct 2012 00:39:06 +0200] rev 17829
revset: add a bumped revset Select bumped changesets.
Fri, 19 Oct 2012 00:36:18 +0200 obsolete: add the detection of bumped changeset.
Pierre-Yves David <pierre-yves.david@logilab.fr> [Fri, 19 Oct 2012 00:36:18 +0200] rev 17828
obsolete: add the detection of bumped changeset. Bumped changesets are non-public changesets that tries to succeed a public() changeset.
Tue, 16 Oct 2012 15:49:58 +0200 obsolete: have `allsuccessors` takes a list of nodes
Pierre-Yves David <pierre-yves.david@logilab.fr> [Tue, 16 Oct 2012 15:49:58 +0200] rev 17827
obsolete: have `allsuccessors` takes a list of nodes Additional logic, used to detect mutable history troubles, will need to quickly compute successors of a whole set of changeset.
Fri, 19 Oct 2012 00:30:11 +0200 obsolete: rename `anysuccessors` into `allsuccessors`
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 19 Oct 2012 00:30:11 +0200] rev 17826
obsolete: rename `anysuccessors` into `allsuccessors` The "any" prefix looks like it returned a boolean. `allsuccessors` is more accurate.
Fri, 19 Oct 2012 00:28:13 +0200 obsolete: rename `getobscache` into `getrevs`
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Fri, 19 Oct 2012 00:28:13 +0200] rev 17825
obsolete: rename `getobscache` into `getrevs` The old name was not very good for two reasons: - caller does not care about "cache", - set of revision returned may not be obsolete at all. The new name was suggested by Kevin Bullock.
Sun, 14 Oct 2012 15:10:13 -0400 largefiles: always create the cache and standin directories when cloning
Matt Harbison <matt_harbison@yahoo.com> [Sun, 14 Oct 2012 15:10:13 -0400] rev 17824
largefiles: always create the cache and standin directories when cloning The standin matcher only works if the .hglf directory exists (and it won't exist if 'clone -U' is used, unless --all-largefiles is also specified). Since not even 'update -r null' will get rid of the standin directory, this ensures that the standin directory always exists if the repo has the 'largefiles' requirement. This requirement is only set after a largefile is committed, so these directories will not be created for repos that have the extension enabled but have not committed a largefile. With the standin directory in place, 'lfconvert --to-normal' will now be able to download the required largefiles when converting a repo that was created with 'clone -U', and whose files are not in the usercache. The downloadlfiles command could probably be put inside the 'largefiles' requirement conditional too, but given that the user specified --all-largefiles, there is likely an expectation to print out the number of largefiles downloaded, even if it is 0.
Sun, 14 Oct 2012 14:44:08 -0400 largefiles: fix a traceback in lfconvert if a largefile is missing (issue3519)
Matt Harbison <matt_harbison@yahoo.com> [Sun, 14 Oct 2012 14:44:08 -0400] rev 17823
largefiles: fix a traceback in lfconvert if a largefile is missing (issue3519) The largefile may be missing for various reasons, including that a remote repository was cloned without the --all-largefiles option. Therefore, it seems reasonable to attempt to download the missing files and failing that, abort and indicate the affected file and revision so the user can manually fix the problem.
Thu, 18 Oct 2012 16:34:13 -0500 bookmarks: further flatten code
Kevin Bullock <kbullock@ringworld.org> [Thu, 18 Oct 2012 16:34:13 -0500] rev 17822
bookmarks: further flatten code This hopefully clarifies the behavior when no NAME is passed, by separating the branches for listing bookmarks vs. deactivating the current bookmark.
Wed, 17 Oct 2012 21:42:06 -0500 scmutil: add bad character checking to checknewlabel
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 21:42:06 -0500] rev 17821
scmutil: add bad character checking to checknewlabel This factors out the checks from tags and bookmarks, and newly applies the same prohibitions to branches. checknewlabel takes a new parameter, kind, indicating the kind of label being checked. Test coverage is added for all three types of labels.
Wed, 17 Oct 2012 21:39:07 -0500 tag: disallow '\0' in tag names
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 21:39:07 -0500] rev 17820
tag: disallow '\0' in tag names This brings the list of disallowed characters in line with bookmarks.
Wed, 17 Oct 2012 21:32:19 -0500 dirstate: use scmutil.checknewlabel to check new branch name
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 21:32:19 -0500] rev 17819
dirstate: use scmutil.checknewlabel to check new branch name
Wed, 17 Oct 2012 17:23:39 -0500 bookmarks: use scmutil.checknewlabel
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 17:23:39 -0500] rev 17818
bookmarks: use scmutil.checknewlabel Validation is pulled up into the commands module to avoid an import cycle.
Wed, 17 Oct 2012 16:34:46 -0500 scmutil: add function to validate new branch, tag, and bookmark names
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 16:34:46 -0500] rev 17817
scmutil: add function to validate new branch, tag, and bookmark names For now the new function only checks to make sure the new label name isn't a reserved name ('tip', '.', or 'null'). Eventually more of the checks will be unified between the different types of labels. The `tag` command is trivially updated to use it. Updating branches and bookmarks to use it is slightly more invasive and thus reserved for later patches.
Wed, 17 Oct 2012 16:32:43 -0500 bookmarks: disallow bookmarks named 'tip', '.', or 'null'
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 16:32:43 -0500] rev 17816
bookmarks: disallow bookmarks named 'tip', '.', or 'null' This makes bookmarks reject the same reserved names as tags and branches.
Wed, 17 Oct 2012 17:03:01 -0500 bookmarks: abort directly on invalid name
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 17:03:01 -0500] rev 17815
bookmarks: abort directly on invalid name This consolidates the abort message for a bookmark name containing invalid characters into one place, and renames the valid() method to checkvalid() to reflect the fact that it's no longer a predicate.
Wed, 17 Oct 2012 16:23:42 -0500 bookmarks: remove redundant check for newline
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 16:23:42 -0500] rev 17814
bookmarks: remove redundant check for newline New bookmarks are already checked for illegal characters (':', '\0', '\n', and '\r') in bookmarks.valid().
Wed, 17 Oct 2012 22:25:41 -0500 test-tag: test that all reserved names are rejected
Kevin Bullock <kbullock@ringworld.org> [Wed, 17 Oct 2012 22:25:41 -0500] rev 17813
test-tag: test that all reserved names are rejected
Thu, 18 Oct 2012 17:54:34 +0200 amend: do a bare kill of temporary changeset
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 18 Oct 2012 17:54:34 +0200] rev 17812
amend: do a bare kill of temporary changeset Before this changeset the temporary changeset created by amend was made a precursors on the amend result. This add unnecessary complexity to the obsolescence graph. This temporary commit will probably disappear in the future. It is an unwanted byproduct of amend that nobody cares about.
Thu, 18 Oct 2012 22:12:15 +0200 amend: add noise in extra to avoid creating obsolescence cycle (issue3664)
Pierre-Yves David <pierre-yves.david@logilab.fr> [Thu, 18 Oct 2012 22:12:15 +0200] rev 17811
amend: add noise in extra to avoid creating obsolescence cycle (issue3664) Obsolescence cycle are bad and should be avoided as much as possible. The current amend implemented touch changeset meta data as few as possible. This make is easy for amend to result in the same node than a precursors. We add some deterministic noise in extra to avoid this. In practice, the hex of the amended changeset is stored in 'amend_source' extra key.
Thu, 18 Oct 2012 22:04:49 +0200 changelog: extract description cleaning logic in a dedicated function
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Thu, 18 Oct 2012 22:04:49 +0200] rev 17810
changelog: extract description cleaning logic in a dedicated function The amend logic have use for it.
Thu, 18 Oct 2012 22:35:28 +0200 bookmarks: replace code-redundant comment with something more useful
Adrian Buehlmann <adrian@cadifra.com> [Thu, 18 Oct 2012 22:35:28 +0200] rev 17809
bookmarks: replace code-redundant comment with something more useful
Thu, 18 Oct 2012 22:33:58 +0200 bookmarks: remove another uneeded return
Adrian Buehlmann <adrian@cadifra.com> [Thu, 18 Oct 2012 22:33:58 +0200] rev 17808
bookmarks: remove another uneeded return
Sat, 05 May 2012 15:30:54 -0500 update: remove unnecessary argument check
Kevin Bullock <kbullock@ringworld.org> [Sat, 05 May 2012 15:30:54 -0500] rev 17807
update: remove unnecessary argument check
Sun, 14 Oct 2012 20:27:55 +0200 grep: colorize all fields
Idan Kamara <idankk86@gmail.com> [Sun, 14 Oct 2012 20:27:55 +0200] rev 17806
grep: colorize all fields Colors were picked in accordance to GNU grep.
Sun, 14 Oct 2012 20:40:23 +0200 test-grep: add a test for -l
Idan Kamara <idankk86@gmail.com> [Sun, 14 Oct 2012 20:40:23 +0200] rev 17805
test-grep: add a test for -l
Mon, 08 Oct 2012 15:54:53 +0200 clfilter: remove use of xrange in revset
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 15:54:53 +0200] rev 17804
clfilter: remove use of xrange in revset For changelog level filtering to take effect it need to be used for any iteration. Some remaining use of `xrange` in revset code is replace by proper use of `changelog.revs` or direct iteration over changelog.
Mon, 08 Oct 2012 15:41:58 +0200 largefile: use `self` in repo method instead of `repo`
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 08 Oct 2012 15:41:58 +0200] rev 17803
largefile: use `self` in repo method instead of `repo` Most method added (or overwritten) to repo by largefile works on `repo` instead of `self`. This currently works without trouble because `self` and `repo` are likely the same. However this is semantically dubious and this may cause issue for filtering. `self` may be proxy object different from the `repo` one. This changeset fix that and use `self` when applicable.
Tue, 16 Oct 2012 23:12:07 +0200 test: use proper subclassing in `test-issue2137.t`.
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Tue, 16 Oct 2012 23:12:07 +0200] rev 17802
test: use proper subclassing in `test-issue2137.t`. To use changelog filtering on the repository, we plan to use "proxy" object that perfectly mock a repository but with a filtered changelog. Altering the `repo.commit` function using `extensions.wrapfunction` will prevent the logic to propagate to the proxy class by the mean of inheritance. We changes the extension to use subclassing as expectable.
Thu, 18 Oct 2012 00:44:32 +0200 run-tests: remove dead code for supporting old test scripts
Mads Kiilerich <mads@kiilerich.com> [Thu, 18 Oct 2012 00:44:32 +0200] rev 17801
run-tests: remove dead code for supporting old test scripts
Thu, 18 Oct 2012 00:33:29 +0200 run-tests: handle windows crlf in .py tests again
Mads Kiilerich <mads@kiilerich.com> [Thu, 18 Oct 2012 00:33:29 +0200] rev 17800
run-tests: handle windows crlf in .py tests again Before af7c6bc48d8d all crlf occurrences in test output on Windows were simply changed to lf. In af7c6bc48d8d it was replaced by more clever handling in the .t test runner ... but the .py runner was forgotten and many .py tests were failing on Windows. The crlf/lf replacement is now reintroduced in the py test runner.
Thu, 18 Oct 2012 00:33:26 +0200 test-run-tests.t: fix wrong test case for cr handling on Windows
Mads Kiilerich <mads@kiilerich.com> [Thu, 18 Oct 2012 00:33:26 +0200] rev 17799
test-run-tests.t: fix wrong test case for cr handling on Windows An incorrect and failing test case was introduced in af7c6bc48d8d.
Wed, 17 Oct 2012 18:09:00 +0900 win32mbcs: add reversing wrapper for some unicode-incompatible functions.
Shun-ichi GOTO <shunichi.goto@gmail.com> [Wed, 17 Oct 2012 18:09:00 +0900] rev 17798
win32mbcs: add reversing wrapper for some unicode-incompatible functions. This changeset fix the problem to use win32mbcs with mercurial 2.3 or later. The problem is brought by side effect of modification of encoding.upper() (changeset 17236:9fb8312dbdbd) because upper() does not accept unicode string argument. So wrapped util.normcase() which uses upper() will fail. In other words, upper() and lower() are unicode incompatible. To fix this issue, this changeset adds new wrapper for reversed conversion (unicode to str) for lower() and upper() to use them safely.
(0) -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 +3000 +10000 +30000 tip