#2324 closed defect (fixed)
global trac.ini settings don't work consistently
Reported by: | Owned by: | Christopher Lenz | |
---|---|---|---|
Priority: | high | Milestone: | 0.9.4 |
Component: | general | Version: | 0.9 |
Severity: | normal | Keywords: | |
Cc: | kazarmy@…, dserodio@…, adeason@…, thomas.jachmann@… | Branch: | |
Release Notes: | |||
API Changes: | |||
Internal Changes: |
Description
After upgrading to trac 0.9, I moved all my non project specific configuration to /usr/share/trac/conf/trac.ini, only leaving a minimal set of settings in the environment's configuration files, in the most simple case just trac→repository_dir and project→name. Unfortunately, not all settings got set for all the environments.
Examples:
- I defined a custom field in ticket-custom. The field itself was there, but the name wasn't displayed.
- Using the ldap extension http://trac-hacks.swapoff.org/wiki/LdapPlugin doesn't work - the extension gets loaded but is disabled since the "enable" setting isn't set properly
These are just small examples, but all in all, the central trac.ini doesn't seem to work - do extensions need to access the settings in a different way?
Attachments (1)
Change History (18)
comment:1 by , 19 years ago
Cc: | added |
---|
comment:2 by , 19 years ago
Cc: | added |
---|
comment:3 by , 19 years ago
Milestone: | → 0.9.3 |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:4 by , 19 years ago
comment:5 by , 19 years ago
Cc: | added |
---|
Sorry if I'm missing something obvious, but why doesn't config.py just call self.parser.read([self.site_filename, self.filename]) in parse_if_needed()? It seems like that would load all defaults, and override them automatically with environment-specific values. Is there a reason normal values are kept separate from default values, like it is now?
comment:6 by , 19 years ago
In that case I don't think we could differentiate between global and local
config values… which would mean that all of the values would get written
back to the local config file on save()
. Obviously not what we want
here.
comment:7 by , 19 years ago
Okay, thanks, that's what I was missing. The reason I asked is that about/config doesn't reflect global values in most sections, unless a local value has been set in that section. This is because I presume about/config calls sections(), which would only return the sections in the local config. Should sections() also include sections only in the global config? The patch appears to work, by the way, after minimal testing.
comment:8 by , 19 years ago
Cc: | added |
---|
Concerning writing all settings to the local config file on save(): Isn't this what happens anyway? I remember having all settings written to the local file after using WebAdmin and changing the default component. Before, only minimal settings were in the local file. Only changed settings should be written to the local file in this case.
comment:9 by , 19 years ago
Basically…. no. At least, that's not what happens with any of my installations. Webadmin just calls save(), which calls the write() method on the local config parser.
comment:10 by , 19 years ago
I don't know the code or have enough insight to judge what happens inside, but it seems to write all available settings (whether read from local or global trac.ini) to the local file. At least that is what happens on my 0.9.2 installation. This makes the feature of a global trac.ini rather useless. You'll have a local copy of the global trac.ini as soon as you change something like the default component using WebAdmin. Further changes of the global file will be ignored since they're overwritten with the old values locally.
comment:11 by , 19 years ago
I do agree that in that case, it would be quite useless. However, that is not what happens with my 0.9.2 installation. Can anyone else comment on what happens? And just for reference, I believe the relevant code is around line 81 of config.py:
def save(self): if not self.filename: return fileobj = file(self.filename, 'w') try: self.parser.write(fileobj) finally: fileobj.close()
And around line 80 of ticket.py in the webadmin module:
# Set default component elif req.args.get('apply'): if req.args.get('default'): name = req.args.get('default') self.log.info('Setting default component to %s', name) self.config.set('ticket', 'default_component', name) self.config.save() req.redirect(self.env.href.admin(cat, page))
comment:12 by , 19 years ago
Milestone: | 0.9.3 → 0.9.4 |
---|
comment:13 by , 19 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:14 by , 19 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Please never close a ticket without an explanation (especially if you're anonymous)
comment:15 by , 19 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
comment:16 by , 19 years ago
Does this also fix the behaviour that all settings will be written to the local trac.ini no matter whether they originated from it or from the global trac.ini upon save()? Or am I the only one getting this behaviour? As far as I've seen, the two changesets only affect read methods.
comment:17 by , 19 years ago
No it doesn't, and no, I'm not seeing that behavior. Please file a new ticket with details so we can try to reproduce.
The attached patch should fix the issue. Please test if you have a chance.