....................................../////.===Shadow-Here===./////................................................ > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < ------------------------------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// RIFF¤ WEBPVP8 ˜ ðÑ *ôô>‘HŸK¥¤"§£±¨àð enü¹%½_F‘åè¿2ºQú³íªú`N¿­3ÿƒügµJžaÿ¯ÿ°~¼ÎùnúîÞÖô•òíôÁÉß®Sm¥Ü/ ‡ó˜f£Ùà<˜„xëJ¢Ù€SO3x<ªÔ©4¿+ç¶A`q@Ì“Úñè™ÍÿJÌ´ª-˜ÆtÊÛL]Ïq*‘Ý”ì#ŸÌÏãY]@ê`¿ /ªfkØB4·®£ó z—Üw¥Pxù–ÞLШKÇN¾AkÙTf½è'‰g gÆv›Øuh~ a˜Z— ïj*á¥t d£“uÒ ¨`K˜¹ßþ]b>˜]_ÏÔ6W—è2r4x•íÖ…"ƒÖNîä!¦å Ú}ýxGøÌ —@ ;ÆÚŠ=ɾ1ý8lªË¥ô ^yf®Œ¢u&2©nÙÇ›ñÂñŒ³ aPo['½»øFùà­+4ê“$!lövlüÞ=;N®3ð‚õ›DÉKòÞ>ÄÍ ¥ˆuߤ#ˆ$6ù™¥îЇy’ÍB¼ çxÛ;X"WL£R÷͝*ó-¶Zu}º.s¸sšXqù–DþÿvªhüïwyŸ ¯é³lÀ:KCûÄ£Ëá\…­ ~—ýóî ¼ûûÜTÓüÇy…ŽÆvc»¾×U ñ¸žþоP÷¦ó:Ò¨¨5;Ð#&#ÖúñläÿÁœ GxÉ­/ñ‡áQðìYÉtÒw޼GÔ´zàÒò ð*ëzƒ•4~H]Ø‹f ñÓÈñ`NåWçs'ÆÏW^ø¹!XžµmQ5ÃËoLœÎ: ÞËÍ¥J ù…î èo£ßPÎñ¶ž8.Œ]ʵ~5›ÙË-ù*8ÙÖß±~ ©¹rÓê‚j¶d¸{^Q'˜±Crß ÚH—#¥¥QlÀ×ëã‡DÜ«èî þ&Çæžî;ŽÏºò6ÒLÃXy&ZŒ'j‚¢Ù€IßÚù+–MGi‰*jE€‘JcÜ ÓÌ EÏÚj]o˜ Þr <¾U ûŪæÍ/šÝH¥˜b”¼ ÁñßX GP›ï2›4WŠÏà×£…íÓk†¦H·ÅíMh–*nó÷à]ÁjCº€b7<ب‹¨5車bp2:Á[UªM„QŒçiNMa#<5›áËó¸HýÊ"…×Éw¹¦ì2º–x<›»a±¸3Weü®FÝ⑱ö–î–³|LPÈ~çð~Çå‡|º kD¢µÏàÆAI %1À% ¹Ò – ”ϝS¦‰4&¶£°à Öý”û_Ò Áw°A«Å€?mÇÛgHÉ/8)á¾ÛìáöŽP í¨PŸNÙµº¦‡§Ùš"ÿ«>+ªÕ`Ê÷‡‚ß Õû˜þãÇ-PÍ.¾XV‘€ dÜ"þ4¹ ±Oú‘©t¥¦FªÄÃÄ•b‚znýu½—#cDs˜ÃiÑOˆñ×QO=*IAÊ,¶ŽZƒ;‡wøXè%EÐk:F±Ú” .Ѽ+Áu&Ç`."pÈÉw o&¿dE6‘’EqTuK@Ì¥ã™À(Êk(h‰,H}RÀIXÛš3µ1©_OqÚÒJAñ$ÊÙÜ;D3çŒ[þùœh¬Ã³™ö6ç†NY".Ú‰ï[ªŸŒ '²Ð öø_¨ÂÉ9ué¶³ÒŠõTàîMØ#û¯gN‡bÙ놚X„ö …ÉeüÌ^J ‹€.œ$Æ)βÄeæW#óüßĺŸ€ ÀzwV 9oä»f4V*uB «Ë†¹ì¯žR霓æHXa=&“I4K;¯ç‹h×·"UŠ~<•╪Vêª&ÍSÃÆÅ?ÔqÎ*mTM ˜›µwêd#[C¡©§‘D<©àb†–ÁœøvH/,í:¯( ²£|4-„Æövv„Yͼ™^Á$ˆ„¢Û[6yB.åH*V¨æ?$=˜Ñ€•ñ·­(VlŸ‘ nÀt8W÷´Bûba?q9ú¶Xƒl«ÿ\ù¶’þòUÐj/õ¢Ìµ³g$ƒÎR!¸»|Oߍë’BhîÚÑ¢ñåŒJ„®„£2Ð3•ô02Nt…!£Í]Ïc½Qÿ?ˆ<&ÃA¾Ú,JˆijÌ#5yz„‰Î|ÊŽ5QÏ:‹ÐaóVÔxW—CpeÏzÐïíçôÿÅ_[hãsÐ_/ŽTÝ?BîˆííV$<¿i>²F¬_Eß¿ †bÊŒº­ÿ®Z H“C}”¬,Mp ý/Bá£w>˜YV°aƒúh+cŠ- r/[%|üUMHäQ°X»|û/@|°¥Ð !BÔ Ç¢Ä©š+Õì D«7ìN¶ŽðÔ " ƶ’ÖçtA‰Û×}{tþz­¾GÍ›k¹OEJR$ Â׃ «ëÁ"oÉôž$oUK(Ä)Ãz³Ê-‹êN[Ò3Œñbï8P 4ƒ×q¢bo|?<ÛX¬òÄͰL–±›(™ûG?ýË©ÚÄ–ÂDØÐ_Ç¡ô ¾–ÄÏø ×e8Ë©$ÄF¹Å‹ì[©óìl:F¾f´‹‹Xì²ï®\¬ôùƒ ÿat¥óèÒùHß0äe‚;ü×h:ÆWðHž=Ã8骣"kœ'Y?³}Tûè€>?0l›e1Lòñ„aæKÆw…hÖŠùW…ÈÆÄ0ši·›[pcwËþñiêíY/~-Á5˜!¿†A›™Mÿþ(±“t@â“ö2­´TG5yé]çå僳 .·ÍïçÝ7UÚ±Ð/Nè»,_Ï ùdj7\ï Wì4›„»c¸àešg#ÒÊ⥭áØo5‘?ÌdÝô¯ ¹kzsƒ=´#ëÉK›Ø´±-¥eW?‡çßtòTã…$Ý+qÿ±ƒ÷_3Ô¥í÷:æ–ž<·Ö‡‰Å¢ š‡%Ô—utÌÈìðžgÖÀz²À—ï÷Óîäõ{K'´È÷³yaÏÁjƒô}ž§®æÊydÕÈë5¯èˆõvÕ©ã*çD„ “z„Ó‡^^xÂ3M§A´JG‚öï 3W'ˆ.OvXè¡ÊÕª?5º7†˜(˜Ç¶#çê’¶!ÌdZK§æ 0fãaN]òY³RV ™î$®K2R¨`W!1Ôó\;Ý ýB%qæK•&ÓÈe9È0êI±žeŸß -ú@žQr¦ ö4»M¼Áè¹µmw 9 EÆE_°2ó„ŸXKWÁ×Hóì^´²GѝF©óäR†¦‰ç"V»eØ<3ùd3ÿÚ¤Žú“Gi" —‘_ÙËÎ~Üö¯¥½Î»üŸEÚŽåmÞþí ;ÞólËΦMzA"Âf(´òá;Éï(/7½ûñÌ­cïÕçлþÝz¾-ÍvÑ“pH­–ðÓj$¸Äû¤‚‘ãUBË-n“2åPkS5&‹Â|+g^œ®Ì͆d!OïäîU«c;{Û!ÅŽ«ëZ9Ókóˆ]¯ƒ›né `ÇÒ+tÆš (ØKá¾—=3œ®•vuMñg²\ï Ec€ 05±d™‡×iÇ×›UúvÌ¢£Èþ¡ÕØô¶ßÎA"ß±#Ö²ˆÊŸ¦*Ä~ij|àø.-¼'»Ú¥£h ofº¦‡VsR=N½„Î v˜Z*SÌ{=jÑB‹tê…;’HžH¯8–îDù8ñ¢|Q•bÛçš–‹m³“ê¨ åÏ^m¬Žãþ©ïêO‡½6] µÆ„Ooòü ²x}N¦Ë3ïé¿»€›HA˜m%çÞ/¿í7Fø“‹léUk)É°Œµ8Q8›:ÀŠeT*šõ~ôڝG6 ¢}`ùH­–”¡k ‰P1>š†®9z11!X wKfmÁ¦xÑ,N1Q”–æB¶M…ÒÃv6SMˆhU¬ÊPŽï‘öj=·CŒ¯u¹ƒVIЃsx4’ömÛýcå¡¶7ßŠß 57^\wÒÐÆ k§h,Œý î«q^R½3]J¸ÇðN ‚çU¬ôº^Áì} ³f©Õœ§ˆã:FÄÈ‚é(€™?àýÓüè1Gô£¼éj‚OÅñ  #>×—ßtà 0G¥Åa뀐kßhc™À_ÉñÞ#±)GD" YîäË-ÿÙ̪ ¹™a¯´¢E\ÝÒö‚;™„ë]_ p8‰o¡ñ+^÷ 3‘'dT4œŽ ðVë½° :¬víÑ«£tßÚS-3¶“þ2 †üüʨòrš¹M{É_¤`Û¨0ìjœøJ‡:÷ÃáZ˜†@GP&œÑDGÏs¡þ¦þDGú‘1Yá9Ôþ¼ ûø…§÷8&–ÜÑnÄ_m®^üÆ`;ÉVÁJ£?â€-ßê}suÍ2sõA NÌúA磸‘îÿÚ»ƒìö·á¿±tÑÐ"Tÿü˜[@/äj¬€uüªìù¥Ý˜á8Ý´sõj 8@rˆð äþZÇD®ÿUÏ2ùôõrBzÆÏÞž>Ì™xœ“ wiÎ×7_… ¸ \#€MɁV¶¥üÕÿPÔ9Z‡ø§É8#H:ƒ5ÀÝå9ÍIŒ5åKÙŠ÷qÄ>1AÈøžj"µÂд/ªnÀ qªã}"iŸBå˜ÓÛŽ¦…&ݧ;G@—³b¯“•"´4í¨ôM¨åñC‹ïùÉó¯ÓsSH2Ý@ßáM‡ˆKÀªÛUeø/4\gnm¥‹ŸŒ qÄ b9ÞwÒNÏ_4Ég³ú=܆‚´ •â¥õeíþkjz>éÚyU«Íӝ݃6"8/ø{=Ô¢»G¥ äUw°W«,ô—¿ãㆅү¢³xŠUû™yŒ (øSópÐ 9\åTâ»—*oG$/×ÍT†Y¿1¤Þ¢_‡ ¼ „±ÍçèSaÓ 3ÛMÁBkxs‰’R/¡¤ˆÙçª(*õ„üXÌ´ƒ E§´¬EF"Ù”R/ÐNyÆÂ^°?™6¡œïJ·±$§?º>ÖüœcNÌù¯G ‹ñ2ЁBB„^·úìaz¨k:#¨Æ¨8LÎõލ£^§S&cŒÐU€ü(‡F±Š¼&P>8ÙÁ ‰ p5?0ÊÆƒZl¸aô š¼¡}gÿ¶zÆC²¹¬ÎÖG*HB¡O<º2#ñŒAƒ–¡B˜´É$¥›É:FÀÔx¾u?XÜÏÓvN©RS{2ʈãk9rmP¼Qq̳ è¼ÐFׄ^¡Öì fE“F4A…!ì/…¦Lƒ… … $%´¾yã@CI¬ á—3PþBÏNÿ<ý°4Ü ËÃ#ØÍ~âW«rEñw‹eùMMHß²`¬Öó½íf³:‹k˜¯÷}Z!ã¿<¥,\#öµÀ¯aÒNÆIé,Ћ–lŽ#Àæ9ÀÒS·I’½-Ïp Äz¤Š Â* ­íÄ9­< h>׍3ZkËU¹§˜ŒŠ±f­’¤º³Q ÏB?‹#µíÃ¥®@(Gs«†vI¥Mµ‹Á©e~2ú³ÁP4ìÕi‚²Ê^ö@-DþÓàlÜOÍ]n"µã:žpsŽ¢:! Aõ.ç~ÓBûH÷JCÌ]õVƒd «ú´QÙEA–¯¯Œ!.ˆˆëQ±ù œ·Ì!Õâ )ùL„ÅÀlÚè5@B…o´Æ¸XÓ&Û…O«˜”_#‡ƒ„ûÈt!¤ÁÏ›ÎÝŠ?c9 â\>lÓÁVÄÑ™£eØY]:fÝ–—ù+p{™ðè û³”g±OƒÚSù£áÁÊ„ä,ï7š²G ÕÌBk)~ÑiCµ|h#u¤¶îK¨² #²vݯGãeÖ϶ú…¾múÀ¶þÔñ‚Š9'^($¤§ò “š½{éúp÷J›ušS¹áªCÂubÃH9™D™/ZöØÁ‡¦ÝÙŸ·kð*_”.C‹{áXó€‡c¡c€§/šò/&éš÷,àéJþ‰X›fµ“C¨œ®r¬"kL‰Â_q…Z–.ÉL~O µ›zn‚¹À¦Öª7\àHµšÖ %»ÇníV[¥*Õ;ƒ#½¾HK-ÖIÊdÏEÚ#=o÷Óò³´Š: Ç?{¾+9›–‘OEáU·S€˜j"ÄaÜ ŒÛWt› á–c#a»pÔZÞdŽtWê=9éöÊ¢µ~ ë ;Öe‡Œ®:bî3±ýê¢wà¼îpêñ¹¾4 zc¾ðÖÿzdêŒÑÒŝÀ‰s6¤í³ÎÙB¿OZ”+F¤á‡3@Ñëäg©·Ž ˆèª<ù@É{&S„œÕúÀA)‰h:YÀ5^ÂÓŒ°õäU\ ùËÍû#²?Xe¬tu‰^zÒÔãë¼ÛWtEtû …‚g¶Úüâî*moGè¨7%u!]PhÏd™Ý%Îx: VÒ¦ôÊD3ÀŽKÛËãvÆî…N¯ä>Eró–ð`5 Œ%u5XkñÌ*NU%¶áœÊ:Qÿú»“úzyÏ6å-၇¾ ´ ÒÊ]y žO‘w2Äøæ…H’²f±ÎÇ.ª|¥'gîV•Ü .̘¯€šòü¤U~Ù†*¢!?ò wý,}´°ÔÞnïoKq5µb!áÓ3"vAßH¡³¡·G(ÐÎ0Îò¼MG!/ài®@—¬04*`…«é8ªøøló“ˆÊ”èù¤…ßÊoÿé'ËuÌÖ5×È¡§ˆˆfŽë9}hìâ_!!¯  B&Ëö¶‰ÀAÙNVŸ Wh›¸®XÑJì¨ú“¿÷3uj²˜¨ÍÎìë±aúŠÝå¯ð*Ó¨ôJ“yºØ)m°WýOè68†ŸÏ2—‰Ïüꪫٚ¥‹l1 ø ÏÄFjêµvÌbü¦èÝx:X±¢H=MÐß—,ˆÉÇ´(9ú¾^ÅÚ4¿m‡$âX‘å%(AlZo@½¨UOÌÕ”1ø¸jÎÀÃÃ_ µ‘Ü.œº¦Ut: Æï’!=¯uwû#,“pþÇúŒø(é@?³ü¥‘Mo §—s@Œ#)§ŒùkL}NOÆêA›¸~r½¼ÙA—HJ«eˆÖ´*¡ÓpÌŸö.m<-"³ûÈ$¬_6­åf£ïÚâj1y§ÕJ½@dÞÁr&Í\Z%D£Íñ·AZ Û³øüd/ªAi†/Й~  ‡âĮҮÏh§°b—›Û«mJžòG'[ÈYýŒ¦9psl ýÁ ®±f¦x,‰½tN ‚Xª9 ÙÖH.«Lo0×?͹m¡å†Ѽ+›2ƒF ±Ê8 7Hցϓ²Æ–m9…òŸï]Â1äN†VLâCˆU .ÿ‰Ts +ÅÎx(%¦u]6AF Š ØF鈄‘ |¢¶c±soŒ/t[a¾–û:s·`i햍ê›ËchÈ…8ßÀUÜewŒðNOƒõD%q#éû\9¤x¹&UE×G¥ Í—™$ð E6-‡¼!ýpãÔM˜ Âsìe¯ñµK¢Ç¡ùôléœ4Ö£”À Š®Ðc ^¨À}ÙËŸ§›ºê{ÊuÉC ×Sr€¤’fÉ*j!úÓ’Gsùìoîßîn%ò· àc Wp÷$¨˜)û»H ×8ŽÒ€Zj¤3ÀÙºY'Ql¦py{-6íÔCeiØp‘‡XÊîÆUߢ܂ž£Xé¼Y8þ©ëgñß}é.ÎógÒ„ÃØËø¯»™§Xýy M%@NŠ À(~áÐvu7&•,Ù˜ó€uP‡^^®=_E„jt’ 403WebShell
403Webshell
Server IP : 107.180.102.13  /  Your IP : 216.73.216.161
Web Server : Apache
System : Linux ip-107-180-102-13.ip.secureserver.net 3.10.0-1160.119.1.el7.tuxcare.els25.x86_64 #1 SMP Wed Oct 1 17:37:27 UTC 2025 x86_64
User : nobody ( 99)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib64/python2.7/Demo/pdist/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib64/python2.7/Demo/pdist/rcvs.py
#! /usr/bin/env python

"""Remote CVS -- command line interface"""

# XXX To do:
#
# Bugs:
# - if the remote file is deleted, "rcvs update" will fail
#
# Functionality:
# - cvs rm
# - descend into directories (alraedy done for update)
# - conflict resolution
# - other relevant commands?
# - branches
#
# - Finesses:
# - retain file mode's x bits
# - complain when "nothing known about filename"
# - edit log message the way CVS lets you edit it
# - cvs diff -rREVA -rREVB
# - send mail the way CVS sends it
#
# Performance:
# - cache remote checksums (for every revision ever seen!)
# - translate symbolic revisions to numeric revisions
#
# Reliability:
# - remote locking
#
# Security:
# - Authenticated RPC?


from cvslib import CVS, File
import md5
import os
import string
import sys
from cmdfw import CommandFrameWork


DEF_LOCAL = 1                           # Default -l


class MyFile(File):

    def action(self):
        """Return a code indicating the update status of this file.

        The possible return values are:

        '=' -- everything's fine
        '0' -- file doesn't exist anywhere
        '?' -- exists locally only
        'A' -- new locally
        'R' -- deleted locally
        'U' -- changed remotely, no changes locally
               (includes new remotely or deleted remotely)
        'M' -- changed locally, no changes remotely
        'C' -- conflict: changed locally as well as remotely
               (includes cases where the file has been added
               or removed locally and remotely)
        'D' -- deleted remotely
        'N' -- new remotely
        'r' -- get rid of entry
        'c' -- create entry
        'u' -- update entry

        (and probably others :-)
        """
        if not self.lseen:
            self.getlocal()
        if not self.rseen:
            self.getremote()
        if not self.eseen:
            if not self.lsum:
                if not self.rsum: return '0' # Never heard of
                else:
                    return 'N' # New remotely
            else: # self.lsum
                if not self.rsum: return '?' # Local only
                # Local and remote, but no entry
                if self.lsum == self.rsum:
                    return 'c' # Restore entry only
                else: return 'C' # Real conflict
        else: # self.eseen
            if not self.lsum:
                if self.edeleted:
                    if self.rsum: return 'R' # Removed
                    else: return 'r' # Get rid of entry
                else: # not self.edeleted
                    if self.rsum:
                        print "warning:",
                        print self.file,
                        print "was lost"
                        return 'U'
                    else: return 'r' # Get rid of entry
            else: # self.lsum
                if not self.rsum:
                    if self.enew: return 'A' # New locally
                    else: return 'D' # Deleted remotely
                else: # self.rsum
                    if self.enew:
                        if self.lsum == self.rsum:
                            return 'u'
                        else:
                            return 'C'
                    if self.lsum == self.esum:
                        if self.esum == self.rsum:
                            return '='
                        else:
                            return 'U'
                    elif self.esum == self.rsum:
                        return 'M'
                    elif self.lsum == self.rsum:
                        return 'u'
                    else:
                        return 'C'

    def update(self):
        code = self.action()
        if code == '=': return
        print code, self.file
        if code in ('U', 'N'):
            self.get()
        elif code == 'C':
            print "%s: conflict resolution not yet implemented" % \
                  self.file
        elif code == 'D':
            remove(self.file)
            self.eseen = 0
        elif code == 'r':
            self.eseen = 0
        elif code in ('c', 'u'):
            self.eseen = 1
            self.erev = self.rrev
            self.enew = 0
            self.edeleted = 0
            self.esum = self.rsum
            self.emtime, self.ectime = os.stat(self.file)[-2:]
            self.extra = ''

    def commit(self, message = ""):
        code = self.action()
        if code in ('A', 'M'):
            self.put(message)
            return 1
        elif code == 'R':
            print "%s: committing removes not yet implemented" % \
                  self.file
        elif code == 'C':
            print "%s: conflict resolution not yet implemented" % \
                  self.file

    def diff(self, opts = []):
        self.action()           # To update lseen, rseen
        flags = ''
        rev = self.rrev
        # XXX should support two rev options too!
        for o, a in opts:
            if o == '-r':
                rev = a
            else:
                flags = flags + ' ' + o + a
        if rev == self.rrev and self.lsum == self.rsum:
            return
        flags = flags[1:]
        fn = self.file
        data = self.proxy.get((fn, rev))
        sum = md5.new(data).digest()
        if self.lsum == sum:
            return
        import tempfile
        tf = tempfile.NamedTemporaryFile()
        tf.write(data)
        tf.flush()
        print 'diff %s -r%s %s' % (flags, rev, fn)
        sts = os.system('diff %s %s %s' % (flags, tf.name, fn))
        if sts:
            print '='*70

    def commitcheck(self):
        return self.action() != 'C'

    def put(self, message = ""):
        print "Checking in", self.file, "..."
        data = open(self.file).read()
        if not self.enew:
            self.proxy.lock(self.file)
        messages = self.proxy.put(self.file, data, message)
        if messages:
            print messages
        self.setentry(self.proxy.head(self.file), self.lsum)

    def get(self):
        data = self.proxy.get(self.file)
        f = open(self.file, 'w')
        f.write(data)
        f.close()
        self.setentry(self.rrev, self.rsum)

    def log(self, otherflags):
        print self.proxy.log(self.file, otherflags)

    def add(self):
        self.eseen = 0          # While we're hacking...
        self.esum = self.lsum
        self.emtime, self.ectime = 0, 0
        self.erev = ''
        self.enew = 1
        self.edeleted = 0
        self.eseen = 1          # Done
        self.extra = ''

    def setentry(self, erev, esum):
        self.eseen = 0          # While we're hacking...
        self.esum = esum
        self.emtime, self.ectime = os.stat(self.file)[-2:]
        self.erev = erev
        self.enew = 0
        self.edeleted = 0
        self.eseen = 1          # Done
        self.extra = ''


SENDMAIL = "/usr/lib/sendmail -t"
MAILFORM = """To: %s
Subject: CVS changes: %s

...Message from rcvs...

Committed files:
        %s

Log message:
        %s
"""


class RCVS(CVS):

    FileClass = MyFile

    def __init__(self):
        CVS.__init__(self)

    def update(self, files):
        for e in self.whichentries(files, 1):
            e.update()

    def commit(self, files, message = ""):
        list = self.whichentries(files)
        if not list: return
        ok = 1
        for e in list:
            if not e.commitcheck():
                ok = 0
        if not ok:
            print "correct above errors first"
            return
        if not message:
            message = raw_input("One-liner: ")
        committed = []
        for e in list:
            if e.commit(message):
                committed.append(e.file)
        self.mailinfo(committed, message)

    def mailinfo(self, files, message = ""):
        towhom = "sjoerd@cwi.nl, jack@cwi.nl" # XXX
        mailtext = MAILFORM % (towhom, string.join(files),
                                string.join(files), message)
        print '-'*70
        print mailtext
        print '-'*70
        ok = raw_input("OK to mail to %s? " % towhom)
        if string.lower(string.strip(ok)) in ('y', 'ye', 'yes'):
            p = os.popen(SENDMAIL, "w")
            p.write(mailtext)
            sts = p.close()
            if sts:
                print "Sendmail exit status %s" % str(sts)
            else:
                print "Mail sent."
        else:
            print "No mail sent."

    def report(self, files):
        for e in self.whichentries(files):
            e.report()

    def diff(self, files, opts):
        for e in self.whichentries(files):
            e.diff(opts)

    def add(self, files):
        if not files:
            raise RuntimeError, "'cvs add' needs at least one file"
        list = []
        for e in self.whichentries(files, 1):
            e.add()

    def rm(self, files):
        if not files:
            raise RuntimeError, "'cvs rm' needs at least one file"
        raise RuntimeError, "'cvs rm' not yet imlemented"

    def log(self, files, opts):
        flags = ''
        for o, a in opts:
            flags = flags + ' ' + o + a
        for e in self.whichentries(files):
            e.log(flags)

    def whichentries(self, files, localfilestoo = 0):
        if files:
            list = []
            for file in files:
                if self.entries.has_key(file):
                    e = self.entries[file]
                else:
                    e = self.FileClass(file)
                    self.entries[file] = e
                list.append(e)
        else:
            list = self.entries.values()
            for file in self.proxy.listfiles():
                if self.entries.has_key(file):
                    continue
                e = self.FileClass(file)
                self.entries[file] = e
                list.append(e)
            if localfilestoo:
                for file in os.listdir(os.curdir):
                    if not self.entries.has_key(file) \
                       and not self.ignored(file):
                        e = self.FileClass(file)
                        self.entries[file] = e
                        list.append(e)
            list.sort()
        if self.proxy:
            for e in list:
                if e.proxy is None:
                    e.proxy = self.proxy
        return list


class rcvs(CommandFrameWork):

    GlobalFlags = 'd:h:p:qvL'
    UsageMessage = \
"usage: rcvs [-d directory] [-h host] [-p port] [-q] [-v] [subcommand arg ...]"
    PostUsageMessage = \
            "If no subcommand is given, the status of all files is listed"

    def __init__(self):
        """Constructor."""
        CommandFrameWork.__init__(self)
        self.proxy = None
        self.cvs = RCVS()

    def close(self):
        if self.proxy:
            self.proxy._close()
        self.proxy = None

    def recurse(self):
        self.close()
        names = os.listdir(os.curdir)
        for name in names:
            if name == os.curdir or name == os.pardir:
                continue
            if name == "CVS":
                continue
            if not os.path.isdir(name):
                continue
            if os.path.islink(name):
                continue
            print "--- entering subdirectory", name, "---"
            os.chdir(name)
            try:
                if os.path.isdir("CVS"):
                    self.__class__().run()
                else:
                    self.recurse()
            finally:
                os.chdir(os.pardir)
                print "--- left subdirectory", name, "---"

    def options(self, opts):
        self.opts = opts

    def ready(self):
        import rcsclient
        self.proxy = rcsclient.openrcsclient(self.opts)
        self.cvs.setproxy(self.proxy)
        self.cvs.getentries()

    def default(self):
        self.cvs.report([])

    def do_report(self, opts, files):
        self.cvs.report(files)

    def do_update(self, opts, files):
        """update [-l] [-R] [file] ..."""
        local = DEF_LOCAL
        for o, a in opts:
            if o == '-l': local = 1
            if o == '-R': local = 0
        self.cvs.update(files)
        self.cvs.putentries()
        if not local and not files:
            self.recurse()
    flags_update = '-lR'
    do_up = do_update
    flags_up = flags_update

    def do_commit(self, opts, files):
        """commit [-m message] [file] ..."""
        message = ""
        for o, a in opts:
            if o == '-m': message = a
        self.cvs.commit(files, message)
        self.cvs.putentries()
    flags_commit = 'm:'
    do_com = do_commit
    flags_com = flags_commit

    def do_diff(self, opts, files):
        """diff [difflags] [file] ..."""
        self.cvs.diff(files, opts)
    flags_diff = 'cbitwcefhnlr:sD:S:'
    do_dif = do_diff
    flags_dif = flags_diff

    def do_add(self, opts, files):
        """add file ..."""
        if not files:
            print "'rcvs add' requires at least one file"
            return
        self.cvs.add(files)
        self.cvs.putentries()

    def do_remove(self, opts, files):
        """remove file ..."""
        if not files:
            print "'rcvs remove' requires at least one file"
            return
        self.cvs.remove(files)
        self.cvs.putentries()
    do_rm = do_remove

    def do_log(self, opts, files):
        """log [rlog-options] [file] ..."""
        self.cvs.log(files, opts)
    flags_log = 'bhLNRtd:s:V:r:'


def remove(fn):
    try:
        os.unlink(fn)
    except os.error:
        pass


def main():
    r = rcvs()
    try:
        r.run()
    finally:
        r.close()


if __name__ == "__main__":
    main()

Youez - 2016 - github.com/yon3zu
LinuXploit