Mercurial > treepkg
annotate bin/updatetreepkg.py @ 557:9824e409388b
Refactor git branching
If a checkout is already available and the branch is changed in
the config git command would always fail because it doesn't know
the branch to track. Therefore always check if the branch is
locally available and if not checkout the remote branch
author | Bjoern Ricks <bricks@intevation.de> |
---|---|
date | Fri, 02 Sep 2011 08:45:28 +0000 |
parents | 5fa56edeb606 |
children |
rev | line source |
---|---|
287
1fcdffbeb9de
Make the #! line in the commands more portable. Use /usr/bin/python
Bernhard Herzog <bh@intevation.de>
parents:
233
diff
changeset
|
1 #! /usr/bin/python |
233
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
2 # Copyright (C) 2007, 2008, 2009 by Intevation GmbH |
144
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
3 # Authors: |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
4 # Bernhard Herzog <bh@intevation.de> |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
5 # |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
6 # This program is free software under the GPL (>=v2) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
7 # Read the file COPYING coming with the software for details. |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
8 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
9 """Script to help update a tree packager installation to the current |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
10 version. The script updates the information stored in the filesystem |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
11 for the individual revisions in the following ways: |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
12 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
13 - Rename the build log from build.log to log/build_log.txt |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
14 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
15 - Rename the build log from build_log.txt to log/build_log.txt |
233
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
16 |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
17 - Rename the directory name of the revision from <revision>-1 to <revision>-0 |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
18 |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
19 The second number is now the revision of the packaging rules if |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
20 they're managed by SVN and always 0 for manual management of the |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
21 rules. |
144
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
22 """ |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
23 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
24 import os |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
25 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
26 import treepkgcmd |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
27 from treepkg.options import create_parser |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
28 from treepkg.packager import create_package_track, PackagerGroup |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
29 from treepkg.readconfig import read_config |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
30 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
31 def rename_file(old_name, new_name, dry_run): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
32 if os.path.exists(old_name): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
33 new_dir = os.path.dirname(new_name) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
34 if not os.path.isdir(new_dir): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
35 print "mkdir %s" % (new_dir,) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
36 if not dry_run: |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
37 os.mkdir(new_dir) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
38 print "mv %s %s" % (old_name, new_name) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
39 if not dry_run: |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
40 os.rename(old_name, new_name) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
41 |
233
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
42 def update_rules_revision_in_directory_names(track, dry_run): |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
43 revisions = track.get_revisions() |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
44 rules_revisions = set(revision.rules_revision for revision in revisions) |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
45 if rules_revisions == set([1]): |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
46 for revision in revisions: |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
47 rename_file(revision.base_dir, |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
48 revision.base_dir[:-2] + "-0", |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
49 dry_run) |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
50 |
144
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
51 def update_treepkg(config_file, dry_run): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
52 treepkg_opts, packager_opts = read_config(config_file) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
53 for opts in packager_opts: |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
54 opts["handle_dependencies"] = False |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
55 group = PackagerGroup([create_package_track(**opts) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
56 for opts in packager_opts], |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
57 **treepkg_opts) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
58 for track in group.get_package_tracks(): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
59 for revision in track.get_revisions(): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
60 # Originally, the build logs were called build.log and were |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
61 # in the base directory of a revision |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
62 rename_file(os.path.join(revision.base_dir, "build.log"), |
336
5fa56edeb606
Changed the Build Logs to be gziped before they are published
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
63 revision.get_build_log(), dry_run) |
144
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
64 # for a while, the build logs were called build_log.txt but |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
65 # still were in the base directory |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
66 rename_file(os.path.join(revision.base_dir, "build_log.txt"), |
336
5fa56edeb606
Changed the Build Logs to be gziped before they are published
Andre Heinecke <aheinecke@intevation.de>
parents:
287
diff
changeset
|
67 revision.get_build_log(), dry_run) |
233
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
68 # Revision directories used to end with "-1". Now that number |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
69 # is the revision of the packaging rules which default to 0 for |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
70 # the traditional manual rules management without a version |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
71 # control system. Rename those directories if necessary |
757e5504f46a
Extend bin/updatetreepkg.py to rename the revision directories if they
Bernhard Herzog <bh@intevation.de>
parents:
144
diff
changeset
|
72 update_rules_revision_in_directory_names(track, dry_run) |
144
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
73 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
74 def parse_commandline(): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
75 parser = create_parser() |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
76 parser.set_defaults(dry_run=False) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
77 parser.add_option("-n", "--dry-run", action="store_true", |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
78 help="Do not actually change anything") |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
79 return parser.parse_args() |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
80 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
81 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
82 def main(): |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
83 options, args = parse_commandline() |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
84 update_treepkg(options.config_file, options.dry_run) |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
85 |
dd54ef8a9244
New file. Script to update an existing treepkg installation to the
Bernhard Herzog <bh@intevation.de>
parents:
diff
changeset
|
86 main() |