/stdhome

To get this branch, use:
bzr branch http://bzr.ed.am/stdhome

« back to all changes in this revision

Viewing changes to lib/stdhome/repo.py

  • Committer: Tim Marston
  • Date: 2016-12-13 21:40:34 UTC
  • Revision ID: tim@ed.am-20161213214034-nd5t7ztnlrjd627i
fix add command and generic filename expansion/resolution to expend to
homedir-relative filename and absolute filename based on original filename, as
specified, rather than a fully, symlink-resolved filename.  So, e.g., if ~/bob
was a symlink to ~/fred, then ~/bob/a would resolve to the relative filename
bob/a, becuase it is inside the homedir (it would resolve to fred/a otherwise)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# repo.py
2
2
#
3
 
# Copyright (C) 2013 Tim Marston <tim@edm.am>
 
3
# Copyright (C) 2013 to 2014 Tim Marston <tim@edm.am>
4
4
#
5
5
# This file is part of stdhome (hereafter referred to as "this program").
6
6
# See http://ed.am/dev/stdhome for more information.
20
20
 
21
21
 
22
22
import os
23
 
import the
 
23
import the, util
 
24
from vcs.vcs import Vcs
24
25
 
25
26
 
26
27
class Repo:
28
29
 
29
30
        def __init__( self, name ):
30
31
                self.name = name
31
 
                self.dir = '%s/%s' % ( the.dir, self.name )
32
 
                self.expanded_dir = os.path.expanduser( self.dir )
 
32
                self.dir = os.path.join( the.dir, self.name )
 
33
                self.full_dir = util.canonicalise_path( self.dir )
 
34
                self.vcs = False
33
35
 
34
36
 
35
37
        def check_dir_exists( self, should_exist = True ):
36
 
                condition = 'does not' if should_exist else 'already'
37
 
                if os.path.exists( self.expanded_dir ) != should_exist:
 
38
                if os.path.exists( self.full_dir ) != should_exist:
 
39
                        error = 'does not exist' if should_exist else 'already exists'
38
40
                        raise the.program.FatalError(
39
 
                                'repository %s exists: %s' % ( condition, self.dir ) )
 
41
                                'repository %s: %s' % ( error, self.dir ) )
 
42
 
 
43
 
 
44
        def detect_vcs( self ):
 
45
                if os.path.exists( self.full_dir ):
 
46
                        for vcs in Vcs.vcses:
 
47
                                instance = Vcs.instantiate_vcs( vcs, self.full_dir )
 
48
                                if instance.has_authority():
 
49
                                        if the.verbose >= 2: print "repo vcs: %s" % vcs
 
50
                                        self.vcs = instance
 
51
                                        break
 
52
                        if self.vcs == False:
 
53
                                raise the.program.FatalError(
 
54
                                        'unknown vcs in repository: %s' % self.dir )
 
55
 
 
56
 
 
57
        def set_vcs( self, vcs ):
 
58
                if Vcs.vcses.count( vcs ) == 1:
 
59
                        self.vcs = Vcs.instantiate_vcs( vcs, self.full_dir )
 
60
                        if the.verbose >= 2: print "repo vcs: %s" % vcs
 
61
                else:
 
62
                        raise the.program.FatalError( 'unknown vcs requested: %s' % vcs )
 
63
 
 
64
 
 
65
        def __str__( self ):
 
66
                return "Repo( %s: %s )" % ( self.name, self.dir )