Mercurial > piecrust2
annotate piecrust/admin/scm/mercurial.py @ 887:c0cbcd4752f0
internal: Include the number of fixup callback in the cache key.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Tue, 20 Jun 2017 21:14:41 -0700 |
| parents | 5e91bc0e3b4d |
| children |
| rev | line source |
|---|---|
|
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import os |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import logging |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 import tempfile |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
4 import subprocess |
|
659
a77b4656c602
internal: Move some basic FoodTruck SCM code to the base.
Ludovic Chabant <ludovic@chabant.com>
parents:
626
diff
changeset
|
5 from .base import SourceControl, RepoStatus, _s |
|
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 logger = logging.getLogger(__name__) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 class MercurialSourceControl(SourceControl): |
|
600
c37307a72f79
admin: Fix constructor for Mercurial SCM.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
12 def __init__(self, root_dir, cfg): |
|
c37307a72f79
admin: Fix constructor for Mercurial SCM.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
13 super(MercurialSourceControl, self).__init__(root_dir, cfg) |
|
c37307a72f79
admin: Fix constructor for Mercurial SCM.
Ludovic Chabant <ludovic@chabant.com>
parents:
598
diff
changeset
|
14 self.hg = cfg.get('exe', 'hg') |
|
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 def getStatus(self): |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 res = RepoStatus() |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 st_out = self._run('status') |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 for line in st_out.split('\n'): |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 if len(line) == 0: |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
21 continue |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
22 if line[0] == '?' or line[0] == 'A': |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 res.new_files.append(line[2:]) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 elif line[0] == 'M': |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 res.edited_files.append(line[2:]) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 return res |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 |
|
598
3cec8634209a
admin: Ability to configure SCM stuff per site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
28 def _doCommit(self, paths, message, author): |
|
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 # Check if any of those paths needs to be added. |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 st_out = self._run('status', *paths) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 add_paths = [] |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 for line in st_out.splitlines(): |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 if line[0] == '?': |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 add_paths.append(line[2:]) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 if len(add_paths) > 0: |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 self._run('add', *paths) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 # Create a temp file with the commit message. |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 f, temp = tempfile.mkstemp() |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 with os.fdopen(f, 'w') as fd: |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 fd.write(message) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
42 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 # Commit and clean up the temp file. |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 try: |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 commit_args = list(paths) + ['-l', temp] |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
46 if author: |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 commit_args += ['-u', author] |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 self._run('commit', *commit_args) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 finally: |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 os.remove(temp) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
51 |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 def _run(self, cmd, *args, **kwargs): |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 exe = [self.hg, '-R', self.root_dir] |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 exe.append(cmd) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
55 exe += args |
|
626
a1697b1066bc
admin: Use `HGPLAIN` for the Mercurial VCS provider.
Ludovic Chabant <ludovic@chabant.com>
parents:
600
diff
changeset
|
56 |
|
a1697b1066bc
admin: Use `HGPLAIN` for the Mercurial VCS provider.
Ludovic Chabant <ludovic@chabant.com>
parents:
600
diff
changeset
|
57 env = dict(os.environ) |
|
a1697b1066bc
admin: Use `HGPLAIN` for the Mercurial VCS provider.
Ludovic Chabant <ludovic@chabant.com>
parents:
600
diff
changeset
|
58 env['HGPLAIN'] = 'True' |
|
a1697b1066bc
admin: Use `HGPLAIN` for the Mercurial VCS provider.
Ludovic Chabant <ludovic@chabant.com>
parents:
600
diff
changeset
|
59 |
|
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 logger.debug("Running Mercurial: " + str(exe)) |
|
626
a1697b1066bc
admin: Use `HGPLAIN` for the Mercurial VCS provider.
Ludovic Chabant <ludovic@chabant.com>
parents:
600
diff
changeset
|
61 proc = subprocess.Popen(exe, stdout=subprocess.PIPE, env=env) |
|
a1697b1066bc
admin: Use `HGPLAIN` for the Mercurial VCS provider.
Ludovic Chabant <ludovic@chabant.com>
parents:
600
diff
changeset
|
62 out, _ = proc.communicate() |
|
a1697b1066bc
admin: Use `HGPLAIN` for the Mercurial VCS provider.
Ludovic Chabant <ludovic@chabant.com>
parents:
600
diff
changeset
|
63 |
|
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 encoded_out = _s(out) |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 return encoded_out |
|
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
66 |
