describe.py #1

  • //
  • guest/
  • matthew_janulewicz/
  • p4spam-1.1/
  • pylib/
  • p4spam/
  • perforce/
  • commands/
  • describe.py
  • View
  • Commits
  • Open Download .zip Download (3 KB)
##
## Copyright (c) 2006 Jason Dillon
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
##     http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##

##
## $Id: describe.py 26 2006-04-15 06:25:53Z user57 $
##

from p4spam.perforce import P4Field, P4Code, P4Exception
from p4spam.perforce.commands import ResultSupport, SingleResultCommand

COMMAND_NAME = "describe"

##
## DescribeCommand
##

class DescribeCommand(SingleResultCommand):
    def __init__(this, p4):
        SingleResultCommand.__init__(this, COMMAND_NAME, p4)
    
    def createResult(this, entry):
        return DescriptionInfo(entry)

##
## DescriptionInfo
##

class DescriptionInfo(ResultSupport):
    def __init__(this, entry):
        if entry[P4Field.CODE] == P4Code.STAT:
            this.status = entry['status']
            this.client = entry['client']
            this.user = entry['user']
            this.change = entry['change']
            this.desc = entry['desc']
            this.time = int(entry['time'])
            
            ##
            ## TODO: Include jobstatus
            ##
            
            ##
            ## TODO: Inlcude job<n>
            ##
            
            files = []
            i = 0
            try:
                while True:
                    files.append(FileInfo(entry, i))
                    i = i + 1
            except KeyError:
                pass
            
            this.files = files
            
        else:
            assert "Unexpected data: %s" % str(entry)
    
    def toString(this):
        return "%s %s %s %s %s %s %s" % (
            this.status,
            this.client,
            this.user,
            this.change,
            this.desc,
            this.time,
            this.files
        )

##
## FileInfo
##

class FileInfo(ResultSupport):
    def __init__(this, entry, i):
        if entry[P4Field.CODE] == P4Code.STAT:
            this.i = i
            this.action = entry["action%s" % i]
            this.path = entry["depotFile%s" % i]
            this.rev = int(entry["rev%s" % i])
            this.type = entry["type%s" % i]
        
        else:
            assert "Unexpected data: %s" % str(entry)
    
    def toString(this):
        return "[%s] %s %s#%s (%s)" % (
            this.i,
            this.action,
            this.path,
            this.rev,
            this.type
        )

##
## perforce.commands factory interface
##

def create(p4):
    return DescribeCommand(p4)

# Change User Description Committed
#1 7731 Matthew Janulewicz Adding P4Spam 1.1 code from http://p4spam.sourceforge.net/wiki/Main_Page

"P4Spam is a Perforce change review daemon which spits out sexy HTML-styled notification emails."