1735: Perforce clients not adding the charset

caro*****@gmai***** (Google Code) (Is this you? Claim this profile.)
david
david
Feb. 6, 2012
1736
What version are you running?
Applies both to 1.0 and 1.5RC1

What's the URL of the page containing the problem?
It's an issue on the reviewboard/scmtools/perforce.py file

What steps will reproduce the problem?
1. Add a perforce repository whose server is unicode
2. try to upload a review
3. The log will say: "Unicode servers permits only unicode enabled clients"

What is the expected output? What do you see instead?
You should be able to post reviews, you get an error message.

What operating system are you using? What browser?
Doesn't apply.

Please provide any additional information below.

One could solve it by adding the environment variable P4CHARSET, but if you want to use different repositories, some unicode, some not, that won't work.

I have fixed it temporarily by adding on perforce.py:

  import P4
  self.p4 = P4.P4()
  self.p4.port = str(repository.mirror_path or repository.path)
  self.p4.user = str(repository.username)
  self.p4.password = str(repository.password)
  if (str(repository.encoding)):
    self.p4.charset = str(repository.encoding)
  self.p4.exception_level = 1

And

  cmdline = ['p4', '-p', self.p4.port]
  if self.p4.user:
    cmdline.extend(['-u', self.p4.user])
  if self.p4.password:
    cmdline.extend(['-P', self.p4.password])
  if self.p4.charset:    
    cmdline.extend(['-C', self.p4.charset])
  cmdline.extend(['print', '-q', file])

But that's just a temporary fix, since I don't know the real meaning of the encoding attribute.
david
#2 david
  • +Component-SCMTools
david
#3 david
  • +PendingReview
  • +david
david
#4 david
Fixed in master (5ed25c2). Thanks!
  • -PendingReview
    +Fixed
#5 Stev*****@gmai***** (Google Code) (Is this you? Claim this profile.)
Hi, I got this error in version 1.6.4.1. According to workaround, I modified perforce.py which is under ~/reviewboard/scmtools folder. Then the system show below info:
 "Please correct the error below.
    global name 'repository' is not defined"

Modified content:

  import P4
  self.p4 = P4.P4()
  self.p4.port = str(repository.mirror_path or repository.path)
  self.p4.user = str(repository.username)
  self.p4.password = str(repository.password)
  if (str(repository.encoding)):
    self.p4.charset = str(repository.encoding)
  self.p4.exception_level = 1

  cmdline = ['p4', '-p', self.p4.port]
  if self.p4.user:
    cmdline.extend(['-u', self.p4.user])
  if self.p4.password:
    cmdline.extend(['-P', self.p4.password])
  if self.p4.charset:    
    cmdline.extend(['-C', self.p4.charset])
  cmdline.extend(['print', '-q', file])
#6 Stev*****@gmai***** (Google Code) (Is this you? Claim this profile.)
Does anyone can tell me how to define "repository" as global name ?
#7 caro*****@gmai***** (Google Code) (Is this you? Claim this profile.)
The only lines I added on the top portion were:

  if (str(repository.encoding)):
    self.p4.charset = str(repository.encoding)

so, you should look at the other lines to see how they were accessing the repository configuration on your version. You should not define repository as a global name yourself. You have to use whatever is being used already.