A Scalable, User-Friendly Source Control System.
Go to file
Jeroen Vaelen f10fd61efd [fb-hgext] use hashlib to compute sha1 hashes
Summary:
hg-crew's c27dc3c3122 and c27dc3c3122^ were breaking our extensions:

```
$ hg log -r c27dc3c3122^
changeset:   9010734b79911d2d2e7405d91a4df479b35b3841
user:        Augie Fackler <raf@durin42.com>
date:        Thu, 09 Jun 2016 21:12:33 -0700
s.ummary:     cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
```

```
$ hg log -r c27dc3c3122
changeset:   0d55a7b8d07bf948c935822e6eea85b044383f00
user:        Augie Fackler <raf@durin42.com>
date:        Thu, 09 Jun 2016 21:13:23 -0700
s.ummary:     util: drop local aliases for md5, sha1, sha256, and sha512
```

I did a grep over facebook-hg-rpms to see what was affected:
```
$ grep "util.\(md5\|sha1\|sha256\|sha512\)" -r ~/facebook-hg-rpms
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/basestore.py:            sha = util.sha1(filename).digest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/basestore.py:                sha = util.sha1(filename).digest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/shallowutil.py:    pathhash = util.sha1(file).hexdigest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/shallowutil.py:    pathhash = util.sha1(file).hexdigest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/debugcommands.py:    filekey = util.sha1(file).hexdigest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/historypack.py:        namehash = util.sha1(name).digest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/historypack.py:        node = util.sha1(filename).digest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/historypack.py:        files = ((util.sha1(filename).digest(), offset, size)
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/fileserverclient.py:    pathhash = util.sha1(file).hexdigest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/fileserverclient.py:    pathhash = util.sha1(file).hexdigest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/remotefilelog/basepack.py:        self.sha = util.sha1()
/home/jeroenv/facebook-hg-rpms/remotefilelog/tests/test-datapack.py:        return util.sha1(content).digest()
/home/jeroenv/facebook-hg-rpms/remotefilelog/tests/test-histpack.py:        return util.sha1(content).digest()
Binary file /home/jeroenv/facebook-hg-rpms/hg-crew/.hg/store/data/mercurial/revlog.py.i matches
Binary file /home/jeroenv/facebook-hg-rpms/hg-crew/.hg/store/data/contrib/mercurial.spec.i matches
/home/jeroenv/facebook-hg-rpms/hg-crew/contrib/mercurial.spec:%global docutilsmd5 4622263b62c5c771c03502afa3157768
/home/jeroenv/facebook-hg-rpms/hg-crew/contrib/buildrpm:    DOCUTILSMD5=`sed -ne "s/^%global docutilsmd5 //p" $specfile`
/home/jeroenv/facebook-hg-rpms/fb-hgext/sparse.py:            return util.sha1(fh.read()).hexdigest()
/home/jeroenv/facebook-hg-rpms/fb-hgext/sparse.py:        sha1 = util.sha1()
/home/jeroenv/facebook-hg-rpms/fb-hgext/sparse.py:        sha1 = util.sha1()
/home/jeroenv/facebook-hg-rpms/fb-hgext/sparse.py:        sha1 = util.sha1()
/home/jeroenv/facebook-hg-rpms/fb-hgext/sparse.py:    sha1 = util.sha1()
/home/jeroenv/facebook-hg-rpms/mutable-history/hgext/simple4server.py:        sha = util.sha1()
/home/jeroenv/facebook-hg-rpms/mutable-history/hgext/evolve.py:        sha = util.sha1()
```

This diff is part of the fix.

Test Plan:
Ran the tests.
```
$MERCURIALRUNTEST -S -j 48 --with-hg ~/local/facebook-hg-rpms/hg-crew/hg
```
There was still one failure, but that's due to the fact that my locally built hg does not have lz4revlog.

Reviewers: #sourcecontrol, durham, ttung

Reviewed By: ttung

Subscribers: mjpieters

Differential Revision: https://phabricator.intern.facebook.com/D3438597

Tasks: 11762191

Signature: t1:3438597:1466016473:d33de5a2c772d17724429d3607e2400c85618c71
2016-06-15 12:05:38 -07:00
cfastmanifest [fastmanifest] enforce strict prototypes 2016-06-09 22:45:05 -07:00
fastmanifest fastmanifest: fail gracefully when we cannot compute cache limit 2016-06-13 15:26:55 -07:00
phabricator hgext: refactor last-diff code into diffprops.py 2016-05-12 13:11:08 -07:00
scripts fb-hgext: fix arc lint to catch the issue in D3236640 2016-04-29 10:56:47 -07:00
sqldirstate sqldirstate: invalidate fsmonitorstate 2016-06-01 12:28:33 -07:00
tests fastmanifest: don't stop when we cannot get the lock 2016-06-13 15:26:55 -07:00
.editorconfig Add editorconfig 2016-04-20 03:05:42 -07:00
.hgignore [fastmanifest] rename fastmanifest c library directory to cfastmanifest 2016-05-26 11:33:07 -07:00
arcdiff.py hgext: refactor last-diff code into diffprops.py 2016-05-12 13:11:08 -07:00
backups.py spelling: fix numerous spelling errors 2016-04-04 12:48:01 -07:00
bundle2hooks.py [bundle2hooks] allow hook arguments to be stored on the operation object 2016-02-04 15:59:17 -08:00
catnotate.py catnotate: add whole extension 2015-10-16 02:45:27 -07:00
cfastmanifest.c [fastmanifes] rename fastmanifest_wrapper as cfastmanifest 2016-05-26 11:34:56 -07:00
chistedit.py spelling: fix numerous spelling errors 2016-04-04 12:48:01 -07:00
commitextras.py extras: add commitextras extension 2015-04-27 20:20:48 -07:00
COPYING Initial commit with extensions and readme 2014-06-02 12:54:54 -07:00
dirsync.py dirsync: disable dirsync during shelve/unshelve 2016-05-05 14:51:59 -07:00
errorredirect.py errorredirect: wrap handlecommandexception instead of sys.exit 2016-04-19 10:59:22 -07:00
extorder.py extdeps extension 2015-12-11 17:57:58 -08:00
extutil.py extutil: move wrapfilecache from reflog to extutil 2016-05-19 16:25:28 -07:00
fbamend.py fbamend: fix some bugs & style issues in unamend implementation 2016-04-26 04:58:59 -07:00
fbconduit.py cleanup: make all the code compliant with the i18n rules for ui strings 2016-01-11 10:19:22 -08:00
fbhistedit.py spelling: fix numerous spelling errors 2016-04-04 12:48:01 -07:00
githelp.py githelp: change advice to log task with sourcecontrolux tag 2016-04-28 04:14:31 -07:00
gitlookup.py cleanup: fix the "line too long" warnings 2016-01-07 18:30:24 -08:00
gitrevset.py gitrevset: fix broken test caused by core's commit 48d6be2f1632 2015-05-07 17:46:30 -07:00
grepdiff.py grepdiff: an revset for code archeology 2016-06-06 14:16:10 -07:00
inhibitwarn.py cleanup: fix the "line too long" warnings 2016-01-07 18:30:24 -08:00
Makefile Initial commit: fbamend, smartlog 2013-06-20 12:16:36 -07:00
mergedriver.py mergedriver: make it clear that artifacts must be regenerated 2016-02-10 00:18:51 -08:00
morestatus.py [morestatus] aborting a graft requires "hg update --clean" 2016-03-02 15:14:03 -08:00
patchpython.py patchpython: new extension to patch buggy Python modules 2016-06-03 11:11:30 +01:00
perftweaks.py perftweaks: handle rev out of range error in noderevs cache 2016-05-12 11:46:20 -07:00
phabdiff.py hgext: refactor D123 parsing, centralize 2016-04-27 09:50:13 -07:00
phabstatus.py hgext: refactor D123 parsing, centralize 2016-04-27 09:50:13 -07:00
phrevset.py spelling: fix numerous spelling errors 2016-04-04 12:48:01 -07:00
pullcreatemarkers.py hgext: refactor D123 parsing, centralize 2016-04-27 09:50:13 -07:00
pushrebase.py spelling: fix numerous spelling errors 2016-04-04 12:48:01 -07:00
pushvars.py store the pushvars in the bundle2 operation object 2016-02-18 21:32:11 -08:00
rage.py rage: add fastmanifestcached() to debug info 2016-06-07 11:40:24 -07:00
README.md Merge fbonly into default 2015-03-08 12:22:25 -07:00
reflog.py extutil: move wrapfilecache from reflog to extutil 2016-05-19 16:25:28 -07:00
reset.py reset: fix the evolve call 2016-02-10 16:44:25 -08:00
sampling.py sampling: add event filtering 2016-06-07 10:24:56 -07:00
setup.py [fastmanifest] enforce strict prototypes 2016-06-09 22:45:05 -07:00
show.py spelling: fix numerous spelling errors 2016-04-04 12:48:01 -07:00
simplecache.py cleanup: fix naked exception clauses 2016-01-07 18:30:24 -08:00
smartlog.py smartlog: Remove node coloring, moved to template labels 2016-05-10 13:42:10 +01:00
sparse.py [fb-hgext] use hashlib to compute sha1 hashes 2016-06-15 12:05:38 -07:00
statprof.py statprof: add threading sampler 2016-06-15 09:54:18 -07:00
statprofext.py statprof: add an extension for customizing our invocation of statprof 2016-06-09 11:36:07 -07:00
tweakdefaults.py tweakdefaults: make rebaseskipobsolete behave in a more expected way 2016-06-11 15:25:13 -07:00
upgradegeneraldelta.py cleanup: make upgradegeneraldelta pass check-code 2015-12-29 11:35:38 -08:00

hg-experimental

This is a collection of proof-of-concept Mercurial extensions written at Facebook. While they are all in basic use, they are considered experimental, are unsupported, and may or may not receive updates in the future. We're making them open source as examples of some better workflows we've been experimenting with.

Note that there will be extensions included here that only work with Facebook's infrastructure; they are included to give you an idea of how we integrate mercurial with our workflows.

smartlog

An extension that adds the 'hg smartlog' command. It prints graph log output containing only the commits relevant to yourself. Shows your bookmarks, the @ or master bookmark, and any draft commits without bookmarks that you've made within the past 2 weeks. Any commits in the graph that are skipped are represented by '...'.

We recommend also having an 'hg sl' alias that gives more concise output:

alias.sl=smartlog --template "{shortest(node)}  {author|user}  {bookmarks % '{ifeq(bookmark, current, label(\"yellow\", \" {bookmark}*\"), label(\"green\", \" {bookmark}\"))}'} {ifeq(branch, 'default', '', label(\"bold\", branch))}\n{desc|firstline}\n\n"

githelp

An extension that adds the 'hg githelp' command. It translates Git commands into Mercurial commands. Example:

$ hg githelp -- git rebase origin/master
  hg rebase -d master

$ hg githelp -- reset --hard HEAD^
  hg strip -r .

So it acts as a useful cheat sheet tool for people moving from Git to Mercurial.

backups

An extension that adds the 'hg backups' command. 'hg backups' prints a list of recently deleted commits (by reading your .hg/strip-backups directory) and allows you to recover a commit by doing 'hg backups --recover '. It prints the missing commits in reverse chronological order, and acts as a pseudo-replacement for Git's reflog.

fbamend

An extension that adds the 'hg amend --rebase' command. When working with a stack of commits, it's currently impossible to amend a commit in the middle of the stack. This extension enables that ability, adds a 'hg amend' command that invokes 'hg commit --amend', and adds a --rebase flag to 'hg amend --rebase' that rebase all the children of the commit onto the newly amended version.

If 'hg amend' is run on a commit in the middle of a stack without using --rebase, the amend succeeds and the old version of the commit is left behind with a marker bookmark on it 'bookmarkname(preamend)'. The user can then run 'hg amend --fixup' to post-humously rebase the children onto the new version of the commit.

chistedit

An interactive ncurses interface to histedit.

NOTE: This requires python-curses installed and Mercurial's histedit extension enabled.

This extensions allows you to interactively move around changesets or change the action to perform while keeping track of possible conflicts.

upgradegeneraldelta

Upgrades manifests to generaldelta in-place, without needing to reclone.

Contributing

Patches are welcome as pull requests, though they will be collapsed and rebased to maintain a linear history.

We (Facebook) have to ask for a "Contributor License Agreement" from someone who sends in a patch or code that we want to include in the codebase. This is a legal requirement; a similar situation applies to Apache and other ASF projects.

If we ask you to fill out a CLA we'll direct you to our online CLA page where you can complete it easily. We use the same form as the Apache CLA so that friction is minimal.

License

These extensions are made available under the terms of the GNU General Public License version 2, or any later version. See the COPYING file that accompanies this distribution for the full text of the license.