প্যাকেজ-অটোরমোভ কীভাবে প্যাকেজগুলি সরানোর সিদ্ধান্ত নেবে?


11

পুরানো বা অপ্রয়োজনীয় প্যাকেজগুলি মুছে ফেলার দাবি করে এমন প্যাকেজ-অটোমোম চালানোর জন্য আমার বর্তমান প্যাকেজগুলি আপডেট করার সময় আমাকে প্রায়শই অনুরোধ করা হয়। তবে সর্বদা এটি (পুরানো প্যাকেজগুলির সাথে) দু'টি প্যাকেজ মুছে ফেলা হবে বলে মনে হয় (যিনি অরোরা-থিম, আমার বর্তমান পছন্দসই থিম এবং ডায়ার্ড +)।

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

উত্তর:


7

উত্সটি এখানে: https://github.com/emacs-mirror/emacs/blob/master/lisp/emacs-lisp/package.el#L2113

এটি এমন সমস্ত প্যাকেজ মুছে দেয় যা প্যাকেজ-নির্বাচিত-প্যাকেজগুলিতে নেই বা নির্ভরতা নেই।

(defun package-autoremove ()
"Remove packages that are no more needed.
        Packages that are no more needed by other packages in
        `package-selected-packages' and their dependencies
        will be deleted."
(interactive)
;; If `package-selected-packages' is nil, it would make no sense to
;; try to populate it here, because then `package-autoremove' will
;; do absolutely nothing.
(when (or package-selected-packages
            (yes-or-no-p
            (format-message
            "`package-selected-packages' is empty! Really remove ALL packages? ")))
    (let ((removable (package--removable-packages)))
    (if removable
        (when (y-or-n-p
                (format "%s packages will be deleted:\n%s, proceed? "
                        (length removable)
                        (mapconcat #'symbol-name removable ", ")))
            (mapc (lambda (p)
                    (package-delete (cadr (assq p package-alist)) t))
                removable))
        (message "Nothing to autoremove")))))

(defun package--removable-packages ()
  "Return a list of names of packages no longer needed.
These are packages which are neither contained in
`package-selected-packages' nor a dependency of one that is."
  (let ((needed (cl-loop for p in package-selected-packages
                         if (assq p package-alist)
                         ;; `p' and its dependencies are needed.
                         append (cons p (package--get-deps p)))))
    (cl-loop for p in (mapcar #'car package-alist)
             unless (memq p needed)
             collect p)))

1
সুতরাং এই package-selected-packagesকোডটির অর্থ হ'ল যদি কোনও প্যাকেজের নাম যুক্ত করা হয় তবে তা স্বয়ংসেখ করা হবে না।
zck

@ জ্যাক হ্যাঁ প্যাকেজ - অপসারণযোগ্য-প্যাকেজগুলি তা করেছে।
jiegec

এছাড়াও মূল্য লক্ষ করেন, package-selected-packagesযখন আপনি ইনস্টল এবং প্যাকেজ অপসারণ স্বয়ংক্রিয়ভাবে আপডেট করা হয়। আপনার সাধারণত এটি সরাসরি সংশোধন করার প্রয়োজন হয় না। আপনি যদি জিনিসগুলি স্বয়ংক্রিয়ভাবে সরানো দেখেন তবে সেগুলি সম্ভবত প্যাকেজগুলি যা আপনার ইনস্টল করা কোনও কিছুর নির্ভরতা হিসাবে টানা হয়েছিল এবং পরে তা সরানো হয়েছিল। স্বতঃ অপসারণকে সমর্থন করার পাশাপাশি, আপনি যখন আপনার emacs কনফিগারেশনটি একটি নতুন মেশিনে অনুলিপি করেন এবং আপনার নির্বাচিত প্যাকেজ তালিকার সমস্ত কিছু ব্যবহার করে ইনস্টল করতে চান তখন এই পরিবর্তনশীলটি ব্যবহার করা যেতে পারে package-install-selected-packages
গ্লুকাস

1
@jiegec আমার পয়েন্ট, দুর্বল লিখিত ছিল সেই ব্যবহারকারীর সমস্যা ( "আমি autoremoved হওয়া থেকে প্যাকেজ প্রতিরোধ করবেন") সমাধান "হয় প্যাকেজ যোগ package-selected-packages
zck

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