উত্স ফাইলগুলিতে লাইসেন্স শিরোনাম যুক্ত করার জন্য সরঞ্জাম? [বন্ধ]


90

আমি এমন একটি সরঞ্জাম খুঁজছি যা প্রচুর পরিমাণে কিছু উত্স ফাইলগুলিতে লাইসেন্স শিরোনাম যুক্ত করবে, যার মধ্যে ইতিমধ্যে কয়েকটি শিরোনাম রয়েছে। ইতিমধ্যে উপস্থিত না থাকলে এমন কোনও সরঞ্জাম আছে যা একটি শিরোনাম সন্নিবেশ করবে?

সম্পাদনা: আমি ইচ্ছাকৃতভাবে এই প্রশ্নের উত্তর চিহ্নিত করছি না, কারণ উত্তরগুলি মূলত সমস্ত পরিবেশ-নির্দিষ্ট এবং বিষয়গত


4
"আমি ইচ্ছাকৃতভাবে এই প্রশ্নের উত্তর চিহ্নিত করছি না, যেহেতু উত্তরগুলি মূলত সমস্ত পরিবেশ-নির্দিষ্ট এবং বিষয়গত" আপনি কি সিউডো কোডের মতো পরিবেশের অজ্ঞাবলিক সমাধান খুঁজছেন? যদি তা না হয় তবে দয়া করে আমাদের জানান আপনি কোন পরিবেশের সাথে কাজ করছেন।
jrumemell

4
জড়ুমেল: না, পরিবেশ-অজ্ঞাস্তিক সমাধানের সন্ধান করছেন না। আমি যে মাল্টিপল-এনভায়রনমেন্ট টিম ব্যবহার করতে পারি সেগুলি সন্ধান করছিল।
অ্যালেক্স লাইমান

একটি উইন্ডোজ ইউআই অ্যাপ্লিকেশন যা আপনাকে এটি করতে দেয়, এটি একটি গ্রহণযোগ্য উত্তর হতে পারে?
ব্র্যাডি মরিটজ

@ Boomhauer আমি একটি উইন্ডোজ ইউআই অ্যাপ্লিকেশন খুঁজছি। আপনি কি কাউকে চিনেন?
Jus12

আমি নীচে একটি নতুন উত্তর যুক্ত করেছি, এটি কেবল এটি করা উচিত।
ব্র্যাডি মরিটজ

উত্তর:


64
#!/bin/bash

for i in *.cc # or whatever other pattern...
do
  if ! grep -q Copyright $i
  then
    cat copyright.txt $i >$i.new && mv $i.new $i
  fi
done

4
আমি "$ @" এর জন্য একটি দুর্দান্ত পছন্দ। আপনার ভিসিএস সিস্টেমের প্রয়োজন হলে আপনি চেকআউটগুলি সহ উদ্ভাবকও পেতে পারেন।
জোনাথন লেফলার

10
-1, আপনার উদ্ধৃতি দেওয়া উচিত"$i"
আলেকস-ড্যানিয়েল জাকিমেনকো-এ।

আমি অনুমান করি যে এটি উপ-ডিরেক্টরিগুলিতে পুনরাবৃত্তির সাথে কাজ করে না :-(
নোকট করুন

4
for i in $(find /folder -name '*.cc');সাব
জয়েস

16

পাইথন সমাধান, আপনার নিজের প্রয়োজনের জন্য সংশোধন করুন

বৈশিষ্ট্য:

  • ইউটিএফ হেডারগুলি পরিচালনা করে (বেশিরভাগ আইডিইর জন্য গুরুত্বপূর্ণ)
  • টার্গেট ডিরেক্টরিতে প্রদত্ত মাস্কটি পাস করার জন্য সমস্ত ফাইলকে পুনরাবৃত্তভাবে আপডেট করে (আপনার ভাষার ফাইলমাস্কের জন্য .endswith পরামিতিটি সংশোধন করুন (.c,। java, ..etc)
  • পূর্ববর্তী কপিরাইট পাঠ্য ওভাররাইট করার ক্ষমতা (এটি করার জন্য পুরানো কপিরাইটের প্যারামিটার সরবরাহ করুন)
  • allyচ্ছিকভাবে বাদ দেওয়া অ্যারেতে প্রদত্ত ডিরেক্টরিগুলি বাদ দেয়

-

# updates the copyright information for all .cs files
# usage: call recursive_traversal, with the following parameters
# parent directory, old copyright text content, new copyright text content

import os

excludedir = ["..\\Lib"]

def update_source(filename, oldcopyright, copyright):
    utfstr = chr(0xef)+chr(0xbb)+chr(0xbf)
    fdata = file(filename,"r+").read()
    isUTF = False
    if (fdata.startswith(utfstr)):
        isUTF = True
        fdata = fdata[3:]
    if (oldcopyright != None):
        if (fdata.startswith(oldcopyright)):
            fdata = fdata[len(oldcopyright):]
    if not (fdata.startswith(copyright)):
        print "updating "+filename
        fdata = copyright + fdata
        if (isUTF):
            file(filename,"w").write(utfstr+fdata)
        else:
            file(filename,"w").write(fdata)

def recursive_traversal(dir,  oldcopyright, copyright):
    global excludedir
    fns = os.listdir(dir)
    print "listing "+dir
    for fn in fns:
        fullfn = os.path.join(dir,fn)
        if (fullfn in excludedir):
            continue
        if (os.path.isdir(fullfn)):
            recursive_traversal(fullfn, oldcopyright, copyright)
        else:
            if (fullfn.endswith(".cs")):
                update_source(fullfn, oldcopyright, copyright)


oldcright = file("oldcr.txt","r+").read()
cright = file("copyrightText.txt","r+").read()
recursive_traversal("..", oldcright, cright)
exit()

6
সম্ভবত আপনার স্ক্রিপ্টটি অজগরের কথা উল্লেখ করে আঘাত করবেন না।
দানা

16

পরীক্ষা করে দেখুন কপিরাইট হেডার RubyGem। এটি পিএইচপি, সি, এইচ, সিপিপি, এইচপি, এইচ, আরবি, সিএসএস, জেএস, এইচটিএমএল সমাপ্ত এক্সটেনশনগুলির সাথে ফাইলগুলিকে সমর্থন করে। এটি শিরোনামগুলি যুক্ত করতে এবং সরাতে পারে।

" sudo gem install copyright-header" টাইপ করে এটি ইনস্টল করুন

এর পরে, এর মতো কিছু করতে পারেন:

copyright-header --license GPL3 \
  --add-path lib/ \
  --copyright-holder 'Dude1 <dude1@host.com>' \
  --copyright-holder 'Dude2 <dude2@host.com>' \
  --copyright-software 'Super Duper' \
  --copyright-software-description "A program that makes life easier" \
  --copyright-year 2012 \
  --copyright-year 2012 \
  --word-wrap 80 --output-dir ./

এটি --license-file আর্গুমেন্ট ব্যবহার করে কাস্টম লাইসেন্স ফাইলগুলিকে সমর্থন করে।


এটি কাস্টম বিদ্যমান শিরোলেখগুলি সরায় না তা বাদ দিয়ে এটি দুর্দান্ত :(
pgpb.padilla

4
আপনি যদি বিদ্যমান শিরোলেখগুলির জন্য কোনও টেম্পলেট তৈরি করেন তবে আপনি তা সরাতে পারবেন। আর্গুমেন্টের সাথে স্ক্রিপ্টে একটি আর্গুমেন্ট হিসাবে টেমপ্লেটটি পাস করুন --license-fileএবং --remove-pathসমস্ত ফাইল থেকে সেই সঠিক শিরোনামটি ছাঁটাতে পতাকাটি ব্যবহার করুন । মূলত, এখানে অনেকগুলি বিভিন্ন ধরণের শিরোনাম রয়েছে, এগুলি নির্ভরযোগ্যভাবে অপসারণের জন্য একটি অ্যালগরিদম তৈরি করা নন-তুচ্ছ।
এরিক ওস্টারম্যান

4
আমরা সম্প্রতি একটি অতিরিক্ত Dockerfileরুবি নির্ভরতা ইনস্টল করার পরে আর সমস্যা নেই
এরিক ওস্টারম্যান

15

এখানে একটি বাশ স্ক্রিপ্ট রয়েছে যা চালাকিটি করবে, ধরে নিলে ফাইল লাইসেন্সে আপনার কাছে শীর্ষ শিরোনাম রয়েছে: টেক্সট:

ফাইল addlicense.sh:

#!/bin/bash  
for x in $*; do  
head -$LICENSELEN $x | diff license.txt - || ( ( cat license.txt; echo; cat $x) > /tmp/file;  
mv /tmp/file $x )  
done  

এখন এটি আপনার উত্স ডিরেক্টরিতে চালান:

export LICENSELEN=`wc -l license.txt | cut -f1 -d ' '`  
find . -type f \(-name \*.cpp -o -name \*.h \) -print0 | xargs -0 ./addlicense.sh  

4
ফাইলনামে অঙ্ক থাকলে সেড এক্সপ্রেশনটি ভাল কাজ করবে না। পরিবর্তে, ব্যবহারের বিষয়ে বিবেচনাcut -f1 -d ' '
schweerelos

4
@ রোজনফিল্ড রফতানি বিবৃতিতে সমাপনী একক উদ্ধৃতি মিস হয়েছে।
টেলসপিন_কিট

ফাইন্ড কমান্ডে আপনার প্রথম বন্ধনী কেন দরকার? এটি আমার জন্য ব্যর্থ হয়েছিল
নোকট করুন

13

সম্পাদনা: আপনি যদি গ্রহপ ব্যবহার করছেন তবে একটি প্লাগইন রয়েছে

আমি সিলভার ড্রাগনের উত্তরের উপর ভিত্তি করে একটি সাধারণ অজগর স্ক্রিপ্ট লিখেছি। আমার আরও নমনীয় সমাধানের প্রয়োজন ছিল তাই আমি এটি নিয়ে এসেছি। এটি আপনাকে পুনরাবৃত্তভাবে ডিরেক্টরিতে সমস্ত ফাইলে একটি হেডস্পাইল যুক্ত করতে দেয়। আপনি ফাইলের নামগুলি মিলে যাবেন এবং canচ্ছিকভাবে ডিরেক্টরি নামের সাথে মিলিত হওয়া একটি রেইজেক্স এবং ফাইলের প্রথম লাইনের সাথে মেলে না এমন একটি রেজেক্স যুক্ত করতে পারেন। হেডারটি ইতিমধ্যে অন্তর্ভুক্ত রয়েছে কিনা তা পরীক্ষা করতে আপনি এই শেষ যুক্তিটি ব্যবহার করতে পারেন।

এই স্ক্রিপ্টটি কোনও শেবাং (#!) দিয়ে শুরু হলে স্বয়ংক্রিয়ভাবে কোনও ফাইলের প্রথম লাইন এড়িয়ে যাবে ip এটি নির্ভর করে এমন অন্যান্য স্ক্রিপ্টগুলি না ভাঙার জন্য। আপনি যদি এই আচরণটি না চান তবে আপনাকে লিখিত শিরোনামে 3 টি লাইন মন্তব্য করতে হবে।

এটা এখানে:

#!/usr/bin/python
"""
This script attempts to add a header to each file in the given directory 
The header will be put the line after a Shebang (#!) if present.
If a line starting with a regular expression 'skip' is present as first line or after the shebang it will ignore that file.
If filename is given only files matchign the filename regex will be considered for adding the license to,
by default this is '*'

usage: python addheader.py headerfile directory [filenameregex [dirregex [skip regex]]]

easy example: add header to all files in this directory:
python addheader.py licenseheader.txt . 

harder example adding someone as copyrightholder to all python files in a source directory,exept directories named 'includes' where he isn't added yet:
python addheader.py licenseheader.txt src/ ".*\.py" "^((?!includes).)*$" "#Copyright .* Jens Timmerman*" 
where licenseheader.txt contains '#Copyright 2012 Jens Timmerman'
"""
import os
import re
import sys

def writeheader(filename,header,skip=None):
    """
    write a header to filename, 
    skip files where first line after optional shebang matches the skip regex
    filename should be the name of the file to write to
    header should be a list of strings
    skip should be a regex
    """
    f = open(filename,"r")
    inpt =f.readlines()
    f.close()
    output = []

    #comment out the next 3 lines if you don't wish to preserve shebangs
    if len(inpt) > 0 and inpt[0].startswith("#!"): 
        output.append(inpt[0])
        inpt = inpt[1:]

    if skip and skip.match(inpt[0]): #skip matches, so skip this file
        return

    output.extend(header) #add the header
    for line in inpt:
        output.append(line)
    try:
        f = open(filename,'w')
        f.writelines(output)
        f.close()
        print "added header to %s" %filename
    except IOError,err:
        print "something went wrong trying to add header to %s: %s" % (filename,err)


def addheader(directory,header,skipreg,filenamereg,dirregex):
    """
    recursively adds a header to all files in a dir
    arguments: see module docstring
    """
    listing = os.listdir(directory)
    print "listing: %s " %listing
    #for each file/dir in this dir
    for i in listing:
        #get the full name, this way subsubdirs with the same name don't get ignored
        fullfn = os.path.join(directory,i) 
        if os.path.isdir(fullfn): #if dir, recursively go in
            if (dirregex.match(fullfn)):
                print "going into %s" % fullfn
                addheader(fullfn, header,skipreg,filenamereg,dirregex)
        else:
            if (filenamereg.match(fullfn)): #if file matches file regex, write the header
                writeheader(fullfn, header,skipreg)


def main(arguments=sys.argv):
    """
    main function: parses arguments and calls addheader
    """
    ##argument parsing
    if len(arguments) > 6 or len(arguments) < 3:
        sys.stderr.write("Usage: %s headerfile directory [filenameregex [dirregex [skip regex]]]\n" \
                         "Hint: '.*' is a catch all regex\nHint:'^((?!regexp).)*$' negates a regex\n"%sys.argv[0])
        sys.exit(1)

    skipreg = None
    fileregex = ".*"
    dirregex = ".*"
    if len(arguments) > 5:
        skipreg = re.compile(arguments[5])
    if len(arguments) > 3:
        fileregex =  arguments[3]
    if len(arguments) > 4:
        dirregex =  arguments[4]
    #compile regex    
    fileregex = re.compile(fileregex)
    dirregex = re.compile(dirregex)
    #read in the headerfile just once
    headerfile = open(arguments[1])
    header = headerfile.readlines()
    headerfile.close()
    addheader(arguments[2],header,skipreg,fileregex,dirregex)

#call the main method
main()

4
প্লাগইনটির জন্য ভাঙা লিঙ্ক
mjaggard

আমি মনে করি এটি হতে পারে: wiki.eclipse.org/
ডেভেলপমেন্ট_

আমি এটির নিজের পাইগন প্যাকেজ সংস্করণটি লেখার আগে গুগল করতে ব্যর্থ হয়েছি। ভবিষ্যতের উন্নতির জন্য আমি সম্ভবত আপনার সমাধানটি আকর্ষণ করব। github.com/zkurtz/license_proliferator
zkurtz


11

ঠিক আছে এখানে একটি সাধারণ উইন্ডোজ-কেবলমাত্র UI সরঞ্জাম যা আপনার নির্দিষ্ট ধরণের সমস্ত ফোল্ডারে কোনও ফোল্ডারে অনুসন্ধান করে, আপনার শীর্ষস্থানটি (আপনার লাইসেন্সের পাঠ্য) প্রেরণ করে এবং ফলাফলটি অন্য ডিরেক্টরিতে অনুলিপি করে (সম্ভাব্য ওভাররাইট সমস্যাগুলি এড়ানো) । এটিও ফ্রি। প্রয়োজনীয়। নেট 4.0।

আমি আসলে লেখক, তাই সংশোধন বা নতুন বৈশিষ্ট্যগুলির জন্য বিনা দ্বিধা বোধ করি ... যদিও বিতরণের সময়সূচীতে কোনও প্রতিশ্রুতি দেওয়া হয়নি। ;)

আরও তথ্য: অ্যামাজিফাই.কমলাইসেন্স শিরোনাম সরঞ্জাম


এছাড়াও, আমি এই সম্পর্কে যে কোনও প্রতিক্রিয়া প্রশংসা করব, ধন্যবাদ
ব্র্যাডি মরিটজ

4
আমি সত্যিই সফ্টওয়্যারটি পছন্দ করি তবে ফাইলের নামটি শিরোনামে প্রবেশের জন্য কোনও ম্যাক্রোর প্রয়োজন হয়। আলসো ফাইলগুলি বাদ দেওয়ার বিকল্পের সাথে সম্পাদনা করার জন্য ফাইলগুলির তালিকা প্রদর্শন করা দুর্দান্ত। (:
hs2d

ধন্যবাদ, ম্যাক্রো এবং বর্ধনের তালিকাটি একটি দুর্দান্ত ধারণা
ব্র্যাডি মরিটজ

আপনার লিঙ্কটির মেয়াদ শেষ হয়ে গেছে। এটি সাইট থেকে ডাউনলোড করাও সম্ভব নয়
ভালিজোন

ধন্যবাদ, আমি এটি মেরামত করব
ব্র্যাডি মরিটজ

5

লাইসেন্স-অ্যাডারের পরীক্ষা করে দেখুন। এটি একাধিক কোড ফাইলগুলি (এমনকি কাস্টমগুলিও) সমর্থন করে এবং বিদ্যমান শিরোনামগুলি সঠিকভাবে পরিচালনা করে। সর্বাধিক সাধারণ ওপেন সোর্স লাইসেন্সগুলির জন্য টেমপ্লেটগুলি নিয়ে ইতিমধ্যে আসে।


4
এর জন্য ধন্যবাদ, license-adderআপনি ঠিক কোনটি উল্লেখ করছেন? আমি লাইসেন্স-অ্যাড্রেসারটি পেয়েছি - ফ্রি। নেট অ্যাপ্লিকেশন - গুগল প্রকল্প হোস্টিং , এবং লাইসেন্স-
অ্যাড্ডার

গিটহাব এখন খুঁজে পাবেন: github.com/sanandrea/License- অ্যাডার
কোপ্পার

4

পিএইচপি ফাইলগুলি সংশোধন করতে এখানে আমি পিএইচপি রোল করেছি is মুছে ফেলার জন্য আমার কাছে পুরানো লাইসেন্সের তথ্য ছিল তাই এটি পুরানো পাঠ্যটিকে প্রথমে প্রতিস্থাপন করে, তারপরে খোলার সাথে সাথেই নতুন পাঠ্য যুক্ত করে

<?php
class Licenses
{
    protected $paths = array();
    protected $oldTxt = '/**
 * Old license to delete
 */';
    protected $newTxt = '/**
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */';

    function licensesForDir($path)
    {
        foreach(glob($path.'/*') as $eachPath)
        {
            if(is_dir($eachPath))
            {
                $this->licensesForDir($eachPath);
            }
            if(preg_match('#\.php#',$eachPath))
            {
                $this->paths[] = $eachPath;
            }
        }
    }

    function exec()
    {

        $this->licensesForDir('.');
        foreach($this->paths as $path)
        {
            $this->handleFile($path);
        }
    }

    function handleFile($path)
    {
        $source = file_get_contents($path);
        $source = str_replace($this->oldTxt, '', $source);
        $source = preg_replace('#\<\?php#',"<?php\n".$this->newTxt,$source,1);
        file_put_contents($path,$source);
        echo $path."\n";
    }
}

$licenses = new Licenses;
$licenses->exec();

3

এখানে আমি অ্যাপাচি তালিকার একটি খুঁজে পেয়েছি। এটি রুবিতে লেখা এবং এটি পড়ার পক্ষে যথেষ্ট সহজ বলে মনে হচ্ছে। এমনকি অতিরিক্ত বিশেষ বিশেষত্বের জন্য আপনি এটি রেক থেকে কল করতে সক্ষম হওয়া উচিত। :)


1

আপনার যদি এখনও একটি প্রয়োজন হয় তবে একটি ছোট সরঞ্জাম আছে যা আমি লিখেছি, যার নাম এসসিআরহিড । আপনি এটি http://www.solvasoft.nl/downloads.html এ খুঁজে পেতে পারেন


4
ডাউনলোড পৃষ্ঠা থেকে: "এটি উইন্ডোজের জন্য লেখা এবং এটি কাজ করার জন্য। নেট ফ্রেমওয়ার্ক 2.0 প্রয়োজন" "
রিকার্ডো মুরি

সি / সি ++ স্টাইল শিরোনাম এবং একটি ইউনিকোড বিওএম যুক্ত করে। অর্থ: প্রতিটি লাইনে header.txtলিখিত সামগ্রী যুক্ত করা হয় //এবং প্রথম লাইনটি ইউনিকোড বিওএম দিয়ে শুরু হয়।
কোপ্পর

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.