mirror of
https://github.com/facebook/sapling.git
synced 2024-10-12 01:39:21 +03:00
c12e300bb8
Summary: Move top-level Python packages `mercurial`, `hgext` and `hgdemandimport` to a new top-level package `edenscm`. This allows the Python packages provided by the upstream Mercurial to be installed side-by-side. To maintain compatibility, `edenscm/` gets added to `sys.path` in `mercurial/__init__.py`. Reviewed By: phillco, ikostia Differential Revision: D13853115 fbshipit-source-id: b296b0673dc54c61ef6a591ebc687057ff53b22e
28 lines
689 B
Python
28 lines
689 B
Python
# Copyright 2017 Facebook, Inc.
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2 or any later version.
|
|
|
|
|
|
def bisect(l, r, comp, val):
|
|
"""Bisect algorithm with custom compare function
|
|
|
|
Returns smallest index between l and r whose value is equal to val.
|
|
Returns None if there are no such index.
|
|
"""
|
|
if r < l:
|
|
return None
|
|
while l < r:
|
|
m = (l + r) / 2
|
|
cmpresult = comp(m, val)
|
|
if cmpresult == -1:
|
|
l = m + 1
|
|
elif cmpresult == 0:
|
|
r = m
|
|
else:
|
|
r = m - 1
|
|
|
|
if r < l or comp(l, val) != 0:
|
|
return None
|
|
return l
|