annotate bin/updatetreepkg.py @ 570:44c0f8404983

Refactor git pull command out of update Tag MUST NOT use update because therefore it always changes the current local branch! For listing the tags it's enough to pull the latest repo changes
author Bjoern Ricks <bricks@intevation.de>
date Fri, 02 Sep 2011 11:46:29 +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()
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)