Mercurial > hg
annotate hgext/infinitepush/__init__.py @ 38176:df5f6881cebd
unionrepo: fill in uncompressed length of revlog entry
It can be either -1 or a valid length, but shouldn't be None. IIUC, we can
simply trust the length retrieved from the revlog to be overlaid. I don't
bother thinking whether the compressed length can be copied as well. We'll
need to fix it later.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 26 May 2018 11:31:51 +0900 |
parents | aac4be30e250 |
children | c31ce080eb75 |
rev | line source |
---|---|
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1 # Infinite push |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
2 # |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2016 Facebook, Inc. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
4 # |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
7 """ store some pushes in a remote blob store on the server (EXPERIMENTAL) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
8 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
9 [infinitepush] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
10 # Server-side and client-side option. Pattern of the infinitepush bookmark |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
11 branchpattern = PATTERN |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
12 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
13 # Server or client |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
14 server = False |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
15 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
16 # Server-side option. Possible values: 'disk' or 'sql'. Fails if not set |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
17 indextype = disk |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
18 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
19 # Server-side option. Used only if indextype=sql. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
20 # Format: 'IP:PORT:DB_NAME:USER:PASSWORD' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
21 sqlhost = IP:PORT:DB_NAME:USER:PASSWORD |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
22 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
23 # Server-side option. Used only if indextype=disk. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
24 # Filesystem path to the index store |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
25 indexpath = PATH |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
26 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
27 # Server-side option. Possible values: 'disk' or 'external' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
28 # Fails if not set |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
29 storetype = disk |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
30 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
31 # Server-side option. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
32 # Path to the binary that will save bundle to the bundlestore |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
33 # Formatted cmd line will be passed to it (see `put_args`) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
34 put_binary = put |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
35 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
36 # Serser-side option. Used only if storetype=external. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
37 # Format cmd-line string for put binary. Placeholder: {filename} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
38 put_args = {filename} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
39 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
40 # Server-side option. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
41 # Path to the binary that get bundle from the bundlestore. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
42 # Formatted cmd line will be passed to it (see `get_args`) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
43 get_binary = get |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
44 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
45 # Serser-side option. Used only if storetype=external. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
46 # Format cmd-line string for get binary. Placeholders: {filename} {handle} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
47 get_args = {filename} {handle} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
48 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
49 # Server-side option |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
50 logfile = FIlE |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
51 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
52 # Server-side option |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
53 loglevel = DEBUG |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
54 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
55 # Server-side option. Used only if indextype=sql. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
56 # Sets mysql wait_timeout option. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
57 waittimeout = 300 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
58 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
59 # Server-side option. Used only if indextype=sql. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
60 # Sets mysql innodb_lock_wait_timeout option. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
61 locktimeout = 120 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
62 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
63 # Server-side option. Used only if indextype=sql. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
64 # Name of the repository |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
65 reponame = '' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
66 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
67 # Client-side option. Used by --list-remote option. List of remote scratch |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
68 # patterns to list if no patterns are specified. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
69 defaultremotepatterns = ['*'] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
70 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
71 # Instructs infinitepush to forward all received bundle2 parts to the |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
72 # bundle for storage. Defaults to False. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
73 storeallparts = True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
74 |
37206
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
75 # routes each incoming push to the bundlestore. defaults to False |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
76 pushtobundlestore = True |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
77 |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
78 [remotenames] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
79 # Client-side option |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
80 # This option should be set only if remotenames extension is enabled. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
81 # Whether remote bookmarks are tracked by remotenames extension. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
82 bookmarks = True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
83 """ |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
84 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
85 from __future__ import absolute_import |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
86 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
87 import collections |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
88 import contextlib |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
89 import errno |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
90 import functools |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
91 import logging |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
92 import os |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
93 import random |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
94 import re |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
95 import socket |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
96 import subprocess |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
97 import time |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
98 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
99 from mercurial.node import ( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
100 bin, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
101 hex, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
102 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
103 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
104 from mercurial.i18n import _ |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
105 |
37204
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
106 from mercurial.utils import ( |
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
107 procutil, |
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
108 stringutil, |
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
109 ) |
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
110 |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
111 from mercurial import ( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
112 bundle2, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
113 changegroup, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
114 commands, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
115 discovery, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
116 encoding, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
117 error, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
118 exchange, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
119 extensions, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
120 hg, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
121 localrepo, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
122 phases, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
123 pushkey, |
37577
e7eea8582afa
py3: use pycompat.{strkwargs|byteskwargs} in infinitepush
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37239
diff
changeset
|
124 pycompat, |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
125 registrar, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
126 util, |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
127 wireprototypes, |
37614
a81d02ea65db
wireproto: move version 1 peer functionality to standalone module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
128 wireprotov1peer, |
37785
b4d85bc122bd
wireproto: rename wireproto to wireprotov1server (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
129 wireprotov1server, |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
130 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
131 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
132 from . import ( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
133 bundleparts, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
134 common, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
135 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
136 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
137 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
138 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
139 # be specifying the version(s) of Mercurial they are tested with, or |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
140 # leave the attribute unspecified. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
141 testedwith = 'ships-with-hg-core' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
142 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
143 configtable = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
144 configitem = registrar.configitem(configtable) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
145 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
146 configitem('infinitepush', 'server', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
147 default=False, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
148 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
149 configitem('infinitepush', 'storetype', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
150 default='', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
151 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
152 configitem('infinitepush', 'indextype', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
153 default='', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
154 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
155 configitem('infinitepush', 'indexpath', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
156 default='', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
157 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
158 configitem('infinitepush', 'storeallparts', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
159 default=False, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
160 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
161 configitem('infinitepush', 'reponame', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
162 default='', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
163 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
164 configitem('scratchbranch', 'storepath', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
165 default='', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
166 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
167 configitem('infinitepush', 'branchpattern', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
168 default='', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
169 ) |
37206
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
170 configitem('infinitepush', 'pushtobundlestore', |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
171 default=False, |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
172 ) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
173 configitem('experimental', 'server-bundlestore-bookmark', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
174 default='', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
175 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
176 configitem('experimental', 'infinitepush-scratchpush', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
177 default=False, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
178 ) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
179 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
180 experimental = 'experimental' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
181 configbookmark = 'server-bundlestore-bookmark' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
182 configscratchpush = 'infinitepush-scratchpush' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
183 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
184 scratchbranchparttype = bundleparts.scratchbranchparttype |
37188
de4c2f3af97f
infinitepush: remove backupcommands.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37187
diff
changeset
|
185 revsetpredicate = registrar.revsetpredicate() |
de4c2f3af97f
infinitepush: remove backupcommands.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37187
diff
changeset
|
186 templatekeyword = registrar.templatekeyword() |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
187 _scratchbranchmatcher = lambda x: False |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
188 _maybehash = re.compile(r'^[a-f0-9]+$').search |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
189 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
190 def _buildexternalbundlestore(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
191 put_args = ui.configlist('infinitepush', 'put_args', []) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
192 put_binary = ui.config('infinitepush', 'put_binary') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
193 if not put_binary: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
194 raise error.Abort('put binary is not specified') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
195 get_args = ui.configlist('infinitepush', 'get_args', []) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
196 get_binary = ui.config('infinitepush', 'get_binary') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
197 if not get_binary: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
198 raise error.Abort('get binary is not specified') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
199 from . import store |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
200 return store.externalbundlestore(put_binary, put_args, get_binary, get_args) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
201 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
202 def _buildsqlindex(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
203 sqlhost = ui.config('infinitepush', 'sqlhost') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
204 if not sqlhost: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
205 raise error.Abort(_('please set infinitepush.sqlhost')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
206 host, port, db, user, password = sqlhost.split(':') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
207 reponame = ui.config('infinitepush', 'reponame') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
208 if not reponame: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
209 raise error.Abort(_('please set infinitepush.reponame')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
210 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
211 logfile = ui.config('infinitepush', 'logfile', '') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
212 waittimeout = ui.configint('infinitepush', 'waittimeout', 300) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
213 locktimeout = ui.configint('infinitepush', 'locktimeout', 120) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
214 from . import sqlindexapi |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
215 return sqlindexapi.sqlindexapi( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
216 reponame, host, port, db, user, password, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
217 logfile, _getloglevel(ui), waittimeout=waittimeout, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
218 locktimeout=locktimeout) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
219 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
220 def _getloglevel(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
221 loglevel = ui.config('infinitepush', 'loglevel', 'DEBUG') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
222 numeric_loglevel = getattr(logging, loglevel.upper(), None) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
223 if not isinstance(numeric_loglevel, int): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
224 raise error.Abort(_('invalid log level %s') % loglevel) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
225 return numeric_loglevel |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
226 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
227 def _tryhoist(ui, remotebookmark): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
228 '''returns a bookmarks with hoisted part removed |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
229 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
230 Remotenames extension has a 'hoist' config that allows to use remote |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
231 bookmarks without specifying remote path. For example, 'hg update master' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
232 works as well as 'hg update remote/master'. We want to allow the same in |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
233 infinitepush. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
234 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
235 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
236 if common.isremotebooksenabled(ui): |
37232
15691d71da23
infinitepush: replace `remotenames.hoist` with `remotenames.hoistedpeer`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37206
diff
changeset
|
237 hoist = ui.config('remotenames', 'hoistedpeer') + '/' |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
238 if remotebookmark.startswith(hoist): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
239 return remotebookmark[len(hoist):] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
240 return remotebookmark |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
241 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
242 class bundlestore(object): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
243 def __init__(self, repo): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
244 self._repo = repo |
37233
912f4f64047f
infinitepush: drop the default value of config options which are registered
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37232
diff
changeset
|
245 storetype = self._repo.ui.config('infinitepush', 'storetype') |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
246 if storetype == 'disk': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
247 from . import store |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
248 self.store = store.filebundlestore(self._repo.ui, self._repo) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
249 elif storetype == 'external': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
250 self.store = _buildexternalbundlestore(self._repo.ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
251 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
252 raise error.Abort( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
253 _('unknown infinitepush store type specified %s') % storetype) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
254 |
37233
912f4f64047f
infinitepush: drop the default value of config options which are registered
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37232
diff
changeset
|
255 indextype = self._repo.ui.config('infinitepush', 'indextype') |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
256 if indextype == 'disk': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
257 from . import fileindexapi |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
258 self.index = fileindexapi.fileindexapi(self._repo) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
259 elif indextype == 'sql': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
260 self.index = _buildsqlindex(self._repo.ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
261 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
262 raise error.Abort( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
263 _('unknown infinitepush index type specified %s') % indextype) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
264 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
265 def _isserver(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
266 return ui.configbool('infinitepush', 'server') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
267 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
268 def reposetup(ui, repo): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
269 if _isserver(ui) and repo.local(): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
270 repo.bundlestore = bundlestore(repo) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
271 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
272 def extsetup(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
273 commonsetup(ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
274 if _isserver(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
275 serverextsetup(ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
276 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
277 clientextsetup(ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
278 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
279 def commonsetup(ui): |
37785
b4d85bc122bd
wireproto: rename wireproto to wireprotov1server (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
280 wireprotov1server.commands['listkeyspatterns'] = ( |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
281 wireprotolistkeyspatterns, 'namespace patterns') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
282 scratchbranchpat = ui.config('infinitepush', 'branchpattern') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
283 if scratchbranchpat: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
284 global _scratchbranchmatcher |
37204
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
285 kind, pat, _scratchbranchmatcher = \ |
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
286 stringutil.stringmatcher(scratchbranchpat) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
287 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
288 def serverextsetup(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
289 origpushkeyhandler = bundle2.parthandlermapping['pushkey'] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
290 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
291 def newpushkeyhandler(*args, **kwargs): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
292 bundle2pushkey(origpushkeyhandler, *args, **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
293 newpushkeyhandler.params = origpushkeyhandler.params |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
294 bundle2.parthandlermapping['pushkey'] = newpushkeyhandler |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
295 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
296 orighandlephasehandler = bundle2.parthandlermapping['phase-heads'] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
297 newphaseheadshandler = lambda *args, **kwargs: \ |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
298 bundle2handlephases(orighandlephasehandler, *args, **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
299 newphaseheadshandler.params = orighandlephasehandler.params |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
300 bundle2.parthandlermapping['phase-heads'] = newphaseheadshandler |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
301 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
302 extensions.wrapfunction(localrepo.localrepository, 'listkeys', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
303 localrepolistkeys) |
37785
b4d85bc122bd
wireproto: rename wireproto to wireprotov1server (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
304 wireprotov1server.commands['lookup'] = ( |
b4d85bc122bd
wireproto: rename wireproto to wireprotov1server (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37615
diff
changeset
|
305 _lookupwrap(wireprotov1server.commands['lookup'][0]), 'key') |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
306 extensions.wrapfunction(exchange, 'getbundlechunks', getbundlechunks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
307 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
308 extensions.wrapfunction(bundle2, 'processparts', processparts) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
309 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
310 def clientextsetup(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
311 entry = extensions.wrapcommand(commands.table, 'push', _push) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
312 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
313 entry[1].append( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
314 ('', 'bundle-store', None, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
315 _('force push to go to bundle store (EXPERIMENTAL)'))) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
316 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
317 extensions.wrapcommand(commands.table, 'pull', _pull) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
318 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
319 extensions.wrapfunction(discovery, 'checkheads', _checkheads) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
320 |
37614
a81d02ea65db
wireproto: move version 1 peer functionality to standalone module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
321 wireprotov1peer.wirepeer.listkeyspatterns = listkeyspatterns |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
322 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
323 partorder = exchange.b2partsgenorder |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
324 index = partorder.index('changeset') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
325 partorder.insert( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
326 index, partorder.pop(partorder.index(scratchbranchparttype))) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
327 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
328 def _checkheads(orig, pushop): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
329 if pushop.ui.configbool(experimental, configscratchpush, False): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
330 return |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
331 return orig(pushop) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
332 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
333 def wireprotolistkeyspatterns(repo, proto, namespace, patterns): |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
334 patterns = wireprototypes.decodelist(patterns) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
335 d = repo.listkeys(encoding.tolocal(namespace), patterns).iteritems() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
336 return pushkey.encodekeys(d) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
337 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
338 def localrepolistkeys(orig, self, namespace, patterns=None): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
339 if namespace == 'bookmarks' and patterns: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
340 index = self.bundlestore.index |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
341 results = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
342 bookmarks = orig(self, namespace) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
343 for pattern in patterns: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
344 results.update(index.getbookmarks(pattern)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
345 if pattern.endswith('*'): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
346 pattern = 're:^' + pattern[:-1] + '.*' |
37204
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
347 kind, pat, matcher = stringutil.stringmatcher(pattern) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
348 for bookmark, node in bookmarks.iteritems(): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
349 if matcher(bookmark): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
350 results[bookmark] = node |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
351 return results |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
352 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
353 return orig(self, namespace) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
354 |
37615
f3dc8239e3a9
peer: scatter module to the wind (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37614
diff
changeset
|
355 @wireprotov1peer.batchable |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
356 def listkeyspatterns(self, namespace, patterns): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
357 if not self.capable('pushkey'): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
358 yield {}, None |
37615
f3dc8239e3a9
peer: scatter module to the wind (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37614
diff
changeset
|
359 f = wireprotov1peer.future() |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
360 self.ui.debug('preparing listkeys for "%s" with pattern "%s"\n' % |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
361 (namespace, patterns)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
362 yield { |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
363 'namespace': encoding.fromlocal(namespace), |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
364 'patterns': wireprototypes.encodelist(patterns) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
365 }, f |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
366 d = f.value |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
367 self.ui.debug('received listkey for "%s": %i bytes\n' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
368 % (namespace, len(d))) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
369 yield pushkey.decodekeys(d) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
370 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
371 def _readbundlerevs(bundlerepo): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
372 return list(bundlerepo.revs('bundle()')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
373 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
374 def _includefilelogstobundle(bundlecaps, bundlerepo, bundlerevs, ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
375 '''Tells remotefilelog to include all changed files to the changegroup |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
376 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
377 By default remotefilelog doesn't include file content to the changegroup. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
378 But we need to include it if we are fetching from bundlestore. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
379 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
380 changedfiles = set() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
381 cl = bundlerepo.changelog |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
382 for r in bundlerevs: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
383 # [3] means changed files |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
384 changedfiles.update(cl.read(r)[3]) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
385 if not changedfiles: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
386 return bundlecaps |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
387 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
388 changedfiles = '\0'.join(changedfiles) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
389 newcaps = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
390 appended = False |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
391 for cap in (bundlecaps or []): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
392 if cap.startswith('excludepattern='): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
393 newcaps.append('\0'.join((cap, changedfiles))) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
394 appended = True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
395 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
396 newcaps.append(cap) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
397 if not appended: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
398 # Not found excludepattern cap. Just append it |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
399 newcaps.append('excludepattern=' + changedfiles) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
400 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
401 return newcaps |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
402 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
403 def _rebundle(bundlerepo, bundleroots, unknownhead): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
404 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
405 Bundle may include more revision then user requested. For example, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
406 if user asks for revision but bundle also consists its descendants. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
407 This function will filter out all revision that user is not requested. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
408 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
409 parts = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
410 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
411 version = '02' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
412 outgoing = discovery.outgoing(bundlerepo, commonheads=bundleroots, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
413 missingheads=[unknownhead]) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
414 cgstream = changegroup.makestream(bundlerepo, outgoing, version, 'pull') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
415 cgstream = util.chunkbuffer(cgstream).read() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
416 cgpart = bundle2.bundlepart('changegroup', data=cgstream) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
417 cgpart.addparam('version', version) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
418 parts.append(cgpart) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
419 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
420 return parts |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
421 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
422 def _getbundleroots(oldrepo, bundlerepo, bundlerevs): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
423 cl = bundlerepo.changelog |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
424 bundleroots = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
425 for rev in bundlerevs: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
426 node = cl.node(rev) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
427 parents = cl.parents(node) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
428 for parent in parents: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
429 # include all revs that exist in the main repo |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
430 # to make sure that bundle may apply client-side |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
431 if parent in oldrepo: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
432 bundleroots.append(parent) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
433 return bundleroots |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
434 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
435 def _needsrebundling(head, bundlerepo): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
436 bundleheads = list(bundlerepo.revs('heads(bundle())')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
437 return not (len(bundleheads) == 1 and |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
438 bundlerepo[bundleheads[0]].node() == head) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
439 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
440 def _generateoutputparts(head, bundlerepo, bundleroots, bundlefile): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
441 '''generates bundle that will be send to the user |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
442 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
443 returns tuple with raw bundle string and bundle type |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
444 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
445 parts = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
446 if not _needsrebundling(head, bundlerepo): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
447 with util.posixfile(bundlefile, "rb") as f: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
448 unbundler = exchange.readbundle(bundlerepo.ui, f, bundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
449 if isinstance(unbundler, changegroup.cg1unpacker): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
450 part = bundle2.bundlepart('changegroup', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
451 data=unbundler._stream.read()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
452 part.addparam('version', '01') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
453 parts.append(part) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
454 elif isinstance(unbundler, bundle2.unbundle20): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
455 haschangegroup = False |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
456 for part in unbundler.iterparts(): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
457 if part.type == 'changegroup': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
458 haschangegroup = True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
459 newpart = bundle2.bundlepart(part.type, data=part.read()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
460 for key, value in part.params.iteritems(): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
461 newpart.addparam(key, value) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
462 parts.append(newpart) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
463 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
464 if not haschangegroup: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
465 raise error.Abort( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
466 'unexpected bundle without changegroup part, ' + |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
467 'head: %s' % hex(head), |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
468 hint='report to administrator') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
469 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
470 raise error.Abort('unknown bundle type') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
471 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
472 parts = _rebundle(bundlerepo, bundleroots, head) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
473 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
474 return parts |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
475 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
476 def getbundlechunks(orig, repo, source, heads=None, bundlecaps=None, **kwargs): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
477 heads = heads or [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
478 # newheads are parents of roots of scratch bundles that were requested |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
479 newphases = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
480 scratchbundles = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
481 newheads = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
482 scratchheads = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
483 nodestobundle = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
484 allbundlestocleanup = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
485 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
486 for head in heads: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
487 if head not in repo.changelog.nodemap: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
488 if head not in nodestobundle: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
489 newbundlefile = common.downloadbundle(repo, head) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
490 bundlepath = "bundle:%s+%s" % (repo.root, newbundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
491 bundlerepo = hg.repository(repo.ui, bundlepath) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
492 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
493 allbundlestocleanup.append((bundlerepo, newbundlefile)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
494 bundlerevs = set(_readbundlerevs(bundlerepo)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
495 bundlecaps = _includefilelogstobundle( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
496 bundlecaps, bundlerepo, bundlerevs, repo.ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
497 cl = bundlerepo.changelog |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
498 bundleroots = _getbundleroots(repo, bundlerepo, bundlerevs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
499 for rev in bundlerevs: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
500 node = cl.node(rev) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
501 newphases[hex(node)] = str(phases.draft) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
502 nodestobundle[node] = (bundlerepo, bundleroots, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
503 newbundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
504 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
505 scratchbundles.append( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
506 _generateoutputparts(head, *nodestobundle[head])) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
507 newheads.extend(bundleroots) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
508 scratchheads.append(head) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
509 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
510 for bundlerepo, bundlefile in allbundlestocleanup: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
511 bundlerepo.close() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
512 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
513 os.unlink(bundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
514 except (IOError, OSError): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
515 # if we can't cleanup the file then just ignore the error, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
516 # no need to fail |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
517 pass |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
518 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
519 pullfrombundlestore = bool(scratchbundles) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
520 wrappedchangegrouppart = False |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
521 wrappedlistkeys = False |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
522 oldchangegrouppart = exchange.getbundle2partsmapping['changegroup'] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
523 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
524 def _changegrouppart(bundler, *args, **kwargs): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
525 # Order is important here. First add non-scratch part |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
526 # and only then add parts with scratch bundles because |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
527 # non-scratch part contains parents of roots of scratch bundles. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
528 result = oldchangegrouppart(bundler, *args, **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
529 for bundle in scratchbundles: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
530 for part in bundle: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
531 bundler.addpart(part) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
532 return result |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
533 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
534 exchange.getbundle2partsmapping['changegroup'] = _changegrouppart |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
535 wrappedchangegrouppart = True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
536 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
537 def _listkeys(orig, self, namespace): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
538 origvalues = orig(self, namespace) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
539 if namespace == 'phases' and pullfrombundlestore: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
540 if origvalues.get('publishing') == 'True': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
541 # Make repo non-publishing to preserve draft phase |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
542 del origvalues['publishing'] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
543 origvalues.update(newphases) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
544 return origvalues |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
545 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
546 extensions.wrapfunction(localrepo.localrepository, 'listkeys', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
547 _listkeys) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
548 wrappedlistkeys = True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
549 heads = list((set(newheads) | set(heads)) - set(scratchheads)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
550 result = orig(repo, source, heads=heads, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
551 bundlecaps=bundlecaps, **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
552 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
553 if wrappedchangegrouppart: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
554 exchange.getbundle2partsmapping['changegroup'] = oldchangegrouppart |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
555 if wrappedlistkeys: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
556 extensions.unwrapfunction(localrepo.localrepository, 'listkeys', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
557 _listkeys) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
558 return result |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
559 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
560 def _lookupwrap(orig): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
561 def _lookup(repo, proto, key): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
562 localkey = encoding.tolocal(key) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
563 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
564 if isinstance(localkey, str) and _scratchbranchmatcher(localkey): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
565 scratchnode = repo.bundlestore.index.getnode(localkey) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
566 if scratchnode: |
38067
a40041caf8af
py3: use '%d' for integers in hgext/infinitepush/__init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37792
diff
changeset
|
567 return "%d %s\n" % (1, scratchnode) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
568 else: |
38067
a40041caf8af
py3: use '%d' for integers in hgext/infinitepush/__init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37792
diff
changeset
|
569 return "%d %s\n" % (0, 'scratch branch %s not found' % localkey) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
570 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
571 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
572 r = hex(repo.lookup(localkey)) |
38067
a40041caf8af
py3: use '%d' for integers in hgext/infinitepush/__init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37792
diff
changeset
|
573 return "%d %s\n" % (1, r) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
574 except Exception as inst: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
575 if repo.bundlestore.index.getbundle(localkey): |
38067
a40041caf8af
py3: use '%d' for integers in hgext/infinitepush/__init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37792
diff
changeset
|
576 return "%d %s\n" % (1, localkey) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
577 else: |
38083
5f2dc1b71cf1
py3: use utils.stringutil.forcebytestr to convert error to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38067
diff
changeset
|
578 r = stringutil.forcebytestr(inst) |
38067
a40041caf8af
py3: use '%d' for integers in hgext/infinitepush/__init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37792
diff
changeset
|
579 return "%d %s\n" % (0, r) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
580 return _lookup |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
581 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
582 def _pull(orig, ui, repo, source="default", **opts): |
37577
e7eea8582afa
py3: use pycompat.{strkwargs|byteskwargs} in infinitepush
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37239
diff
changeset
|
583 opts = pycompat.byteskwargs(opts) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
584 # Copy paste from `pull` command |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
585 source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
586 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
587 scratchbookmarks = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
588 unfi = repo.unfiltered() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
589 unknownnodes = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
590 for rev in opts.get('rev', []): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
591 if rev not in unfi: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
592 unknownnodes.append(rev) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
593 if opts.get('bookmark'): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
594 bookmarks = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
595 revs = opts.get('rev') or [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
596 for bookmark in opts.get('bookmark'): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
597 if _scratchbranchmatcher(bookmark): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
598 # rev is not known yet |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
599 # it will be fetched with listkeyspatterns next |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
600 scratchbookmarks[bookmark] = 'REVTOFETCH' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
601 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
602 bookmarks.append(bookmark) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
603 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
604 if scratchbookmarks: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
605 other = hg.peer(repo, opts, source) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
606 fetchedbookmarks = other.listkeyspatterns( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
607 'bookmarks', patterns=scratchbookmarks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
608 for bookmark in scratchbookmarks: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
609 if bookmark not in fetchedbookmarks: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
610 raise error.Abort('remote bookmark %s not found!' % |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
611 bookmark) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
612 scratchbookmarks[bookmark] = fetchedbookmarks[bookmark] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
613 revs.append(fetchedbookmarks[bookmark]) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
614 opts['bookmark'] = bookmarks |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
615 opts['rev'] = revs |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
616 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
617 if scratchbookmarks or unknownnodes: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
618 # Set anyincoming to True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
619 extensions.wrapfunction(discovery, 'findcommonincoming', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
620 _findcommonincoming) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
621 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
622 # Remote scratch bookmarks will be deleted because remotenames doesn't |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
623 # know about them. Let's save it before pull and restore after |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
624 remotescratchbookmarks = _readscratchremotebookmarks(ui, repo, source) |
37577
e7eea8582afa
py3: use pycompat.{strkwargs|byteskwargs} in infinitepush
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37239
diff
changeset
|
625 result = orig(ui, repo, source, **pycompat.strkwargs(opts)) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
626 # TODO(stash): race condition is possible |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
627 # if scratch bookmarks was updated right after orig. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
628 # But that's unlikely and shouldn't be harmful. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
629 if common.isremotebooksenabled(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
630 remotescratchbookmarks.update(scratchbookmarks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
631 _saveremotebookmarks(repo, remotescratchbookmarks, source) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
632 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
633 _savelocalbookmarks(repo, scratchbookmarks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
634 return result |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
635 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
636 if scratchbookmarks: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
637 extensions.unwrapfunction(discovery, 'findcommonincoming') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
638 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
639 def _readscratchremotebookmarks(ui, repo, other): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
640 if common.isremotebooksenabled(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
641 remotenamesext = extensions.find('remotenames') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
642 remotepath = remotenamesext.activepath(repo.ui, other) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
643 result = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
644 # Let's refresh remotenames to make sure we have it up to date |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
645 # Seems that `repo.names['remotebookmarks']` may return stale bookmarks |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
646 # and it results in deleting scratch bookmarks. Our best guess how to |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
647 # fix it is to use `clearnames()` |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
648 repo._remotenames.clearnames() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
649 for remotebookmark in repo.names['remotebookmarks'].listnames(repo): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
650 path, bookname = remotenamesext.splitremotename(remotebookmark) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
651 if path == remotepath and _scratchbranchmatcher(bookname): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
652 nodes = repo.names['remotebookmarks'].nodes(repo, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
653 remotebookmark) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
654 if nodes: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
655 result[bookname] = hex(nodes[0]) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
656 return result |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
657 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
658 return {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
659 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
660 def _saveremotebookmarks(repo, newbookmarks, remote): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
661 remotenamesext = extensions.find('remotenames') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
662 remotepath = remotenamesext.activepath(repo.ui, remote) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
663 branches = collections.defaultdict(list) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
664 bookmarks = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
665 remotenames = remotenamesext.readremotenames(repo) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
666 for hexnode, nametype, remote, rname in remotenames: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
667 if remote != remotepath: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
668 continue |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
669 if nametype == 'bookmarks': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
670 if rname in newbookmarks: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
671 # It's possible if we have a normal bookmark that matches |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
672 # scratch branch pattern. In this case just use the current |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
673 # bookmark node |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
674 del newbookmarks[rname] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
675 bookmarks[rname] = hexnode |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
676 elif nametype == 'branches': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
677 # saveremotenames expects 20 byte binary nodes for branches |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
678 branches[rname].append(bin(hexnode)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
679 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
680 for bookmark, hexnode in newbookmarks.iteritems(): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
681 bookmarks[bookmark] = hexnode |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
682 remotenamesext.saveremotenames(repo, remotepath, branches, bookmarks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
683 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
684 def _savelocalbookmarks(repo, bookmarks): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
685 if not bookmarks: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
686 return |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
687 with repo.wlock(), repo.lock(), repo.transaction('bookmark') as tr: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
688 changes = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
689 for scratchbook, node in bookmarks.iteritems(): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
690 changectx = repo[node] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
691 changes.append((scratchbook, changectx.node())) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
692 repo._bookmarks.applychanges(repo, tr, changes) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
693 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
694 def _findcommonincoming(orig, *args, **kwargs): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
695 common, inc, remoteheads = orig(*args, **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
696 return common, True, remoteheads |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
697 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
698 def _push(orig, ui, repo, dest=None, *args, **opts): |
37199
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
699 |
37578
56df2ca5c032
py3: prevent transformer from adding b'' by adding r'' prefix
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37577
diff
changeset
|
700 bookmark = opts.get(r'bookmark') |
37199
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
701 # we only support pushing one infinitepush bookmark at once |
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
702 if len(bookmark) == 1: |
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
703 bookmark = bookmark[0] |
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
704 else: |
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
705 bookmark = '' |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
706 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
707 oldphasemove = None |
37198
78c2e9418278
infinitepush: drop the `--create` flag to push command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37197
diff
changeset
|
708 overrides = {(experimental, configbookmark): bookmark} |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
709 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
710 with ui.configoverride(overrides, 'infinitepush'): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
711 scratchpush = opts.get('bundle_store') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
712 if _scratchbranchmatcher(bookmark): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
713 scratchpush = True |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
714 # bundle2 can be sent back after push (for example, bundle2 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
715 # containing `pushkey` part to update bookmarks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
716 ui.setconfig(experimental, 'bundle2.pushback', True) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
717 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
718 if scratchpush: |
37199
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
719 # this is an infinitepush, we don't want the bookmark to be applied |
c5687ce3b411
infinitepush: drop the `--to` flag to push and use `-B` instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37198
diff
changeset
|
720 # rather that should be stored in the bundlestore |
37578
56df2ca5c032
py3: prevent transformer from adding b'' by adding r'' prefix
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37577
diff
changeset
|
721 opts[r'bookmark'] = [] |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
722 ui.setconfig(experimental, configscratchpush, True) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
723 oldphasemove = extensions.wrapfunction(exchange, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
724 '_localphasemove', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
725 _phasemove) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
726 # Copy-paste from `push` command |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
727 path = ui.paths.getpath(dest, default=('default-push', 'default')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
728 if not path: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
729 raise error.Abort(_('default repository not configured!'), |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
730 hint=_("see 'hg help config.paths'")) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
731 destpath = path.pushloc or path.loc |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
732 # Remote scratch bookmarks will be deleted because remotenames doesn't |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
733 # know about them. Let's save it before push and restore after |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
734 remotescratchbookmarks = _readscratchremotebookmarks(ui, repo, destpath) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
735 result = orig(ui, repo, dest, *args, **opts) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
736 if common.isremotebooksenabled(ui): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
737 if bookmark and scratchpush: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
738 other = hg.peer(repo, opts, destpath) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
739 fetchedbookmarks = other.listkeyspatterns('bookmarks', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
740 patterns=[bookmark]) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
741 remotescratchbookmarks.update(fetchedbookmarks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
742 _saveremotebookmarks(repo, remotescratchbookmarks, destpath) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
743 if oldphasemove: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
744 exchange._localphasemove = oldphasemove |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
745 return result |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
746 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
747 def _deleteinfinitepushbookmarks(ui, repo, path, names): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
748 """Prune remote names by removing the bookmarks we don't want anymore, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
749 then writing the result back to disk |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
750 """ |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
751 remotenamesext = extensions.find('remotenames') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
752 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
753 # remotename format is: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
754 # (node, nametype ("branches" or "bookmarks"), remote, name) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
755 nametype_idx = 1 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
756 remote_idx = 2 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
757 name_idx = 3 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
758 remotenames = [remotename for remotename in \ |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
759 remotenamesext.readremotenames(repo) \ |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
760 if remotename[remote_idx] == path] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
761 remote_bm_names = [remotename[name_idx] for remotename in \ |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
762 remotenames if remotename[nametype_idx] == "bookmarks"] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
763 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
764 for name in names: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
765 if name not in remote_bm_names: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
766 raise error.Abort(_("infinitepush bookmark '{}' does not exist " |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
767 "in path '{}'").format(name, path)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
768 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
769 bookmarks = {} |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
770 branches = collections.defaultdict(list) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
771 for node, nametype, remote, name in remotenames: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
772 if nametype == "bookmarks" and name not in names: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
773 bookmarks[name] = node |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
774 elif nametype == "branches": |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
775 # saveremotenames wants binary nodes for branches |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
776 branches[name].append(bin(node)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
777 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
778 remotenamesext.saveremotenames(repo, path, branches, bookmarks) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
779 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
780 def _phasemove(orig, pushop, nodes, phase=phases.public): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
781 """prevent commits from being marked public |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
782 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
783 Since these are going to a scratch branch, they aren't really being |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
784 published.""" |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
785 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
786 if phase != phases.public: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
787 orig(pushop, nodes, phase) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
788 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
789 @exchange.b2partsgenerator(scratchbranchparttype) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
790 def partgen(pushop, bundler): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
791 bookmark = pushop.ui.config(experimental, configbookmark) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
792 scratchpush = pushop.ui.configbool(experimental, configscratchpush) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
793 if 'changesets' in pushop.stepsdone or not scratchpush: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
794 return |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
795 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
796 if scratchbranchparttype not in bundle2.bundle2caps(pushop.remote): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
797 return |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
798 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
799 pushop.stepsdone.add('changesets') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
800 if not pushop.outgoing.missing: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
801 pushop.ui.status(_('no changes found\n')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
802 pushop.cgresult = 0 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
803 return |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
804 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
805 # This parameter tells the server that the following bundle is an |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
806 # infinitepush. This let's it switch the part processing to our infinitepush |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
807 # code path. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
808 bundler.addparam("infinitepush", "True") |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
809 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
810 scratchparts = bundleparts.getscratchbranchparts(pushop.repo, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
811 pushop.remote, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
812 pushop.outgoing, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
813 pushop.ui, |
37198
78c2e9418278
infinitepush: drop the `--create` flag to push command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37197
diff
changeset
|
814 bookmark) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
815 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
816 for scratchpart in scratchparts: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
817 bundler.addpart(scratchpart) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
818 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
819 def handlereply(op): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
820 # server either succeeds or aborts; no code to read |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
821 pushop.cgresult = 1 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
822 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
823 return handlereply |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
824 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
825 bundle2.capabilities[bundleparts.scratchbranchparttype] = () |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
826 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
827 def _getrevs(bundle, oldnode, force, bookmark): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
828 'extracts and validates the revs to be imported' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
829 revs = [bundle[r] for r in bundle.revs('sort(bundle())')] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
830 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
831 # new bookmark |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
832 if oldnode is None: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
833 return revs |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
834 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
835 # Fast forward update |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
836 if oldnode in bundle and list(bundle.set('bundle() & %s::', oldnode)): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
837 return revs |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
838 |
37203
f083e7fd6313
infinitepush: delete the non-forward-move flag for hg push
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37202
diff
changeset
|
839 return revs |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
840 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
841 @contextlib.contextmanager |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
842 def logservicecall(logger, service, **kwargs): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
843 start = time.time() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
844 logger(service, eventtype='start', **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
845 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
846 yield |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
847 logger(service, eventtype='success', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
848 elapsedms=(time.time() - start) * 1000, **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
849 except Exception as e: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
850 logger(service, eventtype='failure', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
851 elapsedms=(time.time() - start) * 1000, errormsg=str(e), |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
852 **kwargs) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
853 raise |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
854 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
855 def _getorcreateinfinitepushlogger(op): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
856 logger = op.records['infinitepushlogger'] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
857 if not logger: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
858 ui = op.repo.ui |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
859 try: |
37204
0d6c12668691
inifnitepush: use utils.{stringutil|procutil}.* instead of util.*
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37203
diff
changeset
|
860 username = procutil.getuser() |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
861 except Exception: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
862 username = 'unknown' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
863 # Generate random request id to be able to find all logged entries |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
864 # for the same request. Since requestid is pseudo-generated it may |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
865 # not be unique, but we assume that (hostname, username, requestid) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
866 # is unique. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
867 random.seed() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
868 requestid = random.randint(0, 2000000000) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
869 hostname = socket.gethostname() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
870 logger = functools.partial(ui.log, 'infinitepush', user=username, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
871 requestid=requestid, hostname=hostname, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
872 reponame=ui.config('infinitepush', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
873 'reponame')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
874 op.records.add('infinitepushlogger', logger) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
875 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
876 logger = logger[0] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
877 return logger |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
878 |
37206
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
879 def storetobundlestore(orig, repo, op, unbundler): |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
880 """stores the incoming bundle coming from push command to the bundlestore |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
881 instead of applying on the revlogs""" |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
882 |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
883 repo.ui.status(_("storing changesets on the bundlestore\n")) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
884 bundler = bundle2.bundle20(repo.ui) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
885 |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
886 # processing each part and storing it in bundler |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
887 with bundle2.partiterator(repo, op, unbundler) as parts: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
888 for part in parts: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
889 bundlepart = None |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
890 if part.type == 'replycaps': |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
891 # This configures the current operation to allow reply parts. |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
892 bundle2._processpart(op, part) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
893 else: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
894 bundlepart = bundle2.bundlepart(part.type, data=part.read()) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
895 for key, value in part.params.iteritems(): |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
896 bundlepart.addparam(key, value) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
897 |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
898 # Certain parts require a response |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
899 if part.type in ('pushkey', 'changegroup'): |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
900 if op.reply is not None: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
901 rpart = op.reply.newpart('reply:%s' % part.type) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
902 rpart.addparam('in-reply-to', str(part.id), |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
903 mandatory=False) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
904 rpart.addparam('return', '1', mandatory=False) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
905 |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
906 op.records.add(part.type, { |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
907 'return': 1, |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
908 }) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
909 if bundlepart: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
910 bundler.addpart(bundlepart) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
911 |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
912 # storing the bundle in the bundlestore |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
913 buf = util.chunkbuffer(bundler.getchunks()) |
38164
aac4be30e250
py3: wrap tempfile.mkstemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
38088
diff
changeset
|
914 fd, bundlefile = pycompat.mkstemp() |
37206
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
915 try: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
916 try: |
37578
56df2ca5c032
py3: prevent transformer from adding b'' by adding r'' prefix
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37577
diff
changeset
|
917 fp = os.fdopen(fd, r'wb') |
37206
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
918 fp.write(buf.read()) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
919 finally: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
920 fp.close() |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
921 storebundle(op, {}, bundlefile) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
922 finally: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
923 try: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
924 os.unlink(bundlefile) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
925 except Exception: |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
926 # we would rather see the original exception |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
927 pass |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
928 |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
929 def processparts(orig, repo, op, unbundler): |
37205
e5cd0ef5c362
infinitepush: don't wrap bundle2.processparts while calling `hg unbundle`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37204
diff
changeset
|
930 |
e5cd0ef5c362
infinitepush: don't wrap bundle2.processparts while calling `hg unbundle`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37204
diff
changeset
|
931 # make sure we don't wrap processparts in case of `hg unbundle` |
37239
40ee0af04e3a
infinitepush: use bundleoperation.source instead of hacking on tr
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37233
diff
changeset
|
932 if op.source == 'unbundle': |
40ee0af04e3a
infinitepush: use bundleoperation.source instead of hacking on tr
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37233
diff
changeset
|
933 return orig(repo, op, unbundler) |
37205
e5cd0ef5c362
infinitepush: don't wrap bundle2.processparts while calling `hg unbundle`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37204
diff
changeset
|
934 |
37206
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
935 # this server routes each push to bundle store |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
936 if repo.ui.configbool('infinitepush', 'pushtobundlestore'): |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
937 return storetobundlestore(orig, repo, op, unbundler) |
571f25dae740
infinitepush: introduce server option to route every push to bundlestore
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37205
diff
changeset
|
938 |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
939 if unbundler.params.get('infinitepush') != 'True': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
940 return orig(repo, op, unbundler) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
941 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
942 handleallparts = repo.ui.configbool('infinitepush', 'storeallparts') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
943 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
944 bundler = bundle2.bundle20(repo.ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
945 cgparams = None |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
946 with bundle2.partiterator(repo, op, unbundler) as parts: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
947 for part in parts: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
948 bundlepart = None |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
949 if part.type == 'replycaps': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
950 # This configures the current operation to allow reply parts. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
951 bundle2._processpart(op, part) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
952 elif part.type == bundleparts.scratchbranchparttype: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
953 # Scratch branch parts need to be converted to normal |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
954 # changegroup parts, and the extra parameters stored for later |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
955 # when we upload to the store. Eventually those parameters will |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
956 # be put on the actual bundle instead of this part, then we can |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
957 # send a vanilla changegroup instead of the scratchbranch part. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
958 cgversion = part.params.get('cgversion', '01') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
959 bundlepart = bundle2.bundlepart('changegroup', data=part.read()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
960 bundlepart.addparam('version', cgversion) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
961 cgparams = part.params |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
962 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
963 # If we're not dumping all parts into the new bundle, we need to |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
964 # alert the future pushkey and phase-heads handler to skip |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
965 # the part. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
966 if not handleallparts: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
967 op.records.add(scratchbranchparttype + '_skippushkey', True) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
968 op.records.add(scratchbranchparttype + '_skipphaseheads', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
969 True) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
970 else: |
37197
7fa00a6f8180
infinitepush: drop logic related to treemanifest extension
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37196
diff
changeset
|
971 if handleallparts: |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
972 # Ideally we would not process any parts, and instead just |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
973 # forward them to the bundle for storage, but since this |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
974 # differs from previous behavior, we need to put it behind a |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
975 # config flag for incremental rollout. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
976 bundlepart = bundle2.bundlepart(part.type, data=part.read()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
977 for key, value in part.params.iteritems(): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
978 bundlepart.addparam(key, value) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
979 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
980 # Certain parts require a response |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
981 if part.type == 'pushkey': |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
982 if op.reply is not None: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
983 rpart = op.reply.newpart('reply:pushkey') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
984 rpart.addparam('in-reply-to', str(part.id), |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
985 mandatory=False) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
986 rpart.addparam('return', '1', mandatory=False) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
987 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
988 bundle2._processpart(op, part) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
989 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
990 if handleallparts: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
991 op.records.add(part.type, { |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
992 'return': 1, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
993 }) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
994 if bundlepart: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
995 bundler.addpart(bundlepart) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
996 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
997 # If commits were sent, store them |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
998 if cgparams: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
999 buf = util.chunkbuffer(bundler.getchunks()) |
38164
aac4be30e250
py3: wrap tempfile.mkstemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
38088
diff
changeset
|
1000 fd, bundlefile = pycompat.mkstemp() |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1001 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1002 try: |
37578
56df2ca5c032
py3: prevent transformer from adding b'' by adding r'' prefix
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37577
diff
changeset
|
1003 fp = os.fdopen(fd, r'wb') |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1004 fp.write(buf.read()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1005 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1006 fp.close() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1007 storebundle(op, cgparams, bundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1008 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1009 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1010 os.unlink(bundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1011 except Exception: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1012 # we would rather see the original exception |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1013 pass |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1014 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1015 def storebundle(op, params, bundlefile): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1016 log = _getorcreateinfinitepushlogger(op) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1017 parthandlerstart = time.time() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1018 log(scratchbranchparttype, eventtype='start') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1019 index = op.repo.bundlestore.index |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1020 store = op.repo.bundlestore.store |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1021 op.records.add(scratchbranchparttype + '_skippushkey', True) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1022 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1023 bundle = None |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1024 try: # guards bundle |
38164
aac4be30e250
py3: wrap tempfile.mkstemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
38088
diff
changeset
|
1025 bundlepath = "bundle:%s+%s" % (op.repo.root, bundlefile) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1026 bundle = hg.repository(op.repo.ui, bundlepath) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1027 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1028 bookmark = params.get('bookmark') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1029 bookprevnode = params.get('bookprevnode', '') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1030 force = params.get('force') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1031 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1032 if bookmark: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1033 oldnode = index.getnode(bookmark) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1034 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1035 oldnode = None |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1036 bundleheads = bundle.revs('heads(bundle())') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1037 if bookmark and len(bundleheads) > 1: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1038 raise error.Abort( |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1039 _('cannot push more than one head to a scratch branch')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1040 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1041 revs = _getrevs(bundle, oldnode, force, bookmark) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1042 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1043 # Notify the user of what is being pushed |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1044 plural = 's' if len(revs) > 1 else '' |
37579
ce566e0f73d0
py3: use '%d' for integers instead of '%s'
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37578
diff
changeset
|
1045 op.repo.ui.warn(_("pushing %d commit%s:\n") % (len(revs), plural)) |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1046 maxoutput = 10 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1047 for i in range(0, min(len(revs), maxoutput)): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1048 firstline = bundle[revs[i]].description().split('\n')[0][:50] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1049 op.repo.ui.warn((" %s %s\n") % (revs[i], firstline)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1050 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1051 if len(revs) > maxoutput + 1: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1052 op.repo.ui.warn((" ...\n")) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1053 firstline = bundle[revs[-1]].description().split('\n')[0][:50] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1054 op.repo.ui.warn((" %s %s\n") % (revs[-1], firstline)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1055 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1056 nodesctx = [bundle[rev] for rev in revs] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1057 inindex = lambda rev: bool(index.getbundle(bundle[rev].hex())) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1058 if bundleheads: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1059 newheadscount = sum(not inindex(rev) for rev in bundleheads) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1060 else: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1061 newheadscount = 0 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1062 # If there's a bookmark specified, there should be only one head, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1063 # so we choose the last node, which will be that head. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1064 # If a bug or malicious client allows there to be a bookmark |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1065 # with multiple heads, we will place the bookmark on the last head. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1066 bookmarknode = nodesctx[-1].hex() if nodesctx else None |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1067 key = None |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1068 if newheadscount: |
37792
33d26f7bd6ca
infinitepush: open files in binary mode
Matt Harbison <matt_harbison@yahoo.com>
parents:
37785
diff
changeset
|
1069 with open(bundlefile, 'rb') as f: |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1070 bundledata = f.read() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1071 with logservicecall(log, 'bundlestore', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1072 bundlesize=len(bundledata)): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1073 bundlesizelimit = 100 * 1024 * 1024 # 100 MB |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1074 if len(bundledata) > bundlesizelimit: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1075 error_msg = ('bundle is too big: %d bytes. ' + |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1076 'max allowed size is 100 MB') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1077 raise error.Abort(error_msg % (len(bundledata),)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1078 key = store.write(bundledata) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1079 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1080 with logservicecall(log, 'index', newheadscount=newheadscount), index: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1081 if key: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1082 index.addbundle(key, nodesctx) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1083 if bookmark: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1084 index.addbookmark(bookmark, bookmarknode) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1085 _maybeaddpushbackpart(op, bookmark, bookmarknode, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1086 bookprevnode, params) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1087 log(scratchbranchparttype, eventtype='success', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1088 elapsedms=(time.time() - parthandlerstart) * 1000) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1089 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1090 except Exception as e: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1091 log(scratchbranchparttype, eventtype='failure', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1092 elapsedms=(time.time() - parthandlerstart) * 1000, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1093 errormsg=str(e)) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1094 raise |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1095 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1096 if bundle: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1097 bundle.close() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1098 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1099 @bundle2.parthandler(scratchbranchparttype, |
37198
78c2e9418278
infinitepush: drop the `--create` flag to push command
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37197
diff
changeset
|
1100 ('bookmark', 'bookprevnode', 'force', |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1101 'pushbackbookmarks', 'cgversion')) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1102 def bundle2scratchbranch(op, part): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1103 '''unbundle a bundle2 part containing a changegroup to store''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1104 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1105 bundler = bundle2.bundle20(op.repo.ui) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1106 cgversion = part.params.get('cgversion', '01') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1107 cgpart = bundle2.bundlepart('changegroup', data=part.read()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1108 cgpart.addparam('version', cgversion) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1109 bundler.addpart(cgpart) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1110 buf = util.chunkbuffer(bundler.getchunks()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1111 |
38164
aac4be30e250
py3: wrap tempfile.mkstemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
38088
diff
changeset
|
1112 fd, bundlefile = pycompat.mkstemp() |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1113 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1114 try: |
37578
56df2ca5c032
py3: prevent transformer from adding b'' by adding r'' prefix
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37577
diff
changeset
|
1115 fp = os.fdopen(fd, r'wb') |
37187
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1116 fp.write(buf.read()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1117 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1118 fp.close() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1119 storebundle(op, part.params, bundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1120 finally: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1121 try: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1122 os.unlink(bundlefile) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1123 except OSError as e: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1124 if e.errno != errno.ENOENT: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1125 raise |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1126 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1127 return 1 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1128 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1129 def _maybeaddpushbackpart(op, bookmark, newnode, oldnode, params): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1130 if params.get('pushbackbookmarks'): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1131 if op.reply and 'pushback' in op.reply.capabilities: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1132 params = { |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1133 'namespace': 'bookmarks', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1134 'key': bookmark, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1135 'new': newnode, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1136 'old': oldnode, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1137 } |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1138 op.reply.newpart('pushkey', mandatoryparams=params.iteritems()) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1139 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1140 def bundle2pushkey(orig, op, part): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1141 '''Wrapper of bundle2.handlepushkey() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1142 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1143 The only goal is to skip calling the original function if flag is set. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1144 It's set if infinitepush push is happening. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1145 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1146 if op.records[scratchbranchparttype + '_skippushkey']: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1147 if op.reply is not None: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1148 rpart = op.reply.newpart('reply:pushkey') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1149 rpart.addparam('in-reply-to', str(part.id), mandatory=False) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1150 rpart.addparam('return', '1', mandatory=False) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1151 return 1 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1152 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1153 return orig(op, part) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1154 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1155 def bundle2handlephases(orig, op, part): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1156 '''Wrapper of bundle2.handlephases() |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1157 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1158 The only goal is to skip calling the original function if flag is set. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1159 It's set if infinitepush push is happening. |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1160 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1161 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1162 if op.records[scratchbranchparttype + '_skipphaseheads']: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1163 return |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1164 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1165 return orig(op, part) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1166 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1167 def _asyncsavemetadata(root, nodes): |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1168 '''starts a separate process that fills metadata for the nodes |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1169 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1170 This function creates a separate process and doesn't wait for it's |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1171 completion. This was done to avoid slowing down pushes |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1172 ''' |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1173 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1174 maxnodes = 50 |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1175 if len(nodes) > maxnodes: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1176 return |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1177 nodesargs = [] |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1178 for node in nodes: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1179 nodesargs.append('--node') |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1180 nodesargs.append(node) |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1181 with open(os.devnull, 'w+b') as devnull: |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1182 cmdline = [util.hgexecutable(), 'debugfillinfinitepushmetadata', |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1183 '-R', root] + nodesargs |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1184 # Process will run in background. We don't care about the return code |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1185 subprocess.Popen(cmdline, close_fds=True, shell=False, |
03ff17a4bf53
infinitepush: move the extension to core from fb-hgext
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
1186 stdin=devnull, stdout=devnull, stderr=devnull) |