Changeset 53887 for trunk/src/wp-includes/functions.php
- Timestamp:
- 08/12/2022 09:51:10 AM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/functions.php
r53886 r53887 9 9 10 10 /** 11 * Convert given MySQL date string into a different format.11 * Converts given MySQL date string into a different format. 12 12 * 13 13 * - `$format` should be a PHP date format string. … … 409 409 410 410 /** 411 * Convert float number to format based on the locale.411 * Converts float number to format based on the locale. 412 412 * 413 413 * @since 2.3.0 … … 499 499 500 500 /** 501 * Convert a duration to human readable format.501 * Converts a duration to human readable format. 502 502 * 503 503 * @since 5.1.0 … … 569 569 570 570 /** 571 * Get the week start and end from the datetime or date string from MySQL.571 * Gets the week start and end from the datetime or date string from MySQL. 572 572 * 573 573 * @since 0.71 … … 615 615 616 616 /** 617 * Serialize data, if needed.617 * Serializes data, if needed. 618 618 * 619 619 * @since 2.0.5 … … 640 640 641 641 /** 642 * Unserialize data only if it was serialized.642 * Unserializes data only if it was serialized. 643 643 * 644 644 * @since 2.0.0 … … 656 656 657 657 /** 658 * Check value to find if it was serialized.658 * Checks value to find if it was serialized. 659 659 * 660 660 * If $data is not a string, then returned value will always be false. … … 728 728 729 729 /** 730 * Check whether serialized data is of string type.730 * Checks whether serialized data is of string type. 731 731 * 732 732 * @since 2.0.5 … … 757 757 758 758 /** 759 * Retrieve post title from XMLRPC XML.759 * Retrieves post title from XMLRPC XML. 760 760 * 761 761 * If the title element is not part of the XML, then the default post title from … … 780 780 781 781 /** 782 * Retrieve the post category or categories from XMLRPC XML.782 * Retrieves the post category or categories from XMLRPC XML. 783 783 * 784 784 * If the category element is not found, then the default post category will be … … 820 820 821 821 /** 822 * Use RegEx to extract URLs from arbitrary content.822 * Uses RegEx to extract URLs from arbitrary content. 823 823 * 824 824 * @since 3.7.0 … … 862 862 863 863 /** 864 * Check content for video and audio links to add as enclosures.864 * Checks content for video and audio links to add as enclosures. 865 865 * 866 866 * Will not add enclosures that have already been added and will … … 973 973 974 974 /** 975 * Retrieve HTTP Headers from URL.975 * Retrieves HTTP Headers from URL. 976 976 * 977 977 * @since 1.5.1 … … 1021 1021 1022 1022 /** 1023 * Build URL query based on an associative and, or indexed array.1023 * Builds URL query based on an associative and, or indexed array. 1024 1024 * 1025 1025 * This is a convenient function for easily building url queries. It sets the … … 1317 1317 1318 1318 /** 1319 * Set up the WordPress query.1319 * Sets up the WordPress query. 1320 1320 * 1321 1321 * @since 2.0.0 … … 1338 1338 1339 1339 /** 1340 * Retrieve the description for the HTTP status.1340 * Retrieves the description for the HTTP status. 1341 1341 * 1342 1342 * @since 2.3.0 … … 1432 1432 1433 1433 /** 1434 * Set HTTP status header.1434 * Sets HTTP status header. 1435 1435 * 1436 1436 * @since 2.0.0 … … 1474 1474 1475 1475 /** 1476 * Get the header information to prevent caching.1476 * Gets the header information to prevent caching. 1477 1477 * 1478 1478 * The several different headers cover the different ways cache prevention … … 1511 1511 1512 1512 /** 1513 * Set the headers to prevent caching for the different browsers.1513 * Sets the headers to prevent caching for the different browsers. 1514 1514 * 1515 1515 * Different browsers support different nocache headers, so several … … 1538 1538 1539 1539 /** 1540 * Set the headers for caching for 10 days with JavaScript content type.1540 * Sets the headers for caching for 10 days with JavaScript content type. 1541 1541 * 1542 1542 * @since 2.1.0 … … 1551 1551 1552 1552 /** 1553 * Retrieve the number of database queries during the WordPress execution.1553 * Retrieves the number of database queries during the WordPress execution. 1554 1554 * 1555 1555 * @since 2.0.0 … … 1565 1565 1566 1566 /** 1567 * Whether input is yes or no.1567 * Determines whether input is yes or no. 1568 1568 * 1569 1569 * Must be 'y' to be true. … … 1579 1579 1580 1580 /** 1581 * Load the feed template from the use of an action hook.1581 * Loads the feed template from the use of an action hook. 1582 1582 * 1583 1583 * If the feed action does not have a hook, then the function will die with a … … 1628 1628 1629 1629 /** 1630 * Load the RDF RSS 0.91 Feed template.1630 * Loads the RDF RSS 0.91 Feed template. 1631 1631 * 1632 1632 * @since 2.1.0 … … 1639 1639 1640 1640 /** 1641 * Load the RSS 1.0 Feed Template.1641 * Loads the RSS 1.0 Feed Template. 1642 1642 * 1643 1643 * @since 2.1.0 … … 1650 1650 1651 1651 /** 1652 * Load either the RSS2 comment feed or the RSS2 posts feed.1652 * Loads either the RSS2 comment feed or the RSS2 posts feed. 1653 1653 * 1654 1654 * @since 2.1.0 … … 1667 1667 1668 1668 /** 1669 * Load either Atom comment feed or Atom posts feed.1669 * Loads either Atom comment feed or Atom posts feed. 1670 1670 * 1671 1671 * @since 2.1.0 … … 1721 1721 1722 1722 /** 1723 * Display the favicon.ico file content.1723 * Displays the favicon.ico file content. 1724 1724 * 1725 1725 * @since 5.4.0 … … 1838 1838 1839 1839 /** 1840 * Retrieve URL with nonce added to URL query.1840 * Retrieves URL with nonce added to URL query. 1841 1841 * 1842 1842 * @since 2.0.4 … … 1853 1853 1854 1854 /** 1855 * Retrieve or display nonce hidden field for forms.1855 * Retrieves or display nonce hidden field for forms. 1856 1856 * 1857 1857 * The nonce field is used to validate that the contents of the form came from … … 1894 1894 1895 1895 /** 1896 * Retrieve or displayreferer hidden field for forms.1896 * Retrieves or displays referer hidden field for forms. 1897 1897 * 1898 1898 * The referer link is the current Request URI from the server super global. The … … 1915 1915 1916 1916 /** 1917 * Retrieve or displayoriginal referer hidden field for forms.1917 * Retrieves or displays original referer hidden field for forms. 1918 1918 * 1919 1919 * The input name is '_wp_original_http_referer' and will be either the same … … 1945 1945 1946 1946 /** 1947 * Retrieve referer from '_wp_http_referer' or HTTP referer.1947 * Retrieves referer from '_wp_http_referer' or HTTP referer. 1948 1948 * 1949 1949 * If it's the same as the current request URL, will return false. … … 1987 1987 1988 1988 /** 1989 * Retrieve original referer that was posted, if it exists.1989 * Retrieves original referer that was posted, if it exists. 1990 1990 * 1991 1991 * @since 2.0.4 … … 2079 2079 2080 2080 /** 2081 * Test if a given filesystem path is absolute.2081 * Tests if a given filesystem path is absolute. 2082 2082 * 2083 2083 * For example, '/foo/bar', or 'c:\windows'. … … 2119 2119 2120 2120 /** 2121 * Join two filesystem paths together.2121 * Joins two filesystem paths together. 2122 2122 * 2123 2123 * For example, 'give me $path relative to $base'. If the $path is absolute, … … 2139 2139 2140 2140 /** 2141 * Normalize a filesystem path.2141 * Normalizes a filesystem path. 2142 2142 * 2143 2143 * On windows systems, replaces backslashes with forward slashes … … 2178 2178 2179 2179 /** 2180 * Determine a writable directory for temporary files.2180 * Determines a writable directory for temporary files. 2181 2181 * 2182 2182 * Function's preference is the return value of sys_get_temp_dir(), … … 2222 2222 2223 2223 /** 2224 * Determine if a directory is writable.2224 * Determines if a directory is writable. 2225 2225 * 2226 2226 * This function is used to work around certain ACL issues in PHP primarily … … 2505 2505 2506 2506 /** 2507 * Get a filename that is sanitized and unique for the given directory.2507 * Gets a filename that is sanitized and unique for the given directory. 2508 2508 * 2509 2509 * If the filename is not unique, then a number will be added to the filename … … 2830 2830 2831 2831 /** 2832 * Create a file in the upload folder with given content.2832 * Creates a file in the upload folder with given content. 2833 2833 * 2834 2834 * If there is an error, then the key 'error' will exist with the error message. … … 2960 2960 2961 2961 /** 2962 * Retrieve the file type based on the extension name.2962 * Retrieves the file type based on the extension name. 2963 2963 * 2964 2964 * @since 2.5.0 … … 2999 2999 3000 3000 /** 3001 * Retrieve the file type from the file name.3001 * Retrieves the file type from the file name. 3002 3002 * 3003 3003 * You can optionally define the mime array, if needed. … … 3034 3034 3035 3035 /** 3036 * Attempt to determine the real file type of a file.3036 * Attempts to determine the real file type of a file. 3037 3037 * 3038 3038 * If unable to, the file name extension will be used to determine type. … … 3316 3316 3317 3317 /** 3318 * Retrieve list of mime types and file extensions.3318 * Retrieves the list of mime types and file extensions. 3319 3319 * 3320 3320 * @since 3.5.0 … … 3520 3520 3521 3521 /** 3522 * Retrieve list of allowed mime types and file extensions.3522 * Retrieves the list of allowed mime types and file extensions. 3523 3523 * 3524 3524 * @since 2.8.6 … … 3541 3541 3542 3542 /** 3543 * Filters list of allowed mime types and file extensions.3543 * Filters the list of allowed mime types and file extensions. 3544 3544 * 3545 3545 * @since 2.0.0 … … 3552 3552 3553 3553 /** 3554 * Display "Are You Sure" message to confirm the action being taken.3554 * Displays "Are You Sure" message to confirm the action being taken. 3555 3555 * 3556 3556 * If the action has the nonce explain message, then it will be displayed … … 4235 4235 4236 4236 /** 4237 * Encode a variable into JSON, with some sanity checks.4237 * Encodes a variable into JSON, with some sanity checks. 4238 4238 * 4239 4239 * @since 4.1.0 … … 4264 4264 4265 4265 /** 4266 * Perform sanity checks on data that shall be encoded to JSON.4266 * Performs sanity checks on data that shall be encoded to JSON. 4267 4267 * 4268 4268 * @ignore … … 4329 4329 4330 4330 /** 4331 * Convert a string to UTF-8, so that it can be safely encoded to JSON.4331 * Converts a string to UTF-8, so that it can be safely encoded to JSON. 4332 4332 * 4333 4333 * @ignore … … 4378 4378 4379 4379 /** 4380 * Send a JSON response back to an Ajax request.4380 * Sends a JSON response back to an Ajax request. 4381 4381 * 4382 4382 * @since 3.5.0 … … 4426 4426 4427 4427 /** 4428 * Send a JSON response back to an Ajax request, indicating success.4428 * Sends a JSON response back to an Ajax request, indicating success. 4429 4429 * 4430 4430 * @since 3.5.0 … … 4447 4447 4448 4448 /** 4449 * Send a JSON response back to an Ajax request, indicating failure.4449 * Sends a JSON response back to an Ajax request, indicating failure. 4450 4450 * 4451 4451 * If the `$data` parameter is a WP_Error object, the errors … … 4558 4558 4559 4559 /** 4560 * Retrieve the WordPress home page URL.4560 * Retrieves the WordPress home page URL. 4561 4561 * 4562 4562 * If the constant named 'WP_HOME' exists, then it will be used and returned … … 4580 4580 4581 4581 /** 4582 * Retrieve the WordPress site URL.4582 * Retrieves the WordPress site URL. 4583 4583 * 4584 4584 * If the constant named 'WP_SITEURL' is defined, then the value in that … … 4602 4602 4603 4603 /** 4604 * Delete the fresh site option.4604 * Deletes the fresh site option. 4605 4605 * 4606 4606 * @since 4.7.0 … … 4612 4612 4613 4613 /** 4614 * Set the localized direction for MCE plugin.4614 * Sets the localized direction for MCE plugin. 4615 4615 * 4616 4616 * Will only set the direction to 'rtl', if the WordPress locale has … … 4647 4647 4648 4648 /** 4649 * Convert smiley code to the icon graphic file equivalent.4649 * Converts smiley code to the icon graphic file equivalent. 4650 4650 * 4651 4651 * You can turn off smilies, by going to the write setting screen and unchecking … … 4853 4853 4854 4854 /** 4855 * Extract a slice of an array, given a list of keys.4855 * Extracts a slice of an array, given a list of keys. 4856 4856 * 4857 4857 * @since 3.1.0 … … 5241 5241 5242 5242 /** 5243 * Append the Widgets menu to the themes main menu.5243 * Appends the Widgets menu to the themes main menu. 5244 5244 * 5245 5245 * @since 2.2.0 … … 5266 5266 5267 5267 /** 5268 * Flush all output buffers for PHP 5.2.5268 * Flushes all output buffers for PHP 5.2. 5269 5269 * 5270 5270 * Make sure all output buffers are flushed before our singletons are destroyed. … … 5280 5280 5281 5281 /** 5282 * Load custom DB error or display WordPress DB error.5282 * Loads custom DB error or display WordPress DB error. 5283 5283 * 5284 5284 * If a file exists in the wp-content directory named db-error.php, then it will … … 5318 5318 5319 5319 /** 5320 * Convert a value to non-negative integer.5320 * Converts a value to non-negative integer. 5321 5321 * 5322 5322 * @since 2.5.0 … … 5330 5330 5331 5331 /** 5332 * Mark a function as deprecated and inform when it has been used.5332 * Marks a function as deprecated and inform when it has been used. 5333 5333 * 5334 5334 * There is a {@see 'hook deprecated_function_run'} that will be called that can be used … … 5515 5515 5516 5516 /** 5517 * Mark a file as deprecated and inform when it has been used.5517 * Marks a file as deprecated and inform when it has been used. 5518 5518 * 5519 5519 * There is a hook {@see 'deprecated_file_included'} that will be called that can be used … … 5607 5607 } 5608 5608 /** 5609 * Mark a function argument as deprecated and inform when it has been used.5609 * Marks a function argument as deprecated and inform when it has been used. 5610 5610 * 5611 5611 * This function is to be used whenever a deprecated function argument is used. … … 5771 5771 5772 5772 /** 5773 * Mark something as being incorrectly called.5773 * Marks something as being incorrectly called. 5774 5774 * 5775 5775 * There is a hook {@see 'doing_it_wrong_run'} that will be called that can be used … … 5857 5857 5858 5858 /** 5859 * Is the server running earlier than 1.5.0 version of lighttpd?5859 * Determines whether the server is running an earlier than 1.5.0 version of lighttpd. 5860 5860 * 5861 5861 * @since 2.5.0 … … 5871 5871 5872 5872 /** 5873 * D oes the specified module exist in the Apache config?5873 * Determines whether the specified module exist in the Apache config. 5874 5874 * 5875 5875 * @since 2.5.0 … … 5906 5906 5907 5907 /** 5908 * Check if IIS 7+ supports pretty permalinks.5908 * Checks if IIS 7+ supports pretty permalinks. 5909 5909 * 5910 5910 * @since 2.8.0 … … 5990 5990 5991 5991 /** 5992 * Whether to force SSL used for the Administration Screens.5992 * Determines whether to force SSL used for the Administration Screens. 5993 5993 * 5994 5994 * @since 2.6.0 … … 6010 6010 6011 6011 /** 6012 * Guess the URL for the site.6012 * Guesses the URL for the site. 6013 6013 * 6014 6014 * Will remove wp-admin links to retrieve only return URLs not in the wp-admin … … 6059 6059 6060 6060 /** 6061 * Temporarily suspend cache additions.6061 * Temporarily suspends cache additions. 6062 6062 * 6063 6063 * Stops more data being added to the cache, but still allows cache retrieval. … … 6084 6084 6085 6085 /** 6086 * Suspend cache invalidation.6086 * Suspends cache invalidation. 6087 6087 * 6088 6088 * Turns cache invalidation on and off. Useful during imports where you don't want to do … … 6106 6106 6107 6107 /** 6108 * Determine whether a site is the main site of the current network.6108 * Determines whether a site is the main site of the current network. 6109 6109 * 6110 6110 * @since 3.0.0 … … 6154 6154 6155 6155 /** 6156 * Determine whether a network is the main network of the Multisite installation.6156 * Determines whether a network is the main network of the Multisite installation. 6157 6157 * 6158 6158 * @since 3.7.0 … … 6176 6176 6177 6177 /** 6178 * Get the main network ID.6178 * Gets the main network ID. 6179 6179 * 6180 6180 * @since 4.3.0 … … 6215 6215 6216 6216 /** 6217 * Determine whether global terms are enabled.6217 * Determines whether global terms are enabled. 6218 6218 * 6219 6219 * @since 3.0.0 … … 6282 6282 6283 6283 /** 6284 * gmt_offset modificationfor smart timezone handling.6284 * Modifies gmt_offset for smart timezone handling. 6285 6285 * 6286 6286 * Overrides the gmt_offset option if we have a timezone_string available. … … 6545 6545 6546 6546 /** 6547 * Strip close comment and close php tags from file headers used by WP.6547 * Strips close comment and close php tags from file headers used by WP. 6548 6548 * 6549 6549 * @since 2.8.0 … … 6560 6560 6561 6561 /** 6562 * Permanently delete comments or posts of any type that have held a status6562 * Permanently deletes comments or posts of any type that have held a status 6563 6563 * of 'trash' for the number of days defined in EMPTY_TRASH_DAYS. 6564 6564 * … … 6612 6612 6613 6613 /** 6614 * Retrieve metadata from a file.6614 * Retrieves metadata from a file. 6615 6615 * 6616 6616 * Searches for metadata in the first 8 KB of a file, such as a plugin or theme. … … 6756 6756 6757 6757 /** 6758 * Send a HTTP header to disable content type sniffing in browsers which support it.6758 * Sends a HTTP header to disable content type sniffing in browsers which support it. 6759 6759 * 6760 6760 * @since 3.0.0 … … 6768 6768 6769 6769 /** 6770 * Return a MySQL expression for selecting the week number based on the start_of_week option.6770 * Returns a MySQL expression for selecting the week number based on the start_of_week option. 6771 6771 * 6772 6772 * @ignore … … 6794 6794 6795 6795 /** 6796 * Find hierarchy loops using a callback function that maps object IDs to parent IDs.6796 * Finds hierarchy loops using a callback function that maps object IDs to parent IDs. 6797 6797 * 6798 6798 * @since 3.1.0 … … 6818 6818 6819 6819 /** 6820 * Use the "The Tortoise and the Hare" algorithm to detect loops.6820 * Uses the "The Tortoise and the Hare" algorithm to detect loops. 6821 6821 * 6822 6822 * For every step of the algorithm, the hare takes two steps and the tortoise one. … … 6871 6871 6872 6872 /** 6873 * Send a HTTP header to limit rendering of pages to same origin iframes.6873 * Sends a HTTP header to limit rendering of pages to same origin iframes. 6874 6874 * 6875 6875 * @since 3.1.3 … … 6882 6882 6883 6883 /** 6884 * Retrieve a list of protocols to allow in HTML attributes.6884 * Retrieves a list of protocols to allow in HTML attributes. 6885 6885 * 6886 6886 * @since 3.3.0 … … 6980 6980 6981 6981 /** 6982 * Retrieve IDs that are not already present in the cache.6982 * Retrieves IDs that are not already present in the cache. 6983 6983 * 6984 6984 * @since 3.4.0 … … 7003 7003 7004 7004 /** 7005 * Test if the current device has the capability to upload files.7005 * Tests if the current device has the capability to upload files. 7006 7006 * 7007 7007 * @since 3.4.0 … … 7027 7027 7028 7028 /** 7029 * Test if a given path is a stream URL7029 * Tests if a given path is a stream URL 7030 7030 * 7031 7031 * @since 3.5.0 … … 7048 7048 7049 7049 /** 7050 * Test if the supplied date is valid for the Gregorian calendar.7050 * Tests if the supplied date is valid for the Gregorian calendar. 7051 7051 * 7052 7052 * @since 3.5.0 … … 7073 7073 7074 7074 /** 7075 * Load the auth check for monitoring whether the user is still logged in.7075 * Loads the auth check for monitoring whether the user is still logged in. 7076 7076 * 7077 7077 * Can be disabled with remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' ); … … 7117 7117 7118 7118 /** 7119 * Output the HTML that shows the wp-login dialog when the user is no longer logged in.7119 * Outputs the HTML that shows the wp-login dialog when the user is no longer logged in. 7120 7120 * 7121 7121 * @since 3.6.0 … … 7168 7168 7169 7169 /** 7170 * Check whether a user is still logged in, for the heartbeat.7170 * Checks whether a user is still logged in, for the heartbeat. 7171 7171 * 7172 7172 * Send a result that shows a log-in box if the user is no longer logged in, … … 7186 7186 7187 7187 /** 7188 * Return RegEx body to liberally match an opening HTML tag.7188 * Returns RegEx body to liberally match an opening HTML tag. 7189 7189 * 7190 7190 * Matches an opening HTML tag that: … … 7209 7209 7210 7210 /** 7211 * Retrieve a canonical form of the provided charset appropriate for passing to PHP7211 * Retrieves a canonical form of the provided charset appropriate for passing to PHP 7212 7212 * functions such as htmlspecialchars() and charset HTML attributes. 7213 7213 * … … 7235 7235 7236 7236 /** 7237 * Set the mbstring internal encoding to a binary safe encoding when func_overload7237 * Sets the mbstring internal encoding to a binary safe encoding when func_overload 7238 7238 * is enabled. 7239 7239 * … … 7288 7288 7289 7289 /** 7290 * Reset the mbstring internal encoding to a users previously set encoding.7290 * Resets the mbstring internal encoding to a users previously set encoding. 7291 7291 * 7292 7292 * @see mbstring_binary_safe_encoding() … … 7299 7299 7300 7300 /** 7301 * Filter /validatea variable as a boolean.7301 * Filters/validates a variable as a boolean. 7302 7302 * 7303 7303 * Alternative to `filter_var( $var, FILTER_VALIDATE_BOOLEAN )`. … … 7321 7321 7322 7322 /** 7323 * Delete a file7323 * Deletes a file. 7324 7324 * 7325 7325 * @since 4.2.0 … … 7538 7538 7539 7539 /** 7540 * Generate a random UUID (version 4).7540 * Generates a random UUID (version 4). 7541 7541 * 7542 7542 * @since 4.7.0 … … 7625 7625 7626 7626 /** 7627 * Send an email to the old site admin email address when the site admin email address changes.7627 * Sends an email to the old site admin email address when the site admin email address changes. 7628 7628 * 7629 7629 * @since 4.9.0 … … 7722 7722 7723 7723 /** 7724 * Return an anonymized IPv4 or IPv6 address.7724 * Returns an anonymized IPv4 or IPv6 address. 7725 7725 * 7726 7726 * @since 4.9.6 Abstracted from `WP_Community_Events::get_unsafe_client_ip()`. … … 7796 7796 7797 7797 /** 7798 * Return uniform "anonymous" data by type.7798 * Returns uniform "anonymous" data by type. 7799 7799 * 7800 7800 * @since 4.9.6 … … 7895 7895 7896 7896 /** 7897 * Schedule a `WP_Cron` job to delete expired export files.7897 * Schedules a `WP_Cron` job to delete expired export files. 7898 7898 * 7899 7899 * @since 4.9.6 … … 8083 8083 8084 8084 /** 8085 * Display a button directly linking to a PHP update process.8085 * Displays a button directly linking to a PHP update process. 8086 8086 * 8087 8087 * This provides hosts with a way for users to be sent directly to their PHP update process. … … 8195 8195 8196 8196 /** 8197 * Get the size of a directory.8197 * Gets the size of a directory. 8198 8198 * 8199 8199 * A helper function that is used primarily to check whether … … 8222 8222 8223 8223 /** 8224 * Get the size of a directory recursively.8224 * Gets the size of a directory recursively. 8225 8225 * 8226 8226 * Used by get_dirsize() to get a directory size when it contains other directories. … … 8238 8238 * WordPress started to load. 8239 8239 * @param array $directory_cache Optional. Array of cached directory paths. 8240 *8241 8240 * @return int|false|null Size in bytes if a valid directory. False if not. Null if timeout. 8242 8241 */
Note: See TracChangeset
for help on using the changeset viewer.