annotate treepkg/git.py @ 508:29f6d1f5cc53

add a tag detector for git
author Bjoern Ricks <bricks@intevation.de>
date Mon, 08 Nov 2010 17:07:41 +0000
parents fd52f1e231ba
children c4288095887f
rev   line source
501
fd52f1e231ba Fix typo in a comment
Andre Heinecke <aheinecke@intevation.de>
parents: 447
diff changeset
1 # Copyright (C) 2010 by Intevation GmbH
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
2 # Authors:
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
3 # Andre Heinecke <aheinecke@intevation.de>
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
4 #
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5 # This program is free software under the GPL (>=v2)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
6 # Read the file COPYING coming with the software for details.
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8 """Collection of Git utility code"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10 import os
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
11 import shutil
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
12 import re
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
13 import StringIO
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
14
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
15 import run
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
16 from cmdexpand import cmdexpand
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
17 from util import extract_value_for_key
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
18
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
19
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20 class GitError(Exception):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
21
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22 """Base class for Git specific errors raised by TreePKG"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
23
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
24 def checkout(url, localdir, branch=None):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
25 """Clones the repository at url into the localdir"""
447
1d16e4844f98 Cleanup misplaced whitespace
Andre Heinecke <aheinecke@intevation.de>
parents: 446
diff changeset
26 run.call(cmdexpand("git clone $url $localdir", **locals()))
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
27 if branch:
447
1d16e4844f98 Cleanup misplaced whitespace
Andre Heinecke <aheinecke@intevation.de>
parents: 446
diff changeset
28 run.call(cmdexpand("git checkout --track -b local $branch",
323
ef983263b875 Changed command calls to use cwd and fixed line length
Andre Heinecke <aheinecke@intevation.de>
parents: 321
diff changeset
29 **locals()), cwd=localdir)
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
30 else:
323
ef983263b875 Changed command calls to use cwd and fixed line length
Andre Heinecke <aheinecke@intevation.de>
parents: 321
diff changeset
31 run.call(cmdexpand("git checkout --track -b local master"),
ef983263b875 Changed command calls to use cwd and fixed line length
Andre Heinecke <aheinecke@intevation.de>
parents: 321
diff changeset
32 cwd=localdir)
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
33
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
34 def update(localdir, revision=None):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 """Runs git pull on the localdir."""
323
ef983263b875 Changed command calls to use cwd and fixed line length
Andre Heinecke <aheinecke@intevation.de>
parents: 321
diff changeset
36 run.call(cmdexpand("git pull -q"), cwd=localdir)
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
37
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 def export(src, dest):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39 """Exports the local branch from src to dest"""
446
bee2e5f6cf8d Ignore redundancy of trailing slashes while ensuring to have at least one.
Andre Heinecke <aheinecke@intevation.de>
parents: 444
diff changeset
40 dest = dest + os.sep
323
ef983263b875 Changed command calls to use cwd and fixed line length
Andre Heinecke <aheinecke@intevation.de>
parents: 321
diff changeset
41 run.call(cmdexpand("git checkout-index -a -f --prefix=$dest", **locals()),
ef983263b875 Changed command calls to use cwd and fixed line length
Andre Heinecke <aheinecke@intevation.de>
parents: 321
diff changeset
42 cwd=src)
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
43
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
44 def last_changed_revision(git_working_copy):
328
dd2bd0ccd674 Revisions are now handled as strings
Andre Heinecke <aheinecke@intevation.de>
parents: 324
diff changeset
45 """Return the SHA1 sum of the latest commit"""
dd2bd0ccd674 Revisions are now handled as strings
Andre Heinecke <aheinecke@intevation.de>
parents: 324
diff changeset
46 output = run.capture_output(cmdexpand("git rev-parse HEAD"),
dd2bd0ccd674 Revisions are now handled as strings
Andre Heinecke <aheinecke@intevation.de>
parents: 324
diff changeset
47 cwd=git_working_copy)
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
48 if output is None:
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
49 raise GitError("Cannot determine last changed revision for %r"
328
dd2bd0ccd674 Revisions are now handled as strings
Andre Heinecke <aheinecke@intevation.de>
parents: 324
diff changeset
50 % git_working_copy)
dd2bd0ccd674 Revisions are now handled as strings
Andre Heinecke <aheinecke@intevation.de>
parents: 324
diff changeset
51 return output.strip()
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
52
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
53 class GitRepository(object):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
54
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
55 """Describes a git repository"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
56
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
57 def __init__(self, url, branch=None):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
58 """Initialize the git repository description
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
59 Parameters:
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
60 url -- The url of the repository
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
61
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
62 branch -- The name of the remote Branch to track
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
63 defaults to master
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
64 """
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
65 self.url = url
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
66 self.branch = branch
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
67
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
68 def checkout(self, localdir):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
69 """Checks out the repository into localdir."""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
70 checkout(self.url , localdir, self.branch)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
71 update(localdir)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
72
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
73 def export(self, localdir, destdir):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
74 """Exports the working copy in localdir to destdir"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
75 export(localdir, destdir)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
76
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
77 def last_changed_revision(self, localdir):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
78 """Returns the last changed revision of the working copy in localdir"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
79 return last_changed_revision(localdir)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
80
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
81 def check_working_copy(self, localdir):
447
1d16e4844f98 Cleanup misplaced whitespace
Andre Heinecke <aheinecke@intevation.de>
parents: 446
diff changeset
82 """FIXME STUB: Not implemented for git"""
1d16e4844f98 Cleanup misplaced whitespace
Andre Heinecke <aheinecke@intevation.de>
parents: 446
diff changeset
83 return None
321
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
84
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
85 class GitWorkingCopy(object):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
86
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
87 """Represents a checkout of a git repository"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
88
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
89 def __init__(self, repository, localdir, logger=None):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
90 """
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
91 Initialize the working copy.
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
92 Parameters:
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
93 repository -- The GitRepository instance describing the
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
94 repository
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
95 localdir -- The directory for the working copy
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
96 logger -- logging object to use for some info/debug messages
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
97 """
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
98 self.repository = repository
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
99 self.localdir = localdir
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
100 self.logger = logger
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
101
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
102 def log_info(self, *args):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
103 if self.logger is not None:
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
104 self.logger.info(*args)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
105
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
106 def update_or_checkout(self, revision=0):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
107 """Updates the working copy or creates by checking out the repository.
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
108 Revision number included for compatibility
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
109 """
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
110 if os.path.exists(self.localdir):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
111 self.log_info("Updating the working copy in %r", self.localdir)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
112 update(self.localdir, self.repository.branch)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
113 else:
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
114 self.log_info("The working copy in %r doesn't exist yet."
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
115 " Checking out from %r",
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
116 self.localdir, self.repository.url)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
117 self.repository.checkout(self.localdir)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
118
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
119 def export(self, destdir):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
120 """Exports the working copy to destdir"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
121 self.repository.export(self.localdir, destdir)
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
122
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
123 def last_changed_revision(self):
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
124 """Returns the last changed rev of the working copy"""
092925ff75d7 Added basic Git support, configuration options:
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
125 return self.repository.last_changed_revision(self.localdir)
508
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
126
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
127 def list_tags(self, pattern):
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
128 output = run.capture_output(cmdexpand("git tag -l $pattern",
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
129 pattern=pattern), cwd=self.localdir)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
130 return output.splitlines()
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
131
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
132 def get_revision(self, refname="HEAD"):
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
133 """Return the SHA1 sum of the latest commit"""
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
134 output = run.capture_output(cmdexpand("git rev-parse $id",
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
135 refname=refname), cwd=git_working_copy)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
136 if output is None:
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
137 raise GitError("Cannot determine revision for %r"
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
138 % git_working_copy)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
139 return output.strip()
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
140
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
141 class TagDetector:
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
142
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
143 """Class to detect tags from a git repository
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
144
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
145 The tags are found using the parameters:
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
146 url -- The url of the git repository to use
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
147 pattern -- A regular expression matching the tags
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
148 """
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
149
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
150 def __init__(self, url, pattern, localdir):
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
151 self.url = url
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
152 self.pattern = pattern
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
153 repo = GitRepository(url)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
154 self.workingcopy = GitWorkingCopy(repo, localdir)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
155
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
156 def newest_tag_revision(self):
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
157 self.workingcopy.update_or_checkout()
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
158 candidates = self.workingcopy.list_tags(self.pattern)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
159 candidates = sorted(candidates)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
160 urlrev = (None, None)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
161 if candidates:
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
162 newest = candidates[-1]
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
163 try:
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
164 rev = self.workingcopy.get_revision(newest)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
165 urlrev = (newest, rev)
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
166 except GitError:
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
167 pass
29f6d1f5cc53 add a tag detector for git
Bjoern Ricks <bricks@intevation.de>
parents: 501
diff changeset
168 return urlrev
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)