จะค้นหาไฟล์ที่ไม่ถูกติดตามในโครงสร้าง Perforce ได้อย่างไร? (อะนาล็อกของสถานะ svn)


87

ใครมีสคริปต์หรือนามแฝงเพื่อค้นหาไฟล์ที่ไม่ได้ติดตาม (จริงๆ: ไม่มีการเพิ่ม) ในโครงสร้าง Perforce?

แก้ไข: ฉันอัปเดตคำตอบที่ยอมรับสำหรับคำตอบนี้เนื่องจากดูเหมือนว่า P4V จะเพิ่มการสนับสนุนสำหรับสิ่งนี้ในรุ่นเดือนมกราคม 2552


11
ฉันนึกไม่ออกว่าทำไมเครื่องมือ SCM ขององค์กรที่ใช้มากที่สุดจึงไม่มีฟังก์ชันนี้ อาจเป็นไปได้ว่านักพัฒนาทั้งหมดของพวกเขาใช้ GUI เท่านั้น
sorin

3
ร้องลั่น !!!! ได้รับการยอมรับp4 statusไม่เพียงแค่ค้นหาไฟล์ที่ไม่ถูกติดตามเท่านั้น แต่ยังเริ่มติดตามไฟล์เหล่านี้ IE p4 statusไม่ใช่แบบสอบถามแบบอ่านอย่างเดียวเนื่องจากอาจสงสัยจากชื่อ แต่เป็นคำสั่งที่เปลี่ยนแปลงสิ่งต่างๆไม่ใช่ไฟล์พื้นที่ทำงาน นี่ไม่ใช่สิ่งที่คำสั่งสถานะควรทำและไม่ใช่สิ่งที่svn statusทำ สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้svn statusคือp4 reconcile -na- - พูดว่า "ไฟล์ที่ควรเพิ่ม", -n เพื่อบอกว่า "ไม่ได้เปลี่ยนแปลงอะไรเลย" /// เดิมฉันพูดอะไรแรงกว่านี้มาก
Krazy Glew

1
ฉันฟื้นstackoverflow.com/questions/9642531/…ซึ่งถูกทำเครื่องหมายอย่างไม่ถูกต้องว่าซ้ำกับstackoverflow.com/questions/9272/…เป็นคำถามใหม่(คำสั่ง p4 เทียบเท่ากับอะไรเช่น git / hg / bzr / svn สถานะ? (คำใบ้: ไม่p4 status)แล้วตอบเองยินดีดีกว่า
Krazy Glew

ทั้งสองp4 reconcileและp4 statusช้าเหมือนนรกในขณะที่git statusดำเนินการเสร็จสิ้นใน 1-3 วินาที
zwcloud

คำตอบ:


81

แก้ไข:โปรดใช้p4 statusตอนนี้ ไม่จำเป็นต้องกระโดดผ่านห่วงอีกต่อไป ดู @ ColonelPanic ของคำตอบ

ใน P4V เวอร์ชันมกราคม 2009 คุณสามารถคลิกขวาที่โฟลเดอร์ใดก็ได้ในโครงสร้างพื้นที่ทำงานของคุณแล้วคลิก "กระทบยอดงานออฟไลน์ ... "

การดำเนินการนี้จะดำเนินการเล็กน้อยจากนั้นจะแสดงมุมมองต้นไม้แยกของไฟล์ที่ไม่ได้เช็คเอาต์ แต่มีความแตกต่างจากเวอร์ชันดีโปหรือไม่ได้เช็คอินเลย อาจมีหมวดหมู่อื่น ๆ อีกเล็กน้อย

คุณสามารถคลิกขวาที่ไฟล์ในมุมมองนี้และตรวจสอบเพิ่มหรือแม้แต่เปลี่ยนกลับ

เป็นเครื่องมือที่มีประโยชน์มากที่ช่วยชีวิตฉันได้ไม่กี่ครั้ง

แก้ไข: อ่าคำถามที่ถามเกี่ยวกับสคริปต์โดยเฉพาะ แต่ฉันจะทิ้งคำตอบนี้ไว้ที่นี่ในกรณีนี้


เพิ่มโซลูชัน powershell ในคำถามนี้: stackoverflow.com/questions/3217152/…
tenpn

สิ่งนี้แตกต่างกันทุกไฟล์เทียบกับเวอร์ชันใน repo หรือไม่ ฉันมี repo ขนาดใหญ่และการเชื่อมต่อที่ช้า (เมื่อทำงานจากที่บ้าน) อาจใช้เวลาตลอดไป!
gdw2

ฉันไม่คิดว่ามันเป็นความแตกต่างแบบเต็ม แต่มันก็ไม่เร็ว
tenpn

10
ร้องลั่น !!!! p4 statusไม่เพียงแค่ค้นหาไฟล์ที่ไม่ได้ติดตามเท่านั้น แต่ยังเริ่มติดตามไฟล์เหล่านี้ IE p4 statusไม่ใช่แบบสอบถามแบบอ่านอย่างเดียวเนื่องจากอาจสงสัยจากชื่อ แต่เป็นคำสั่งที่เปลี่ยนแปลงสิ่งต่างๆไม่ใช่ไฟล์พื้นที่ทำงาน นี่ไม่ใช่สิ่งที่คำสั่งสถานะควรทำและไม่ใช่สิ่งที่svn statusทำ สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้svn statusคือp4 reconcile -na- - พูดว่า "ไฟล์ที่ควรเพิ่ม", -n เพื่อบอกว่า "ไม่ได้เปลี่ยนแปลงอะไรเลย" /// เดิมฉันพูดอะไรแรงกว่านี้มาก
Krazy Glew

1
p4 statusp4 reconcile -nเป็นพื้นไวพจน์สำหรับ บางทีคุณวิ่งp4 status -Aซึ่งเป็นคำพ้องความหมายp4 reconcile?
Samwise

50

บน linux หรือหากคุณติดตั้ง gnu-tools บน windows:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

ซึ่งจะแสดงข้อความแสดงข้อผิดพลาดสำหรับทุกไฟล์ที่ไม่มีบัญชี หากคุณต้องการจับภาพผลลัพธ์นั้น:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile

1
การเปลี่ยนเส้นทาง stderr ไปที่ stdout จะช่วยให้คุณทำการกรองเพิ่มเติมหรือดำเนินการอื่น ๆ ตัวอย่างเช่นหากต้องการดูรายการไฟล์ Java ที่เลื่อนได้: find. - พิมพ์ f -print0 | xargs -0 p4 fstat 2> & 1> / dev / null | grep '\ .java' | น้อยกว่า
Jon Nadal

2
การดำเนินการนี้ใช้เวลานานอย่างมากในพื้นที่ทำงานไฟล์ 60K ของฉัน ฉันได้เขียนสคริปต์หลามซึ่งไม่งานเดียวกันในภายใต้ 10 วินาที: P5 นอกจากนี้ยังรองรับ.p4ignoreและสามารถดูตัวอย่างและแก้ไขไฟล์ที่ไม่ได้ติดตาม / เปลี่ยนแปลง / ลบโดยอัตโนมัติ
hamstergene

@hamstergene ดีมาก!
Mark Harrison

เขียนสคริปต์ขนาดเล็กที่ทำอย่างนั้นหากใครสนใจ (รวมถึงอาร์กิวเมนต์ dir อาร์กิวเมนต์ความลึกสูงสุดและเอาต์พุตไปยัง stdout)
Arnon Zilca

ขอบคุณ; ฉันพบว่าสิ่งนี้มีประโยชน์! โปรดทราบว่าสิ่งนี้ไม่จัดการ symlinks ( find . -type l) และให้เอาต์พุตที่ทำให้เข้าใจผิดสำหรับไฟล์ P4 ที่บังคับให้เพิ่มเนื่องจากมีอักขระ@หรือ %อย่างไรก็ตามไฟล์ดังกล่าวอยู่ในส่วนน้อยดังนั้นการตรวจสอบกรณี edge เหล่านี้ด้วยตนเองจะได้ผลในกรณีส่วนใหญ่
CJBS

19

ภายใต้ Unix:

find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'

สิ่งนี้จะพิมพ์รายการไฟล์ที่ไม่ได้เพิ่มในไคลเอนต์ของคุณหรือที่เก็บ Perforce ฉันเคย! -name '*~'ยกเว้นไฟล์ที่ลงท้ายด้วย ~.


12

อ่าหนึ่งในคลาสสิกของ Perforce :) ใช่มันแย่มากที่ยังไม่มีวิธีง่ายๆสำหรับสิ่งนี้ในคำสั่งเริ่มต้น

วิธีที่ง่ายที่สุดคือเรียกใช้คำสั่งเพื่อค้นหาไฟล์ทั้งหมดภายใต้รูทไคลเอ็นต์ของคุณจากนั้นพยายามเพิ่มลงในดีโป คุณจะพบกับรายการการเปลี่ยนแปลงของไฟล์ใหม่ทั้งหมดและไฟล์ที่มีอยู่จะถูกละเว้น

เช่น dir / s / b / AD | p4 -x - เพิ่ม

(ใช้ 'find. -type f -print' จากบรรทัดคำสั่ง nix)

หากคุณต้องการรายการทางกายภาพ (ในคอนโซลหรือไฟล์) คุณสามารถไพพ์ผลลัพธ์ของความแตกต่าง (หรือเพิ่มหากคุณต้องการให้อยู่ในรายการการเปลี่ยนแปลงด้วย)

หากคุณกำลังเรียกใช้สิ่งนี้ภายใน P4Win คุณสามารถใช้ $ r เพื่อแทนที่รูทไคลเอ็นต์ของพื้นที่ทำงานปัจจุบัน


11

มีอะนาล็อกของsvn statusหรือgit status?

ใช่ แต่ .

สำหรับ Perforce เวอร์ชัน 2012.1 มีคำสั่งp4 statusและใน P4V 'กระทบยอดงานออฟไลน์' อย่างไรก็ตามทั้งคู่ช้ามาก หากต้องการยกเว้นไฟล์ที่ไม่เกี่ยวข้องคุณจะต้องเขียนp4ignore.txtไฟล์ต่อ https://stackoverflow.com/a/13126496/284795


1
มีการปรับปรุงประสิทธิภาพหลายอย่างp4 statusตั้งแต่รุ่น 2012.1 หากคุณอยู่ห่างจากp4 statusปัญหาด้านประสิทธิภาพอาจคุ้มค่าที่จะทดสอบอีกครั้งเพื่อดูว่าตอนนี้ทำงานอย่างไร
Bryan Pendleton

7

ฉันรู้สึกถูกกระตุ้นให้เพิ่มคำตอบเนื่องจากคำตอบที่ยอมรับและคำตอบอื่น ๆ บางส่วนมีสิ่งที่ฉันคิดว่าเป็นปัญหาสำคัญ: พวกเขาไม่เข้าใจความแตกต่างระหว่างคำสั่งเคียวรีแบบอ่านอย่างเดียวและคำสั่งที่ทำการเปลี่ยนแปลง

ฉันไม่คาดหวังเครดิตใด ๆ สำหรับคำตอบนี้ แต่ฉันหวังว่ามันจะช่วยให้ผู้อื่นหลีกเลี่ยงการเสียเวลาและทำผิดพลาดโดยทำตามคำตอบที่ยอมรับ แต่ IMHO ไม่ถูกต้อง

--- + สั้น ๆ

วิธีที่สะดวกที่สุดในการค้นหาไฟล์ที่ไม่ได้ติดตามทั้งหมดในพื้นที่ทำงานของ perforce คือ p4 reconcile -naน่าจะเป็นวิธีที่สะดวกที่สุดในการค้นหาไฟล์ที่ไม่ได้ติดตามทั้งหมดในพื้นที่ทำงานอย่างเลี่ยงไม่พ้นคือ

-a บอกว่า "ขอไฟล์ที่ไม่ได้อยู่ในที่เก็บนั่นคือควรจะเพิ่ม"

-nพูดว่า "ไม่ทำการเปลี่ยนแปลง" นั่นคือการวิ่งแบบแห้ง (แม้ว่าข้อความอาจระบุว่า "เปิดสำหรับเพิ่ม" ในใจคุณต้องตีความว่าเป็น "จะเปิดเพื่อเพิ่มถ้าไม่ใช่ -n")

อาจเป็นวิธีที่สะดวกที่สุดในการค้นหาการเปลี่ยนแปลงในเครื่องทั้งหมดที่ทำในขณะออฟไลน์ไม่ใช่แค่ไฟล์ที่อาจต้องเพิ่ม แต่ยังรวมถึงไฟล์ที่อาจต้องลบหรือถูกเปลี่ยนแปลงโดยไม่ต้องเปิดเพื่อแก้ไขp4 editก็คือp4 reconcile -nเป็น

p4 fstatคำตอบที่หลากหลายสคริปต์มักเกี่ยวข้องกับ ในขณะที่ฉันยังไม่ได้ตรวจสอบสคริปต์เหล่านั้นทั้งหมด แต่ฉันมักใช้สคริปต์ที่คล้ายกันเพื่อชดเชยข้อบกพร่องของคำสั่งบังคับเช่นp4 reconcile -n - บ่อยครั้งที่ฉันพบว่าฉันต้องการเส้นทางภายในเครื่องแทนที่จะเป็นเส้นทางคลัง Perforce หรือเส้นทางพื้นที่ทำงาน

- + คำเตือน

p4 status ไม่ใช่คู่กับคำสั่งสถานะบนระบบควบคุมเวอร์ชันอื่น

p4 statusไม่ใช่แบบสอบถามแบบอ่านอย่างเดียว p4 statusพบการเปลี่ยนแปลงประเภทเดียวกันกับที่p4 reconcileทำและเพิ่มลงในที่เก็บ p4 statusดูเหมือนจะไม่มี-nตัวเลือกแบบแห้งเช่นp4 reconcileทำ

ถ้าเป็นเช่นp4 statusนั้นให้ดูที่ไฟล์และคิดว่า "โอ้ฉันไม่ต้องการมัน" จากนั้นคุณจะต้องทำp4 revertเช่นนั้นหากต้องการแก้ไขต่อในพื้นที่ทำงานเดิม มิฉะนั้นการเปลี่ยนแปลงที่p4 statusเพิ่มลงในชุดการเปลี่ยนแปลงของคุณจะได้รับการตรวจสอบในครั้งต่อไป

ดูเหมือนจะมีเหตุผลเพียงเล็กน้อยหรือไม่มีเลยที่จะใช้p4 statusมากกว่าp4 reconcile -nยกเว้นสำหรับรายละเอียดบางส่วนของพื้นที่ทำงานในท้องถิ่น VS สถานีชื่อพา ธ

ฉันสามารถจินตนาการได้ว่าใครก็ตามที่เลือก 'สถานะ' สำหรับคำสั่งที่ไม่ใช่แบบอ่านอย่างเดียวมีคำสั่งที่ จำกัด สำหรับภาษาอังกฤษและเครื่องมือควบคุมเวอร์ชันอื่น ๆ

--- + P4V GUI

ใน GUI p4vคำสั่งกระทบยอดจะค้นหาการเปลี่ยนแปลงในระบบที่อาจต้องเพิ่มลบหรือเปิดเพื่อแก้ไข โชคดีที่ไม่ได้เพิ่มลงในรายการการเปลี่ยนแปลงโดยค่าเริ่มต้น แต่คุณอาจต้องระมัดระวังในการปิดหน้าต่างกระทบยอดหลังจากตรวจสอบแล้วหากคุณไม่ต้องการดำเนินการเปลี่ยนแปลง


สถานะ p4 ดูเหมือนจะไม่เพิ่มไฟล์ ดูเหมือนว่าจะทำงานเหมือนและจัดทำเป็นเอกสารว่า 'กระทบยอด -n' แน่ใจหรือว่ามันเปลี่ยนแปลงสิ่งต่างๆ
kdubs

4

ฉันใช้สิ่งต่อไปนี้ในเครื่องมือของฉันที่สำรองไฟล์ใด ๆ ในพื้นที่ทำงานที่แตกต่างจากที่เก็บ (สำหรับ Windows) มันจัดการกรณีแปลก ๆ บางอย่างที่ Perforce ไม่ชอบมากนักเช่นช่องว่างแบบฝังดาวเปอร์เซ็นต์และแฮชมาร์ก:

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:

" dir / S / B / AD " แสดงรายการไฟล์ทั้งหมดที่หรือด้านล่างโฟลเดอร์นี้ ( / S ) ในรูปแบบ "bare" ( / B ) ไม่รวมไดเร็กทอรี (/ AD ) " sed " จะเปลี่ยนอักขระที่เป็นอันตรายเป็นรูปแบบ" % xx " (a la HTML) และคำสั่ง" p4 have " จะตรวจสอบรายการนี้ (" -x- ") กับเซิร์ฟเวอร์ที่ทิ้งสิ่งที่เกี่ยวกับไฟล์ที่พบในที่เก็บข้อมูล (" 1> NUL: ") ผลลัพธ์ที่ได้คือเส้นต่างๆเช่น:

Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.

Et voila!


นี่เป็นทางออกที่ยอดเยี่ยมและยังใช้งานได้กับ P4 เวอร์ชัน 2015.1
Rian Sanderson

เร็วมาก! find / xargs หน่วยความจำหมดและช้า เรียกคืนเป็นสองเท่าเมื่อเพิ่มลงในไฟล์. bat
Kevin

4

หรือจาก P4Win ให้ใช้ตัวเลือก "" Local Files not in Depot "บนแผงมุมมองด้านซ้ายมือ

ฉันไม่ได้ใช้ P4V มากนัก แต่ฉันคิดว่าสิ่งที่เทียบเท่าคือการเลือก "ซ่อนไฟล์พื้นที่ทำงานในเครื่อง" ในเมนูแบบเลื่อนลงตัวกรองของแท็บมุมมองพื้นที่ทำงานวิธีใช้ p4 fstat

ใน P4V 2015.1 คุณจะพบตัวเลือกเหล่านี้ใต้ปุ่มตัวกรองดังนี้: ใส่คำอธิบายภาพที่นี่


นี่แสดงเฉพาะไฟล์ภายใต้ไดเร็กทอรีปัจจุบันน่าเศร้า :(
JP P.

2

Quick 'n Dirty: ใน p4v ให้คลิกขวาที่โฟลเดอร์ดังกล่าวแล้วเพิ่มไฟล์ทั้งหมดที่อยู่ข้างใต้ลงในรายการการเปลี่ยนแปลงใหม่ ตอนนี้รายการการเปลี่ยนแปลงจะมีไฟล์ทั้งหมดที่ไม่ได้เป็นส่วนหนึ่งของคลัง


1

คำสั่งต่อไปนี้สร้างเอาต์พุตที่เหมือนสถานะ แต่ไม่มีอะไรเทียบเท่าsvn statusหรือgit statusให้ข้อมูลสรุปสถานะของแต่ละไฟล์แบบบรรทัดเดียว:

  • p4 status
  • p4 opened
  • p4 diff -ds

0

ฉันมีคะแนนชื่อเสียงไม่เพียงพอที่จะแสดงความคิดเห็น แต่โซลูชันของ Ross ยังแสดงรายการไฟล์ที่เปิดให้เพิ่ม คุณอาจไม่ต้องการใช้คำตอบของเขาเพื่อทำความสะอาดพื้นที่ทำงานของคุณ

ต่อไปนี้จะใช้p4 fstat(ขอบคุณ Mark Harrison) แทนp4 haveและแสดงรายการไฟล์ที่ไม่ได้อยู่ในคลังและไม่ได้เปิดให้เพิ่ม

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"

=== Jac


0

วิธีการที่รวดเร็ว แต่ดั้งเดิมเพียงเล็กน้อย หาก codebase ไม่เพิ่มไฟล์ใหม่ / เปลี่ยนมุมมองบ่อยเกินไปคุณสามารถสร้างที่เก็บ 'git' ในระบบจากการชำระเงินของคุณ จาก clean perforce sync, git init, เพิ่มและคอมมิตไฟล์ทั้งหมดในเครื่อง สถานะ Git นั้นรวดเร็วและจะแสดงไฟล์ที่ไม่ได้คอมมิตก่อนหน้านี้


0

p4 fstatคำสั่งช่วยให้คุณสามารถทดสอบว่าไฟล์ที่มีอยู่ในพื้นที่ทำงานร่วมกับfindการค้นหาไฟล์ที่จะตรวจสอบในขณะที่ตัวอย่างเช่น Perl ต่อไปนี้:

// throw the output of p4 fstat to a 'output file'
// find:
//  -type f  :-  only look at files,
//  -print0  :-  terminate strings with \0s to support filenames with spaces
// xargs:
//  Groups its input into command lines,
//  -0       :-  read input strings terminated with \0s
// p4:
//  fstat    :-  fetch workspace stat on files

my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";

// read output file
open F1, $outputFile or die "$!\n";

// iterate over all the lines in F1
while (<F1>) {
  // remove trailing whitespace
  chomp $_;

  // grep lines which has 'no such file' or 'not in client'
  if($_ =~ m/no such file/ || $_ =~ m/not in client/){

     // Remove the content after '-'
     $_=~ s/-\s.*//g;

     // below line is optional. Check ur output file for more clarity.
     $_=~ s/^.\///g;

     print "$_\n";
  }
}

close F1;

หรือคุณสามารถใช้ p4 reconcile -n -m ...

หากถูก "เปิดเพื่อลบ" แสดงว่าถูกลบออกจากพื้นที่ทำงานแล้ว โปรดทราบว่าคำสั่งด้านบนกำลังทำงานในโหมดแสดงตัวอย่าง ( -n)


1
โปรดอย่าโยนรหัสโดยไม่มีคำอธิบายใด ๆ เป็นคำตอบ แต่ให้เพิ่มคำอธิบายเพื่อช่วยให้ OP เข้าใจรหัสและเรียนรู้บางสิ่ง :)
Markus

0

ฉันต้องการบางอย่างที่จะใช้งานได้ทั้งใน Linux, Mac หรือ Windows ดังนั้นฉันจึงเขียนสคริปต์ Python สำหรับมัน แนวคิดพื้นฐานคือการวนซ้ำผ่านไฟล์และดำเนินการp4 fstatกับแต่ละไฟล์ (แน่นอนว่าละเว้นการอ้างอิงและโฟลเดอร์ tmp)

คุณสามารถค้นหาได้ที่นี่: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9


0

คำสั่งนี้สามารถให้รายการไฟล์ที่ต้องเพิ่มแก้ไขหรือลบ:
สถานะ p4 -aed ...
คุณสามารถใช้แยกต่างหากเช่นกัน
สถานะ p4 -a ...
p4 สถานะ -e ...
p4 สถานะ -d ...


-1

ใน P4V ภายใต้รายการเมนู "มุมมอง" ให้เลือก "ไฟล์ในโฟลเดอร์" ซึ่งจะแสดงแท็บใหม่ในบานหน้าต่างด้านขวา ทางด้านขวาสุดของแท็บจะมีไอคอนเล็ก ๆ ปรากฏขึ้นมาในหน้าต่างชื่อ "ไฟล์ในโฟลเดอร์" พร้อมไอคอน 2 ไอคอน เลือกไอคอนด้านซ้ายที่ดูเหมือนช่องทางแล้วคุณจะเห็นตัวเลือกต่างๆ เลือก "แสดงรายการที่ไม่ได้อยู่ใน Depot" จากนั้นไฟล์ทั้งหมดในโฟลเดอร์จะปรากฏขึ้น จากนั้นคลิกขวาที่ไฟล์ที่คุณต้องการเพิ่มแล้วเลือก "Mark for Add ... " คุณสามารถตรวจสอบได้ในแท็บ "รอดำเนินการ" เพียงส่งตามปกติ (Ctrl + S)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.