[ditrack commit] r2407 - src/trunk/DITrack/DB

Vlad Skvortsov vss at 73rus.com
Thu Feb 14 11:12:45 PST 2008


oleg at ditrack.org wrote:
> Author: oleg
> Date: 2007-12-07 11:49:11 -0800 (Fri, 07 Dec 2007)
> New Revision: 2407
>
> Modified:
>    src/trunk/DITrack/DB/Issue.py
>    src/trunk/DITrack/DB/WC.py
> Log:
> added checking of new comment or issue
>
>
> Modified: src/trunk/DITrack/DB/Issue.py
> ===================================================================
> --- src/trunk/DITrack/DB/Issue.py    2007-12-06 18:26:14 UTC (rev 2406)
> +++ src/trunk/DITrack/DB/Issue.py    2007-12-07 19:49:11 UTC (rev 2407)
> @@ -397,7 +397,16 @@
>  
>          return map(lambda k: "%s: %s%s" % (k, self.info[k], 
> terminator), keys)
>  
> +    def isset_new_comment(self, path):
>   

Comments?

I would suggest renaming this function into is_last_firm_comment() which 
would accept a firm comment number and tell if that's the latest one.

>  
> +        n = int(self.firm_names[len(self.firm_names)-1])

...[-1]?

> +        fname = os.path.join(path, "comment%d" % (n + 1))
> +
> +        if os.path.isfile(fname):
> +            return True

Why not os.path.exists()? If we are checking if the name is really a 
file, it makes sense to throw an exception if the entry exists but is 
not in fact a file.

> +
> +        return False
> +
>      def load(cls, path):
>          """
>          Load an issue from path PATH (should point to a directory).
>
> Modified: src/trunk/DITrack/DB/WC.py
> ===================================================================
> --- src/trunk/DITrack/DB/WC.py    2007-12-06 18:26:14 UTC (rev 2406)
> +++ src/trunk/DITrack/DB/WC.py    2007-12-07 19:49:11 UTC (rev 2407)
> @@ -261,25 +261,42 @@
>          working copy.
>          """
>   

Looking at the following block of code makes me thinking: should we 
place all caching logic under Issue.load()? With the current approach we 
have to be very careful to keep the cache coherent (e.g. whenever the 
issue is loaded, we have to update the cache).

...or, maybe add a method to the WC class, say, load_issue() that would 
transparently incorporate caching, and implement issues() in terms of that?

These are just thoughts, I'm not really positive we need them at this 
point (may be an 'XXX' in the code just to remember?). What do you think?

>  
> +        res = []
>          if len(self.cache):
> -            return self.cache.get()
>  
> -        issue_re = re.compile("^i(\\d+)$")
> +            issues = self.cache.get()
>   

Cache.__len__() does len(self.get()) and here we make another redundant 
call to get(). Why not just do get() and see if anything is returned?

> +            for id, issue in issues:
> +                path = os.path.join(self.data_path, "i%s" % id)
> +                if issue.isset_new_comment(path):
> +                    issue = DITrack.DB.Issue.Issue.load(path)
> +                res.append((id, issue))
>  
> -        lst = []
> -        for fn in os.listdir(self.data_path):
> -            m = issue_re.match(fn)
> -            if m:
> -                lst.append(int(m.group(1)))
> +            while True:
> +                id += 1
> +                path = os.path.join(self.data_path, "i%s" % id)
> +                if os.path.isdir(path):
> +                    issue = DITrack.DB.Issue.Issue.load(path)
> +                    res.append((id, issue))
> +                else:
> +                    break
>  
> -        lst.sort()
> +        else:
>  
> -        res = []
> -        for id in lst:
> -            path = os.path.join(self.data_path, "i%s" % id)
> -            issue = DITrack.DB.Issue.Issue.load(path)
> -            res.append((id, issue))
> +            issue_re = re.compile("^i(\\d+)$")
>  
> +            lst = []
> +            for fn in os.listdir(self.data_path):
> +                m = issue_re.match(fn)
> +                if m:
> +                    lst.append(int(m.group(1)))
> +
> +            lst.sort()
> +
> +            for id in lst:
> +                path = os.path.join(self.data_path, "i%s" % id)
> +                issue = DITrack.DB.Issue.Issue.load(path)
> +                res.append((id, issue))
> +
>          self.cache.set(res)
>  
>          return res
>
> _______________________________________________
> Commit mailing list
> Commit at lists.ditrack.org
> http://lists.ditrack.org/mailman/listinfo/commit
>   


-- 
Vlad Skvortsov, vss at 73rus.com, http://vss.73rus.com



More information about the Dev mailing list