Thu, 29 Mar 2012 22:16:56 +0900 tests: skip test-lfconvert.t if not support symblic link
Takumi IINO <trot.thunder@gmail.com> [Thu, 29 Mar 2012 22:16:56 +0900] rev 16310
tests: skip test-lfconvert.t if not support symblic link Windows not support symbolic link. but test-lfconvert.t execute 'ln -s' command. @@ -51,8 +51,6 @@ skipping incorrectly formatted tag IncorrectlyFormattedTag! skipping incorrectly formatted id invalidhash no mapping for id 0123456789abcdef - abort: renamed/copied largefile large3 becomes symlink - [255] $ cd bigfile-repo $ hg strip --no-backup 2 0 files updated, 0 files merged, 2 files removed, 0 files unresolved ERROR: test-lfconvert.t output changed
Fri, 30 Mar 2012 14:16:06 -0500 perf: node lookup
Matt Mackall <mpm@selenic.com> [Fri, 30 Mar 2012 14:16:06 -0500] rev 16309
perf: node lookup
Fri, 23 Mar 2012 01:31:31 +0100 hgweb: add block numbers to diff regions and related links
Paul Boddie <paul@boddie.org.uk> [Fri, 23 Mar 2012 01:31:31 +0100] rev 16308
hgweb: add block numbers to diff regions and related links The changeset view may show several diff regions, one per file, and this patch numbers each of them so that links produced by the filenodelink fragment can reference each diff region produced by the diffblock fragment through the use of the blockno variable made available to both of them. This permits navigation to diff regions on the changeset page from the file list, and where the :target pseudo-class is supported in browsers, permits selective presentation of diffs, showing one at a time instead of potentially many in what would otherwise be a very long page that is difficult to navigate.
Wed, 21 Mar 2012 06:45:07 +0100 patchbomb: add --body flag to send patches as inline message body text
Angel Ezquerra <angel.ezquerra@gmail.com> [Wed, 21 Mar 2012 06:45:07 +0100] rev 16307
patchbomb: add --body flag to send patches as inline message body text There is currently no way to make patchbomb include patches both as attachments and as inline text. This would be quite convenient when sending patches to people who use web email clients (e.g. gmail) which often mangle the patches, making them hard to apply. The default behavior of the email command is unchanged. However it is now possible to use the --body flag _in addition_ to the -i or -a flags, in which case the patchbomb emails will contain the patch as inline body text and as an attachment. A new test has been added to test-patchbomb.t ("test attach for single patch"), based on the existing test called "test attach for single patch" test.
Wed, 28 Mar 2012 15:25:20 -0400 shrink-revlog: make check-code happier
Greg Ward <greg@gerg.ca> [Wed, 28 Mar 2012 15:25:20 -0400] rev 16306
shrink-revlog: make check-code happier There's still a naked 'except:' clause, but I'm not sure how to fix it (what exception is it expecting?). This just fixes line length.
Wed, 28 Mar 2012 15:15:15 -0400 shrink-revlog: make pyflakes happy
Greg Ward <greg@gerg.ca> [Wed, 28 Mar 2012 15:15:15 -0400] rev 16305
shrink-revlog: make pyflakes happy
Wed, 28 Mar 2012 11:42:17 +0200 revert: move bulk of revert command from commands to cmdutil
Angel Ezquerra <angel.ezquerra@gmail.com> [Wed, 28 Mar 2012 11:42:17 +0200] rev 16304
revert: move bulk of revert command from commands to cmdutil This revision has no functionality change. The code on the original commands.revert() function has been split. The first part of the original code, which checks that the command inputs are correct remains in commands.revert(). The rest of the function, which performs the actual revert operation has been moved into cmdutil.revert(). The purpose of this change is to make it easier to perform a revert operation, from other parts of the code. This may be used to implement reverting of subrepos.
Thu, 29 Mar 2012 00:35:00 +0200 mq: fix qpush --move with comments in series file between applied patches stable
Mads Kiilerich <mads@kiilerich.com> [Thu, 29 Mar 2012 00:35:00 +0200] rev 16303
mq: fix qpush --move with comments in series file between applied patches The 'start' variable pointed to qtip in self.series, but it was used for indexing self.fullseries. When fullseries had holes and the patch was moved to self.fullseries[start] it would end up too early in self.series and it could thus not be found in self.series[start:] and it would crash. Now the 'fullstart' index in fullseries is found used instead.
Wed, 28 Mar 2012 19:24:13 -0500 dirstate: normalize case of directory components stable
Matt Mackall <mpm@selenic.com> [Wed, 28 Mar 2012 19:24:13 -0500] rev 16302
dirstate: normalize case of directory components If we have an existing f/a, and rename f to F, adding F/b should be normalized to f/b.
Wed, 28 Mar 2012 19:24:11 -0500 tests: fix startup race in test-http-proxy stable
Matt Mackall <mpm@selenic.com> [Wed, 28 Mar 2012 19:24:11 -0500] rev 16301
tests: fix startup race in test-http-proxy
Wed, 28 Mar 2012 19:23:25 -0500 tests: fix startup/shutdown races in test-https stable
Matt Mackall <mpm@selenic.com> [Wed, 28 Mar 2012 19:23:25 -0500] rev 16300
tests: fix startup/shutdown races in test-https tinyproxy now writes its own pid when it's ready to accept connections
Wed, 28 Mar 2012 12:02:38 -0500 tests: remove sleep/startup/shutdown races from test-hup stable
Matt Mackall <mpm@selenic.com> [Wed, 28 Mar 2012 12:02:38 -0500] rev 16299
tests: remove sleep/startup/shutdown races from test-hup
Wed, 28 Mar 2012 11:28:37 -0500 tests: fix shutdown race in test-hgweb-raw stable
Matt Mackall <mpm@selenic.com> [Wed, 28 Mar 2012 11:28:37 -0500] rev 16298
tests: fix shutdown race in test-hgweb-raw
Wed, 28 Mar 2012 10:29:39 -0500 tests: eliminate shutdown race and sleeps in test-serve stable
Matt Mackall <mpm@selenic.com> [Wed, 28 Mar 2012 10:29:39 -0500] rev 16297
tests: eliminate shutdown race and sleeps in test-serve
Wed, 28 Mar 2012 10:11:12 -0500 tests: eliminate daemon race in test-bad-pull stable
Matt Mackall <mpm@selenic.com> [Wed, 28 Mar 2012 10:11:12 -0500] rev 16296
tests: eliminate daemon race in test-bad-pull
Tue, 27 Mar 2012 16:17:46 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 27 Mar 2012 16:17:46 -0500] rev 16295
merge with stable
Tue, 27 Mar 2012 16:13:59 -0500 alias: abort on missing positional args (issue3331) stable
Matt Mackall <mpm@selenic.com> [Tue, 27 Mar 2012 16:13:59 -0500] rev 16294
alias: abort on missing positional args (issue3331)
Wed, 15 Feb 2012 17:30:21 -0500 phases: fix a non-standard debug message stable
Greg Ward <greg@gerg.ca> [Wed, 15 Feb 2012 17:30:21 -0500] rev 16293
phases: fix a non-standard debug message - add missing newline - ditch gratuitous use of string formatting with dict - fix so it actually does string formatting ('%' rather than ',') - inline unnecessary local variable - downcase first word
Sat, 24 Mar 2012 22:13:17 -0500 convert/git: abort if git submodules are detected (issue2150) stable
Augie Fackler <durin42@gmail.com> [Sat, 24 Mar 2012 22:13:17 -0500] rev 16292
convert/git: abort if git submodules are detected (issue2150) This improves the error message when convert encounters a git submodule. Now, instead of a git-cat-file error, we'll directly report the lack of support for git submodules.
Tue, 27 Mar 2012 14:37:17 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 27 Mar 2012 14:37:17 -0500] rev 16291
merge with stable
Sat, 24 Mar 2012 12:06:49 +0100 qfinish: comply with the phases.new-commit option in secret mode (issue3335) stable
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Sat, 24 Mar 2012 12:06:49 +0100] rev 16290
qfinish: comply with the phases.new-commit option in secret mode (issue3335) In secret mode qfinished changeset were move to the draft phase in all case[1] without regard to phases.new-commit value This changeset ensure qfinish does not automatically promote a changeset further than the phases.new-commit value. Note: This may also result in qfinished changeset made public if phases.new-commit is set to public. [1] "In all case" where parent have a compatible phase. Qfinish keep never altering phases of changeset not involved in the qfinish.
Wed, 21 Mar 2012 22:16:12 -0400 test-gpg: make sure gpg does not modify the trustdb.gpg file stable
Greg Ward <greg@gerg.ca> [Wed, 21 Mar 2012 22:16:12 -0400] rev 16289
test-gpg: make sure gpg does not modify the trustdb.gpg file Tests really should not modify files in the Mercurial working dir where they ran from! I suspect that trustdb.gpg is now old enough that GPG thinks it should update it automatically. Suppress that feature with --no-auto-check-trustdb.
Tue, 27 Mar 2012 13:57:54 -0500 tests: remove case-folding false positive stable
Matt Mackall <mpm@selenic.com> [Tue, 27 Mar 2012 13:57:54 -0500] rev 16288
tests: remove case-folding false positive
Tue, 27 Mar 2012 14:35:58 -0500 merge with i18n stable
Matt Mackall <mpm@selenic.com> [Tue, 27 Mar 2012 14:35:58 -0500] rev 16287
merge with i18n
Tue, 27 Mar 2012 20:37:52 +0900 i18n-ja: synchronized with 900eee0778d1 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 27 Mar 2012 20:37:52 +0900] rev 16286
i18n-ja: synchronized with 900eee0778d1
Mon, 26 Mar 2012 16:42:53 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 26 Mar 2012 16:42:53 -0500] rev 16285
merge with stable
Mon, 26 Mar 2012 16:41:54 -0500 merge: fix unknown file merge detection for case-folding systems
Matt Mackall <mpm@selenic.com> [Mon, 26 Mar 2012 16:41:54 -0500] rev 16284
merge: fix unknown file merge detection for case-folding systems This was triggering some test failures on Mac.
Fri, 23 Mar 2012 11:47:27 -0500 rename: handle case-changing (issue1717) stable
Matt Mackall <mpm@selenic.com> [Fri, 23 Mar 2012 11:47:27 -0500] rev 16283
rename: handle case-changing (issue1717)
Thu, 22 Mar 2012 23:58:47 +0900 largefiles: use 'dirstate.dirs()' for 'directory pattern' relation check stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Mar 2012 23:58:47 +0900] rev 16282
largefiles: use 'dirstate.dirs()' for 'directory pattern' relation check original implementation queries whether specified pattern is related or not to largefiles in target context by 'dirstate.__contains__()'. but this can't recognize 'directory pattern' correctly, so this patch uses 'dirstate.dirs()' for it. this patch uses dirstate instead of lfdirstate in 'working' route (second patch hunk for 'hgext/largefiles/reposetup.py'), because 'dirs()' information may be already built for dirstate but not yet for lfdirstate at this point. this prevents lfdirstate from building up and having 'dirs()' information.
Thu, 22 Mar 2012 23:58:47 +0900 largefiles: suppress unexpected warning of 'hg status' for removed files stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 22 Mar 2012 23:58:47 +0900] rev 16281
largefiles: suppress unexpected warning of 'hg status' for removed files original implementation queries whether specified pattern is related or not to largefiles, to target context. but changectx/workingctx returns False about relationship with files marked as removed. So, 'hg status' with 'file pattern' for removed file shows unexpected warning message in below process: 1. 'tostandin()' returns non-STANDIN filename for removed file, because changectx/workingctx returns False about relationship with it 2. 'match.files()' contains non-STANDIN filename, which is already removed from working directory 3. 'dirstate.walk()' invoked via 'localrepository.status()' treats non-STANDIN filename as bad filename, because there is no entry for it in dirstate: only STANDIN is managed in dirstate 4. 'dirstate.walk()' invokes 'match.bad()', which is defined in 'localrepository.status()' as 'bad()' 5. 'bad()' shows warning message for non-STANDIN, because it is not related to source context: only STANDIN is related to it this patch queries to dirstate instead of changectxt/workingctx, because dirstate returns expected result for removed files. 'match.files()' is used by 'localrepository.status()' only in 'working' case, so this patched code also works correctly in non-'working' case.
Thu, 22 Mar 2012 17:47:00 -0500 rebase: properly calculate descendant set when aborting (issue3332) stable
Matt Mackall <mpm@selenic.com> [Thu, 22 Mar 2012 17:47:00 -0500] rev 16280
rebase: properly calculate descendant set when aborting (issue3332) Checking for descendants of target being public was also wrong.
Thu, 22 Mar 2012 17:08:05 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 22 Mar 2012 17:08:05 -0500] rev 16279
merge with stable
Thu, 22 Mar 2012 17:07:39 -0500 strip: ignore -n (issue3326) (BC) stable
Matt Mackall <mpm@selenic.com> [Thu, 22 Mar 2012 17:07:39 -0500] rev 16278
strip: ignore -n (issue3326) (BC) -n could be confused for --dry-run by foolhardy users, resulting in permanent data loss. As leaving a backup when none was requested is significantly less disastrous, the short option is silently ignored. Old scripts continue to work, users only get lightly burned.
Thu, 22 Mar 2012 17:07:39 -0500 aliases: use empty string for missing position parameters (issue3331) stable
Matt Mackall <mpm@selenic.com> [Thu, 22 Mar 2012 17:07:39 -0500] rev 16277
aliases: use empty string for missing position parameters (issue3331)
Wed, 21 Mar 2012 16:39:38 -0500 bookmarks: clone non-divergent bookmarks with @ in them stable
Kevin Bullock <kbullock@ringworld.org> [Wed, 21 Mar 2012 16:39:38 -0500] rev 16276
bookmarks: clone non-divergent bookmarks with @ in them
Wed, 21 Mar 2012 17:24:15 +0900 i18n-ja: synchronized with 2338ab19b236 stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 21 Mar 2012 17:24:15 +0900] rev 16275
i18n-ja: synchronized with 2338ab19b236
Thu, 22 Mar 2012 16:54:46 -0500 encoding: tune fast-path of tolocal a bit
Matt Mackall <mpm@selenic.com> [Thu, 22 Mar 2012 16:54:46 -0500] rev 16274
encoding: tune fast-path of tolocal a bit
Thu, 15 Mar 2012 16:57:19 +0100 eol: remove left-over print statements
Martin Geisler <mg@aragost.com> [Thu, 15 Mar 2012 16:57:19 +0100] rev 16273
eol: remove left-over print statements
Thu, 15 Mar 2012 16:52:22 +0100 eol: document why os.utime doesn't work here
Martin Geisler <mg@aragost.com> [Thu, 15 Mar 2012 16:52:22 +0100] rev 16272
eol: document why os.utime doesn't work here I wanted to use os.utime(self.join("eol.cache"), None) as a cleaner way of touching the cache file -- but this fails when the cache doesn't exist.
Sun, 18 Mar 2012 18:21:58 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Sun, 18 Mar 2012 18:21:58 -0500] rev 16271
merge with stable
Sun, 18 Mar 2012 18:21:32 -0500 merge with i18n stable
Matt Mackall <mpm@selenic.com> [Sun, 18 Mar 2012 18:21:32 -0500] rev 16270
merge with i18n
Wed, 14 Mar 2012 16:26:14 -0300 i18n-pt_BR: fix format.dotencode help section stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 14 Mar 2012 16:26:14 -0300] rev 16269
i18n-pt_BR: fix format.dotencode help section
Wed, 14 Mar 2012 12:52:50 -0300 i18n-pt_BR: synchronized with 3d26d69ef822 stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 14 Mar 2012 12:52:50 -0300] rev 16268
i18n-pt_BR: synchronized with 3d26d69ef822
Sun, 18 Mar 2012 18:19:16 -0500 changelog: micro-optimizations to changelog.read()
Matt Mackall <mpm@selenic.com> [Sun, 18 Mar 2012 18:19:16 -0500] rev 16267
changelog: micro-optimizations to changelog.read()
Fri, 16 Mar 2012 19:58:47 -0500 perf: add a changeset test
Matt Mackall <mpm@selenic.com> [Fri, 16 Mar 2012 19:58:47 -0500] rev 16266
perf: add a changeset test
Fri, 16 Mar 2012 17:42:21 -0500 convert: deal with empty splicemap path (issue3311) stable
Matt Mackall <mpm@selenic.com> [Fri, 16 Mar 2012 17:42:21 -0500] rev 16265
convert: deal with empty splicemap path (issue3311)
Thu, 15 Mar 2012 23:02:31 +0000 tests: ignore git's output in test-subrepo-git.t stable
Javi Merino <cibervicho@gmail.com> [Thu, 15 Mar 2012 23:02:31 +0000] rev 16264
tests: ignore git's output in test-subrepo-git.t git version 1.7.9.1 makes the testsuite fail with: @@ -482,7 +482,17 @@ Sticky repository, update --clean $ hg update --clean tip - Previous HEAD position was aa84837... f + Warning: you are leaving 2 commits behind, not connected to + any of your branches: + + aa84837 f + 126f2a1 gg + + If you want to keep them by creating a new branch, this may be a good time + to do so with: + + git branch new_branch_name aa84837ccfbdfedcdcdeeedc309d73e6eb069edc + HEAD is now at 32a3438... fff 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg id -n ERROR: test-subrepo-git.t output changed
Thu, 15 Mar 2012 15:59:26 -0500 profile: add undocumented config options for profiler output
Matt Mackall <mpm@selenic.com> [Thu, 15 Mar 2012 15:59:26 -0500] rev 16263
profile: add undocumented config options for profiler output
Thu, 15 Mar 2012 15:58:55 -0500 perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com> [Thu, 15 Mar 2012 15:58:55 -0500] rev 16262
perf: add perfchangeset to time changeset parsing
Thu, 15 Mar 2012 13:11:42 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Thu, 15 Mar 2012 13:11:42 -0500] rev 16261
merge with stable
Thu, 15 Mar 2012 13:11:03 -0500 perf: tweak tests for testing index performance improvements
Matt Mackall <mpm@selenic.com> [Thu, 15 Mar 2012 13:11:03 -0500] rev 16260
perf: tweak tests for testing index performance improvements
Wed, 14 Mar 2012 01:13:45 +0100 convert: support non annotated tags in git backend
Edouard Gomez <ed.gomez@free.fr> [Wed, 14 Mar 2012 01:13:45 +0100] rev 16259
convert: support non annotated tags in git backend Do not blindly filter out non ending ^{} tags. The new logic is: - if both "tag" and "tag^{}" exist, "tag^{}" is what we want - if only "tag" exists, "tag" is fine
Thu, 15 Mar 2012 00:46:37 +0900 icasefs: use case preserved root for 'util.fspath()' invocation (issue3302) stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 15 Mar 2012 00:46:37 +0900] rev 16258
icasefs: use case preserved root for 'util.fspath()' invocation (issue3302) path to repo root may contains case sensitive part, even though repo is located in case insensitive filesystem: e.g. repo in FAT32 device mounted on Unix. so, case normalized root causes failure of stat(2). this patch uses case preserved root for 'util.fspath()' invocation to avoid this problem. case preserved root for 'util.fspath()' may decrease efficiency of fspath cache, but 'util.fspath()' is currently called only from dirstate, so this fix has less impact.
Wed, 14 Mar 2012 14:45:41 -0500 merge: accept missing revisions in symlink flag merge (issue3316) stable
Matt Mackall <mpm@selenic.com> [Wed, 14 Mar 2012 14:45:41 -0500] rev 16257
merge: accept missing revisions in symlink flag merge (issue3316)
Tue, 13 Mar 2012 16:29:13 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Tue, 13 Mar 2012 16:29:13 -0500] rev 16256
merge with stable
Tue, 13 Mar 2012 16:28:08 -0500 merge: handle linear update to symlink correctly (issue3316) stable
Matt Mackall <mpm@selenic.com> [Tue, 13 Mar 2012 16:28:08 -0500] rev 16255
merge: handle linear update to symlink correctly (issue3316) This fixes a regression introduced by fcf66193b186. If no file-level merge is needed, we can update flags directly, otherwise we have a conflict to resolve in filemerge.
Tue, 13 Mar 2012 15:12:26 -0500 filemerge: restore default prompt for binary/symlink lost in 83925d3a4559 stable
Matt Mackall <mpm@selenic.com> [Tue, 13 Mar 2012 15:12:26 -0500] rev 16254
filemerge: restore default prompt for binary/symlink lost in 83925d3a4559 This could result in a traceback.
Mon, 12 Mar 2012 17:05:42 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Mon, 12 Mar 2012 17:05:42 -0500] rev 16253
merge with stable
Mon, 12 Mar 2012 17:02:45 -0300 strip: enhance repair.strip to receive a list of nodes (issue3299) stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Mon, 12 Mar 2012 17:02:45 -0300] rev 16252
strip: enhance repair.strip to receive a list of nodes (issue3299) Originally, mq.strip called repair.strip a single rev at a time. repair.strip stores in a backup bundle any revision greater than the revision being stripped, strips, then restores the backup with repo.addchangegroup. So, when stripping revisions on more than one topological branch, some could end up being restored from the backup bundle, only to be later removed by a subsequent repair.strip call. But repo.addchangegroup calls hooks for all those restore operations. And 9df9444e96ec changed it to delay all hook calls until the repository lock were released - by mq.strip, after stripping all revisions. Thus, the hooks could be called over revisions already removed from the repository at that point. By generating the revision lists at once inside repo.strip, we avoid calling addchangegroup for temporary restores. Incidentally, this also avoids creating many backup files for a single strip command.
Wed, 07 Mar 2012 01:02:12 +0100 templates/filters: add doctest to the 'person' filter
"Yann E. MORIN" <yann.morin.1998@free.fr> [Wed, 07 Mar 2012 01:02:12 +0100] rev 16251
templates/filters: add doctest to the 'person' filter Add a doctest with an hopefuly-comprehensive list of combinations we can expect in real-life situations. This does not cover corner cases, for example when a CR or LF is embedded in the name (allowed by RFC 5322!). Code in tests/test-doctest.py contributed by: Martin Geisler <mg@aragost.com> Thanks! Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Fri, 09 Mar 2012 22:54:17 +0100 help: strip doctest from dochelp
"Yann E. MORIN" <yann.morin.1998@free.fr> [Fri, 09 Mar 2012 22:54:17 +0100] rev 16250
help: strip doctest from dochelp When a dochelp string contains doctest code, the doctest code is not stripped, so the help also displays the doctest. Just stop parsing dochelp at the first hint of a doctest section (starting with >>>). Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Mon, 12 Mar 2012 13:37:39 -0500 pvec: introduce pvecs
Matt Mackall <mpm@selenic.com> [Mon, 12 Mar 2012 13:37:39 -0500] rev 16249
pvec: introduce pvecs
Fri, 09 Mar 2012 17:11:07 +0100 largefiles: fix check-code errors.
Na'Tosha Bard <natosha@unity3d.com> [Fri, 09 Mar 2012 17:11:07 +0100] rev 16248
largefiles: fix check-code errors.
Fri, 09 Mar 2012 16:11:52 +0100 largefiles: remove use of underscores that breaks coding convention
Na'Tosha Bard <natosha@unity3d.com> [Fri, 09 Mar 2012 16:11:52 +0100] rev 16247
largefiles: remove use of underscores that breaks coding convention
(0) -10000 -3000 -1000 -300 -100 -64 +64 +100 +300 +1000 +3000 +10000 +30000 tip