~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

(jelmer) Switch the commit code over to use config stacks. (Bazaar
 Developers)

Show diffs side-by-side

added added

removed removed

Lines of Context:
152
152
STORE_GLOBAL = 4
153
153
 
154
154
 
 
155
def signature_policy_from_unicode(signature_string):
 
156
    """Convert a string to a signing policy."""
 
157
    if signature_string.lower() == 'check-available':
 
158
        return CHECK_IF_POSSIBLE
 
159
    if signature_string.lower() == 'ignore':
 
160
        return CHECK_NEVER
 
161
    if signature_string.lower() == 'require':
 
162
        return CHECK_ALWAYS
 
163
    raise ValueError("Invalid signatures policy '%s'"
 
164
                     % signature_string)
 
165
 
 
166
 
 
167
def signing_policy_from_unicode(signature_string):
 
168
    """Convert a string to a signing policy."""
 
169
    if signature_string.lower() == 'when-required':
 
170
        return SIGN_WHEN_REQUIRED
 
171
    if signature_string.lower() == 'never':
 
172
        return SIGN_NEVER
 
173
    if signature_string.lower() == 'always':
 
174
        return SIGN_ALWAYS
 
175
    raise ValueError("Invalid signing policy '%s'"
 
176
                     % signature_string)
 
177
 
 
178
 
155
179
class ConfigObj(configobj.ConfigObj):
156
180
 
157
181
    def __init__(self, infile=None, **kwargs):
418
442
            l = [l]
419
443
        return l
420
444
        
421
 
    def get_user_option_as_int_from_SI(self,  option_name,  default=None):
 
445
    def get_user_option_as_int_from_SI(self, option_name, default=None):
422
446
        """Get a generic option from a human readable size in SI units, e.g 10MB
423
447
        
424
448
        Accepted suffixes are K,M,G. It is case-insensitive and may be followed
457
481
        return val
458
482
        
459
483
 
 
484
    @deprecated_method(deprecated_in((2, 5, 0)))
460
485
    def gpg_signing_command(self):
461
486
        """What program should be used to sign signatures?"""
462
487
        result = self._gpg_signing_command()
492
517
        """See validate_signatures_in_log()."""
493
518
        return None
494
519
 
 
520
    @deprecated_method(deprecated_in((2, 5, 0)))
495
521
    def acceptable_keys(self):
496
522
        """Comma separated list of key patterns acceptable to 
497
523
        verify-signatures command"""
502
528
        """See acceptable_keys()."""
503
529
        return None
504
530
 
 
531
    @deprecated_method(deprecated_in((2, 5, 0)))
505
532
    def post_commit(self):
506
533
        """An ordered list of python functions to call.
507
534
 
533
560
        v = self._get_user_id()
534
561
        if v:
535
562
            return v
536
 
        v = os.environ.get('EMAIL')
537
 
        if v:
538
 
            return v.decode(osutils.get_user_encoding())
539
 
        name, email = _auto_user_id()
540
 
        if name and email:
541
 
            return '%s <%s>' % (name, email)
542
 
        elif email:
543
 
            return email
544
 
        raise errors.NoWhoami()
 
563
        return default_email()
545
564
 
546
565
    def ensure_username(self):
547
566
        """Raise errors.NoWhoami if username is not set.
550
569
        """
551
570
        self.username()
552
571
 
 
572
    @deprecated_method(deprecated_in((2, 5, 0)))
553
573
    def signature_checking(self):
554
574
        """What is the current policy for signature checking?."""
555
575
        policy = self._get_signature_checking()
557
577
            return policy
558
578
        return CHECK_IF_POSSIBLE
559
579
 
 
580
    @deprecated_method(deprecated_in((2, 5, 0)))
560
581
    def signing_policy(self):
561
582
        """What is the current policy for signature checking?."""
562
583
        policy = self._get_signing_policy()
564
585
            return policy
565
586
        return SIGN_WHEN_REQUIRED
566
587
 
 
588
    @deprecated_method(deprecated_in((2, 5, 0)))
567
589
    def signature_needed(self):
568
590
        """Is a signature needed when committing ?."""
569
591
        policy = self._get_signing_policy()
578
600
            return True
579
601
        return False
580
602
 
 
603
    @deprecated_method(deprecated_in((2, 5, 0)))
581
604
    def gpg_signing_key(self):
582
605
        """GPG user-id to sign commits"""
583
606
        key = self.get_user_option('gpg_signing_key')
868
891
        """See Config._get_signature_checking."""
869
892
        policy = self._get_user_option('check_signatures')
870
893
        if policy:
871
 
            return self._string_to_signature_policy(policy)
 
894
            return signature_policy_from_unicode(policy)
872
895
 
873
896
    def _get_signing_policy(self):
874
897
        """See Config._get_signing_policy"""
875
898
        policy = self._get_user_option('create_signatures')
876
899
        if policy:
877
 
            return self._string_to_signing_policy(policy)
 
900
            return signing_policy_from_unicode(policy)
878
901
 
879
902
    def _get_user_id(self):
880
903
        """Get the user id from the 'email' key in the current section."""
925
948
        """See Config.post_commit."""
926
949
        return self._get_user_option('post_commit')
927
950
 
928
 
    def _string_to_signature_policy(self, signature_string):
929
 
        """Convert a string to a signing policy."""
930
 
        if signature_string.lower() == 'check-available':
931
 
            return CHECK_IF_POSSIBLE
932
 
        if signature_string.lower() == 'ignore':
933
 
            return CHECK_NEVER
934
 
        if signature_string.lower() == 'require':
935
 
            return CHECK_ALWAYS
936
 
        raise errors.BzrError("Invalid signatures policy '%s'"
937
 
                              % signature_string)
938
 
 
939
 
    def _string_to_signing_policy(self, signature_string):
940
 
        """Convert a string to a signing policy."""
941
 
        if signature_string.lower() == 'when-required':
942
 
            return SIGN_WHEN_REQUIRED
943
 
        if signature_string.lower() == 'never':
944
 
            return SIGN_NEVER
945
 
        if signature_string.lower() == 'always':
946
 
            return SIGN_ALWAYS
947
 
        raise errors.BzrError("Invalid signing policy '%s'"
948
 
                              % signature_string)
949
 
 
950
951
    def _get_alias(self, value):
951
952
        try:
952
953
            return self._get_parser().get_value("ALIASES",
1635
1636
        f.close()
1636
1637
 
1637
1638
 
 
1639
 
 
1640
 
 
1641
def default_email():
 
1642
    v = os.environ.get('EMAIL')
 
1643
    if v:
 
1644
        return v.decode(osutils.get_user_encoding())
 
1645
    name, email = _auto_user_id()
 
1646
    if name and email:
 
1647
        return u'%s <%s>' % (name, email)
 
1648
    elif email:
 
1649
        return email
 
1650
    raise errors.NoWhoami()
 
1651
 
 
1652
 
 
1653
def email_from_store(unicode_str):
 
1654
    """Unlike other env vars, BZR_EMAIL takes precedence over config settings.
 
1655
 
 
1656
    Whatever comes from a config file is then overridden.
 
1657
    """
 
1658
    value = os.environ.get('BZR_EMAIL')
 
1659
    if value:
 
1660
        return value.decode(osutils.get_user_encoding())
 
1661
    return unicode_str
 
1662
 
 
1663
 
1638
1664
def _auto_user_id():
1639
1665
    """Calculate automatic user identification.
1640
1666
 
2316
2342
    """
2317
2343
 
2318
2344
    def __init__(self, name, default=None, default_from_env=None,
2319
 
                 help=None,
2320
 
                 from_unicode=None, invalid=None):
 
2345
                 help=None, from_unicode=None, invalid=None):
2321
2346
        """Build an option definition.
2322
2347
 
2323
2348
        :param name: the name used to refer to the option.
2398
2423
        for var in self.default_from_env:
2399
2424
            try:
2400
2425
                # If the env variable is defined, its value is the default one
2401
 
                value = os.environ[var]
 
2426
                value = os.environ[var].decode(osutils.get_user_encoding())
2402
2427
                break
2403
2428
            except KeyError:
2404
2429
                continue
2511
2536
# Registered options in lexicographical order
2512
2537
 
2513
2538
option_registry.register(
 
2539
    Option('acceptable_keys',
 
2540
           default=None, from_unicode=list_from_store,
 
2541
           help="""\
 
2542
List of GPG key patterns which are acceptable for verification.
 
2543
"""))
 
2544
option_registry.register(
2514
2545
    Option('bzr.workingtree.worth_saving_limit', default=10,
2515
2546
           from_unicode=int_from_store,  invalid='warning',
2516
2547
           help='''\
2523
2554
a file has been touched.
2524
2555
'''))
2525
2556
option_registry.register(
 
2557
    Option('check_signatures', default=CHECK_IF_POSSIBLE,
 
2558
           from_unicode=signature_policy_from_unicode,
 
2559
           help='''\
 
2560
GPG checking policy.
 
2561
 
 
2562
Possible values: require, ignore, check-available (default)
 
2563
 
 
2564
this option will control whether bzr will require good gpg
 
2565
signatures, ignore them, or check them if they are
 
2566
present.
 
2567
'''))
 
2568
option_registry.register(
 
2569
    Option('create_signatures', default=SIGN_WHEN_REQUIRED,
 
2570
           from_unicode=signing_policy_from_unicode,
 
2571
           help='''\
 
2572
GPG Signing policy.
 
2573
 
 
2574
Possible values: always, never, when-required (default)
 
2575
 
 
2576
This option controls whether bzr will always create
 
2577
gpg signatures or not on commits.
 
2578
'''))
 
2579
option_registry.register(
2526
2580
    Option('dirstate.fdatasync', default=True,
2527
2581
           from_unicode=bool_from_store,
2528
2582
           help='''\
2552
2606
    Option('editor',
2553
2607
           help='The command called to launch an editor to enter a message.'))
2554
2608
option_registry.register(
 
2609
    Option('email', default=default_email,
 
2610
           from_unicode=email_from_store,
 
2611
           help='The users identity'))
 
2612
option_registry.register(
 
2613
    Option('gpg_signing_command',
 
2614
           default='gpg',
 
2615
           help="""\
 
2616
Program to use use for creating signatures.
 
2617
 
 
2618
This should support at least the -u and --clearsign options.
 
2619
"""))
 
2620
option_registry.register(
 
2621
    Option('gpg_signing_key',
 
2622
           default=None,
 
2623
           help="""\
 
2624
GPG key to use for signing.
 
2625
 
 
2626
This defaults to the first key associated with the users email.
 
2627
"""))
 
2628
option_registry.register(
2555
2629
    Option('ignore_missing_extensions', default=False,
2556
2630
           from_unicode=bool_from_store,
2557
2631
           help='''\
2587
2661
           help= 'Unicode encoding for output'
2588
2662
           ' (terminal encoding if not specified).'))
2589
2663
option_registry.register(
 
2664
    Option('post_commit', default=None,
 
2665
           help='''\
 
2666
Post commit functions.
 
2667
 
 
2668
An ordered list of python functions to call, separated by spaces.
 
2669
 
 
2670
Each function takes branch, rev_id as parameters.
 
2671
'''))
 
2672
option_registry.register(
2590
2673
    Option('push_strict', default=None,
2591
2674
           from_unicode=bool_from_store,
2592
2675
           help='''\